진행OS
KT Cloud 사용
준비물
1. 서버 3대
- 서버 1: Load Balance Server (HA Proxy) 역할
ㄴ ha proxy version : HA-Proxy version 1.5.18 2016/05/10
ㄴ 3306 / TCP 포트 오픈 (테스트의 경우 ANY보다 본인아이피/32 사용 권장)
ㄴ 80 / TCP 포트 오픈 (테스트의 경우 ANY보다 본인아이피/32 사용 권장)
- 서버 2: Client Server 1 (Master) 역할
ㄴ MySQL version : mysqld Ver 5.6.51 for Linux on x86_64 (MySQL Community Server (GPL))
ㄴ HTTPD version : Apache/2.4.6 (CentOS)
- 서버 3: Client Server 2 (Slave) 역할
ㄴ MySQL version : mysqld Ver 5.6.51 for Linux on x86_64 (MySQL Community Server (GPL))
ㄴ HTTPD version : Apache/2.4.6 (CentOS)
2. Window(내컴퓨터)에 MySQL Workbench 설치
※ 위 버전과 다르면 오류가 날 수 있습니다. (버전 차이로 인해 error 0 났었음.)
📌 HA Proxry?
1. Load Balancing이란?
- 부하 분산을 위해서 가상 IP를 통해 여러 대의 서버에 접속을 분배하는 역할
2. HA Proxy란?
- 기본적으로 reverse proxy 형태로 동작
- reverse proxy란, 서버로 들어오는 요청을 대신 받아서 서버에 전달하고 요청한 곳에 그 결과를 다시 전달해 주는 역할
- 고가용성 로드 밸러서 및 프록시 서버를 제공하는 무료 오픈 소스 소프트웨어
📌 서버 1 / HA Proxy 설치 및 80 포트 관련 설정
1. HA Proxy 설치
yum install -y haproxy
# HA Proxy 버전 확인
haproxy -v
# 버전
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>
2. HA Proxy 설정
# vi 편집기로 수정
vi /etc/haproxy/haproxy.cfg
# 아래 내용처럼 수정
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:80
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend app
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
balance roundrobin
server Server01 [클라이언트 서버1 ip]:80 check
server Server02 [클라이언트 서버2 ip]:80 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
balance roundrobin
server Server01 [클라이언트 서버1 ip]:80 check
server Server02 [클라이언트 서버2 ip]:80 check
📌 서버 2, 서버 3 / HTTPD 다운로드 및 Index.html 설정
1. httpd 다운로드 (서버2, 서버3 공통)
# yum 으로 다운로드
yum install -y httpd httpd-devel
2. 서버 2 / index.html 설정
# 수정 경로
# vi를 이용하여 수정
# 파일이 없으니 만들어야 합니다.
vi /var/www/html/index.html
# 빈 파일에 서버 3과 구분이 가능할만한 문구를 기입
Server 1 Test
# 저장 후 종료
:wq
3. 서버 3 / index.html 설정
# 수정 경로
# vi를 이용하여 수정
# 파일이 없으니 만들어야 합니다.
vi /var/www/html/index.html
# 빈 파일에 서버 3과 구분이 가능할만한 문구를 기입
Server 2 Test
# 저장 후 종료
:wq
4. 열어둔 80 포트를 이용하여 접속.
- 접속 후 새로 고침을 하면 내용이 바뀐다.
📌 서버 2, 서버 3 / MySQL 다운로드 및 이중화 설정
1. MySQL 설치 (서버2, 서버3 공통)
# wget을 이용하여 다운로드
# 편한 경로에서 설치
wget https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
# yum Repository 등록
rpm -ivh mysql-community-release-el6-5.noarch.rpm
# yum 으로 server 다운로드
yum install -y mysql-server
2. MySQL 실행(서버2, 서버3 공통)
# 실행
systemctl start mysqld
# 상태 확인
systemctl status mysqld
3. MySQL 계정 비밀번호 변경 및 접속 (서버2, 서버3 공통)
# root 계정의 비밀번호 변경
# 해당 명령어 입력 후 자신이 원하는
# 비밀번호를 입력하면 됩니다.
mysqladmin -u root password
# 비밀번호 변경 후 mysql 접속 확인하기
# 해당 명령어 입력 후 비밀번호 입력
mysql -u root -p
# 접속이 되는 것을 확인 후 mysql 빠져나오기
exit
4. 서버 2 / my.cnf 설정
# my.cnf 파일을 아래와 같이 수정
# 다 지우고 복사 붙여넣기 해도 됩니다.
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 추가된 부분
log-bin=mysql-bin
server-id=1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 저장 후 종료
:wq
5. 서버 3 / my.cnf 설정
# my.cnf 파일을 아래와 같이 수정
# 다 지우고 복사 붙여넣기 해도 됩니다.
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 추가된 부분
log-bin=mysql-bin
server-id=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 저장 후 종료
:wq
6. mysqld 재실행 (서버2, 서버3 공통)
systemctl restart mysqld
7. 서버 2 /mysql 접속 후 서버 3에서 서버 2로 접속할 수 있는 계정 생성
- 다시금 언급하지만 서버 2는 Master 서버이고, 서버 3은 Slave 서버의 역할을 합니다. (이중화)
# mysql 접속
# 접속 후 본인 비밀번호 입력
mysql -u root -p
# slave(서버3)에서 접속할 계정 생성
grant replication slave on *.* to '[계정명]'@'%' identified by '[비밀번호]';
8. 서버 2 / binary log 확인하기
show master status;
# File 과 Position 내용을 메모장에 입력해두거나
# 해당 명령어를 입력후 내용을 띄워두세요.
9. 서버 3 / mysql 접속 후 서버 2와 연동
# mysql 접속
# 접속 후 본인 비밀번호 입력
mysql -u root -p
# 서버 2와 연동
CHANGE master to
master_host='[서버2의 ip]',
master_user='[아까 7번에서 만든 계정명]',
master_password='[7번에서 지정한 비밀번호]',
master_log_file='[서버2의 Master File 값]',
master_log_pos=[서버2의 Position 값];
# master log file 은 따옴표가 있고
# master log pos 는 따옴표가 없습니다.
# 주의!!
# Slave 를 실행
start slave;
# Slvae 상태 확인
# G는 대문자로 해야합니다.
show slave status\G;
# 아래 사진 빨간 박스의 내용이 모두 Yes로 표시 된다면
# 이중화가 된겁니다.
10. 서버 2 / 테스트를 위한 데이터베이스, 테이블 생성
# 데이터베이스 생성
create database [DB 이름] default character set utf8;
# 데이터베이스 사용 선언
use [DB 이름];
# 테이블 생성
create table [테이블 이름] (
id INT Primary key,
name varcar(30)
);
# 테이블 값 넣기
insert into [테이블 이름] values([숫자형], [String형]);
11. 서버 3 / 내용 조회
# 데이터베이스 사용 선언
use [DB 이름];
# 내용 조회
# 조회 후 서버 2에서 넣은 값이 들어와있다면 성공
select * from [테이블 이름];
12. 서버 2 / HA Proxy 계정 생성 및 권한 설정
# 계정 생성
insert into user(host, user, password, ssl_cipher, x509_issuer, x509_subject) values('[공인ip]', '[사용자명]', '[비번]', '', '', '');
# 권한 설정
grant all privileges on *.* to '[사용자명]'@'%' with grant option;
13. 서버 3 / HA Proxy 계정 확인
# 데이터베이스 사용 선언
use mysql;
# 내용 조회
# 조회 후 서버 2에서 넣은 계정이 들어와있다면 성공
select user, host from user;
📌 서버 1 / 3306 포트 관련 설정
1. haproxy.cfg 파일 수정
# vi 편집기로 수정
vi /etc/haproxy/haproxy.cfg
# shift + g 키를 이용해 파일 맨 밑으로 이동
# 아래 내용 추가
listen mysql
bind *:3306
mode tcp
balance roundrobin
option mysql-check user [사용자 이름]
server Server01 [클라이언트 서버1 ip]:3306 check
server Server02 [클라이언트 서버2 ip]:3306 check
📌 Window (내 컴퓨터) / MySQL Workbench 연결 시키기
1. workbench 실행 후 + 버튼을 이용하여 연결
2. 아래와 같이 입력
Connection Name: [알아보기 쉬운 이름이나 지정하고 싶은 이름]
Connection Method: Standard (TCP/IP)
Hostname: [공인 IP or 외부 IP]
Port: 3306
Username: [위에서 만들어준 HA Proxy 계정 유저이름]
입력 후 Test Connection 시 Successfully made the MySQL connection 이 떠야함.
됐으면 OK를 눌러 저장
3. 만들어진 것을 확인 후 클릭해 접속
4. 접속 후 show variables like 'server_id'; 입력시 일정시간이 지난 후 Value의 값이 바뀌면 성공
'회사 > 과제' 카테고리의 다른 글
OpenVPN (0) | 2022.02.03 |
---|---|
CronTab 을 사용해 Shell Script 실행 (0) | 2022.01.26 |
기본 서비스 포트 (0) | 2022.01.18 |
DNS / Local DNS 구축 (0) | 2022.01.14 |
Samba (0) | 2022.01.14 |