MariaDB 다중 소스 복제(Multi-Source Replication) 구축 및 명령어
이번 포스팅에서 구현해볼 관계도는 다중 소스 복제(multi-source replication)입니다.
제가 다중소스복제가 필요한 상황은 아래와 같습니다.
- 마스터, 슬레이브1, 슬레이브2, 슬레이브n 은 DB부하 분산을 위해 사용됩니다.
- 슬레이브1에는 마스터에 있는 테이블 중 분석에 필요한 테이블이 존재합니다.
분석에 필요한 데이터는 용량이 크며, 다른 서비스에서는 필요 없습니다.
특정한 부가 서비스에만 분석에 필요한 데이터가 필요합니다. - 분석 프로그램 사용 시 마스터에 있는 정보도 필요한 상황입니다.
좀 모호 할 수도 있는 말이지만, 저는 마스터의 데이터와, 분석에서만 사용되는 데이터를 합쳐 놓은 DB가 필요한 상황입니다. 이때 적절한 리플리케이션 관계도가 다중 소스 복제라고 판단하였습니다.
다중 소스 복제(Multi-Source Replication)
마스터
에 test_db1, test_db2가 존재한다고 가정하겠습니다. 슬레이브1
은 마스터의 슬레이브이며, 동일하게 test_db1, test_db2가 복제되어있습니다. 슬레이브1
에서 test_db3을 생성하였고, 슬레이브1-1
은 마스터와 슬레이브1의 데이터가 모두 적재되도록 설계하였습니다.
슬레이브1-1 설정하기
[개발환경]
OS : Rocky Linux
DB : MariaDB 10.2
1. mySQL(MariaDB) 설정
2022.11.22 - [개발/MariaDB] - MariaDB 리플리케이션(Replication) 이해 및 구축(Rocky Linux)
위의 포스팅에서 마스터, 슬레이브1 설정을 하였습니다. 참고해주세요.
이번 포스팅에서는 슬레이브 1-1만 설정하도록 하겠습니다.
$ vi /etc/my.cnf.d/server.cnf
[mysqld]
# replication setting (slave) =====================================
server_id=3
relay-log=mysql-relay-bin
relay_log_purge=1
log-bin=mysql-bin
binlog-format=row
expire_logs_days=30
슬레이브1과 동일한 설정이며, server_id
를 3으로 설정한 것만 다릅니다.
2. MariaDB 재 실행
$ systemlctl restart mariadb
3. 리플리케이션 통신 계정 설정
# 만약에 슬레이브1-1에 슬레이브 설정되어있다면 아래의 명령어 실행 후 change master 명령어 사용하세요.
mysql> stop slave;
mysql> reset slave all;
mysql> CHANGE MASTER "master1" TO MASTER_HOST = '192.168.0.1', MASTER_USER='replication_user1', MASTER_PASSWORD = 'pw123!@#', MASTER_LOG_FILE='마스터의 바이너리 로그 파일명', MASTER_LOG_POS=마스터의포지션번호;
mysql> CHANGE MASTER "master2" TO MASTER_HOST = '192.168.0.2', MASTER_USER='replication_user1', MASTER_PASSWORD = 'pw123!@#', MASTER_LOG_FILE='슬레이블1의 바이너리 로그 파일명', MASTER_LOG_POS=슬레이브1의포지션번호;
[그림2] 처럼
master1
이름으로 마스터와의 리플리케이션 통신할 수 있도록 세팅하였고,
(마스터에 inset, update 등이 되면 slave1-1에 복제되도록 설정)master2
이름으로 salve1과 리플리케이션 통신하도록 설정하였습니다.
(슬레이브1에서 실행된 inset 등을 slave1-1 복제)
4. 슬레이브1-1 실행
mysql> start all slaves;
mysql> SHOW ALL slaves STATUS\G
*************************** 1. row ***************************
Connection_name: master1
Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.1
Master_User: replication_user1
Master_Port: 3306
Connect_Retry: 60
이하 생략....
*************************** 2. row ***************************
Connection_name: master2
Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.2
Master_User: replication_user1
이하 생략.....
다중 복제가 아닌 경우에는 start slaves;
show slave status;
명령어를 사용했는데,
다중인 경우에는 all
, slaves
등이 다른 것을 알 수 있습니다.show slave status;
를 통해 master1, master2가 잘 연결된 것을 보실 수 있습니다.
자주 사용하는 명령어
슬레이브 상태 보기
# 슬레이브 연결한 모든 상태 보기
mysql> SHOW ALL slaves STATUS;
# 특정한 이름의 상태값 보기
mysql> SHOW SLAVE "master1" STATUS;
# 디폴트값 설정 후 디폴트의 상태값 보기
mysql> SET @@default_master_connection = 'master1';
mysql> SHOW SLAVE STATUS;
슬레이브 멈추기
# 슬레이브 모두 멈추기
mysql> stop all slaves;
# 특정한 이름의 슬레이브 멈추기
mysql> STOP SLAVE "master1"
# 디폴트값 설정 후 슬레이브 멈추기
mysql> SET @@default_master_connection = 'master1';
mysql> STOP SLAVE;
슬레이브 시작
# 슬레이브 모두 시작하기
mysql> START ALL SLAVES;
# 특정한 이름의 슬레이브 멈추기
mysql> START SLAVE "master1"
# 디폴트값 설정 후 슬레이브 멈추기
mysql> SET @@default_master_connection = 'master1';
mysql> START SLAVE;
슬레이브 스킵하기
mysql> SET @@default_master_connection = 'master1';
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
mysql> START SLAVE;
슬레이브 설정 초기화
mysql> reset slave all;
참고자료
다중 소스 복제 명령어 모음 : https://mariadb.com/kb/en/multi-source-replication/
'개발 > MariaDB' 카테고리의 다른 글
Mariadb 리플리케이션(Replication) 은 어떻게 동작하는 걸까? (0) | 2022.11.25 |
---|---|
MariaDB 리플리케이션(Replication) 이해 및 구축(Rocky Linux) (2) | 2022.11.22 |
XMPP mariadb 데이터 초기화 하는 방법 (0) | 2022.10.28 |
MySQL innoDB는 어떻게 생겼나요? [InnoDB Architecture] (0) | 2022.10.26 |
[MySQL] MySQL 리플리케이션 UUID 관련 에러 (0) | 2022.10.25 |
댓글
이 글 공유하기
다른 글
-
Mariadb 리플리케이션(Replication) 은 어떻게 동작하는 걸까?
Mariadb 리플리케이션(Replication) 은 어떻게 동작하는 걸까?
2022.11.25 -
MariaDB 리플리케이션(Replication) 이해 및 구축(Rocky Linux)
MariaDB 리플리케이션(Replication) 이해 및 구축(Rocky Linux)
2022.11.22 -
XMPP mariadb 데이터 초기화 하는 방법
XMPP mariadb 데이터 초기화 하는 방법
2022.10.28 -
MySQL innoDB는 어떻게 생겼나요? [InnoDB Architecture]
MySQL innoDB는 어떻게 생겼나요? [InnoDB Architecture]
2022.10.26