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

[DB/MySQL] Replication / 서버 이중화 / 역할 분담 를 이어서 작성함.

 

# DB 이중화

Acitve  -  Active

(master,slave)-(slave,master) // (192.168.55.4) - (192.168.55.3)
(쓰기,읽기) - (읽기,쓰기)

 

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 : 스탠바이 측을 정지 시켜 두는 구성

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

#  Setting - Master

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

1-1) ip Setting : 192.168.55.3 / 192.168.55.4

 

2. Slave DB Server + Master DB Server

2-1) ip Setting : 192.168.55.4 / 192.168.55.3

3. Master 설정 // (192.168.55.4)

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


2) [mysqld] 밑에 다음 내용을 추가
server-id = 3
log-bin = mysql-bin


3) 서버 재 구동

systemctl restart mysqld

4. Master 상태 확인 // (192.168.55.4) 
mysql -u root -p 
show master status;

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

1) 계정 생성 및 권한 부여

# MySql 8.0 이전

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

 

# MySql 8.0 이후

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

 

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

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

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

 

#  Setting - Slave
6. Slave 설정 // ( 192.168.55.3)
1)  /etc/my.cnf.d/mysql-server.cnf 파일 수정
[mysqld] 밑에 다음 내용을 추가
server-id = 4
2) 서버 재 구동

systemctl restart mysqld

7. Master 지정 
# 서버 접속

mysql -u root -p


# Master - Slave 연결

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



8. 동기화 시작
start slave;

9. 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. 마스터, 슬레이브에서 DB 확인
show databases;

 

2. 마스터에서 DB 생성
CREATE DATABASE [DB이름];

 

3. 마스터, 슬레이브 에서 DB 확인
show databases;    

 

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