[DB/MySQL] Replication / 서버 이중화 / 역할 분담

# DB 이중화

Active - standby // (192.168.55.3) - (192.168.55.4)
쓰기 - 읽기 

 

1. 쓰기 전용, 읽기 전용 역할 분담

- Replication

 

2. 부하 분산

- 로드 밸런싱을 이용

 

3. DR(재난 복구, Disaster Recovery)

3-1. 미러 : Active - Active : 2개의 DB가 100% 동일하게 구성되어 모두 실행중인 상태

3-2. 핫 : Active - standby : 스탠바이를 가동 후 즉시 이용가능한 구성

3-3. 웜 : Active - standby : 스탠바이를 가동 후 이용가능하게 하기 위해서 약간의 준비가 필요한 구성

3-4. 콜드 : Active - standby : 스탠바이 측을 정지 시켜 두는 구성

-------------------------------------------------------------------------------------------------

#  쓰기 전용, 읽기 전용 역할 분담 - Replication

 

1.Vmware CentOS를 이용한 2개의 DB 세팅 및 네트워크 설정
1-1) Master DB Server + Slave DB Server

1-2) ip Setting : 192.168.55.3 / 192.168.55.4

 

2. 방화벽 설정 (2개 환경 모두)

systemctl stop firewalld

 

3. MySQL 설치 및 실행 (2개 환경 모두)

1)설치 : yum install mysql-server
2)실행 : systemctl restart mysqld

-------------------------------------------------------------------------------------------------

# Setting - Master
4. MySQL 초기 설정
1) mysql_secure_installation
2)  No - 패스워드 입력 - 패스워드 입력 - y - y - y - y

5. Master 설정

1)  /etc/my.cnf.d/mysql-server.cnf  파일 수정 


6. [mysqld] 밑에 다음 내용을 추가

server-id = 1
log-bin = mysql-bin


7. 서버 재 구동

systemctl restart mysqld

 

8. Master 상태 확인

mysql -u root -p 
show master status;


9. Replication할 때 사용할 계정 생성 및 권한 부여

9-1) 계정 생성 및 권한 부여

# Master DB에 접속 가능한 계정 생성 및 해당 계정에 권한 부여 // WorkBench 접속을 위한 계정

CREATE user '[계정명]'@'%' IDENTIFIED BY '[root 계정의 비밀번호]';
GRANT ALL PRIVILEGES ON DB이름.*  TO  '[생성한 계정명]'@'%';
FLUSH PRIVILEGES;

 

# Master DB에 접속 가능한 Slave 측 계정 생성 및 해당 계정을 Slave로 설정 // Slave가 Master에 접근할 계정 생성

CREATE USER '[SlaveDB가 접근할 계정 이름]'@'[Slave DB의 IP주소]' IDENTIFIED BY '[root 계정의 비밀번호]';
GRANT REPLICATION SLAVE ON *.*  TO '[생성한 계정명]'@'[Slave DB의 IP주소]'

 

9-2) Repl_slave_priv 속성이 Y로 되어있는지 확인

SELECT *
From mysql.user
WHERE user='[생성한 계정명]'\G

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

# Setting - Slave

10. Slave 설정
10-1)  /etc/my.cnf.d/mysql-server.cnf 파일 수정
[mysqld] 밑에 다음 내용을 추가
server-id = 2

 

10-2) 서버 재 구동

systemctl restart mysqld


11. Master 지정
11-1)  서버 접속

mysql -u root -p


11-2) Master - Slave 연결

change master to
master_host='[마스터 컴퓨터의 IP 주소]',
master_user='[마스터에서 만든 slave용 계정 이름]',
master_password='[마스터에서 만든 slave용 계정의 PW]',
master_log_file='mysql-bin.[마스터의 로그 번호]',
master_log_pos=[마스터의 포지션 번호];


12. 동기화 시작
start slave;

13. Slave 상태 확인
show slave status; 또는 show slave status\G; 

-> Slave_IO_Running: Yes

-> Slave_SQL_Running: Yes
-> Slave_SQL_Running_State 등 확인
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
# 동기화 안될 때
(1)  Slave 
stop slave;

(2) Master 
마스터 상태 확인

 (3) Slave 
change master to 명령어로 설정
start slave;


-----------------------------------------------------------------------------------------------------------------------------------------------------------------
# 동작 확인
(1) Master , Slave에서 DB 확인
show databases;

 

(2) Master 에서 DB 생성
CREATE DATABASE [DB이름];

 

(3) Master , Slave에서 DB 확인
show databases;    

 

이 때 양쪽에 DB가 생성되어 있어야 한다.