[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가 생성되어 있어야 한다.
'DB(MySQL)' 카테고리의 다른 글
[DB/MySQL]DB 백업 파일 생성 및 백업 실행 (0) | 2023.12.02 |
---|---|
[DB/MySQL] HAProxy + Keepalived / 고가용성(High-Availability) (2) (0) | 2023.11.10 |
[DB/MySQL] Active - Active 간 HAProxy 활용을 통한 로드밸런싱 구현 (0) | 2023.11.10 |
[DB/MySQL] HAProxy + Keepalived / 고가용성(High-Availability) (0) | 2023.11.09 |
[DB/MySQL] Replication / 서버 이중화 / 역할 분담 (0) | 2023.11.07 |