Ncloud에서 MariaDB Multi Source Replication 구성하는 방법에 대한 상세 가이드입니다

개요

n대의 마스터 DB와 1대의 슬레이브 DB를 연결하여 마스터 DB들의 데이터를 슬레이브 DB 한곳에 모아 조회할 수 있는 Multi-Source-Replication(MSR)을 MariaDB에서 구성하는 방법을 정리해보겠습니다.

테스트 준비

  • 마스터 서버 2대, 슬레이브 서버 1대 준비
  • 각 서버에 MariaDB 10.3 이상 설치
  • MariaDB 리플리케이션작업 진행 시 마스터 서버의 데이터베이스에 쓰기 작업 금지
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

ACG 설정

서버 준비가 끝났으면 우선 마스터 서버 슬레이브 서버로 디비 백업 파일 복사과 복제 구성에 필요한 22, 3306 포트를 오픈해야 합니다.
오픈 할 때 규칙은 마스터 서버와 슬레이브 서버의 공통 ACG에 사설 IP 대역 전체를 지정할 수도 있고, 슬레이브 서버 전용 ACG에 마스터 서버 IP만 등록하는 방법도 있습니다.

Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

Slave 장비에 백업 디렉토리 생성

먼저 Slave 장비에 Master 장비들로 부터 DB 복원용 덤프 파일을 전송 받을 백업 디렉토리를 생성하는 것 부터 시작하겠습니다.

~# mkdir /data
~# cd /data
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

Master1 장비 구성

Master1 설정 추가

  • /etc/my.cnf.d/mariadb-server.cnf에 Master1 설정을 추가합니다.
  • MariaDB 버전에 따라서는 /etc/my.cnf.d/server.cnf 인 경우도 있습니다.
  • ~# vi /etc/my.cnf.d/mariadb-server.cnf
    
    server-id = 1
    log-bin = mariadb-bin
    binlog_format = mixed
    character-set-server = utf8
    
    #MariaDB를 재시작해 변경사항 적용.
    ~# systemctl restart mariadb
    
  • ~# vi /etc/my.cnf.d/mariadb-server.cnf
    
    log-bin
    server_id = 1
    log-basename = mariadb
    binlog-format = mixed
    character-set-server = utf8
    
    #MariaDB을 재시작해 변경사항 적용.
    ~# systemctl restart mariadb
    
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

리플리케이션 계정 생성

MariaDB 접속 후 리플리케이션을 진행할 계정 생성

#master1 계정 생성.
MariaDB [(none)]> create user '리플리케이션 계정명'@'%' identified by '패스워드';
MariaDB [(none)]> grant replication slave on *.* to '리플리케이션 계정명'@'%';
MariaDB [(none)]> flush privileges;
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

테스트 DB 생성

다음으로 테스트에 사용할 DB를 생성하겠습니다. 이미 생성되어 있는 다른 DB를 사용할 경우에는 별도로 테스트용 DB를 생성할 필요는 없습니다.

MariaDB [(none)]> CREATE DATABASE testdb1 default CHARACTER SET UTF8;
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

Master1 정보확인

이제 리플리케이션 설정에 필요한 Master 정보를 확인합니다.

MariaDB [(none)]> show variables like 'server_id';
MariaDB [(none)]> show master status;
[show master status] 명령으로 확인한 [File], [Position] 정보는 아래쪽에서 Slave DB를 설정할 때 입력해야 하므로 별도로 기록해두어야 합니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

DB 백업 파일 슬레이브 장비로 전송

testdb1 DB의 백업파일을 생성하고, 슬레이브 서버로 전송합니다.

~# mkdir /data
~# cd /data
~# mysqldump -u root -p --databases testdb1 > /data/test1.sql 

#슬레이브 서버에 전송.
~# scp test1.sql root@10.0.0.8:/data
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

Master2 장비 구성

Master2 설정 추가

  • /etc/my.cnf.d/mariadb-server.cnf에 Master2 설정을 추가합니다.
  • MariaDB 버전에 따라서는 /etc/my.cnf.d/server.cnf 인 경우도 있습니다.
  • ~# vi /etc/my.cnf.d/mariadb-server.cnf
    
    server-id = 2
    log-bin = mariadb-bin
    binlog_format = mixed
    character-set-server = utf8
    
    #MariaDB을 재시작해 변경사항 적용.
    ~# systemctl restart mariadb
    
  • ~# vi /etc/my.cnf.d/mariadb-server.cnf
    
    log-bin
    server_id = 2
    log-basename = mariadb
    binlog-format = mixed
    character-set-server = utf8
    
    #MariaDB을 재시작해 변경사항 적용.
    ~# systemctl restart mariadb
    
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

리플리케이션 계정 생성

MariaDB 접속 후 리플리케이션을 진행할 계정 생성합니다.

#master2 계정 생성.
MariaDB [(none)]> create user '리플리케이션 계정명'@'%' identified by '패스워드';
MariaDB [(none)]> grant replication slave on *.* to '리플리케이션 계정명'@'%';
MariaDB [(none)]> flush privileges;
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

테스트 DB 생성

다음으로 테스트에 사용할 DB를 생성하겠습니다. 이미 생성되어 있는 다른 DB를 사용할 경우에는 별도로 테스트용 DB를 생성할 필요는 없습니다.

MariaDB [(none)]> CREATE DATABASE testdb2 default CHARACTER SET UTF8;
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

Master2 정보확인

마찬가지로 리플리케이션 설정에 필요한 Master 정보를 확인합니다.

MariaDB [(none)]> show variables like 'server_id';
MariaDB [(none)]> show master status;
[show master status] 명령으로 확인한 [File], [Position] 정보는 아래쪽에서 Slave DB를 설정할 때 입력해야 하므로 별도로 기록해두어야 합니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

DB 백업 파일 슬레이브 장비로 전송

testdb2 DB의 백업파일 생성하고, 슬레이브 서버로 전송합니다.

~# mkdir /data
~# cd /data
~# mysqldump -u root -p --databases testdb2 > /data/test2.sql

~# scp test2.sql root@10.0.0.8:/data
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

Slave 장비 구성

Slave 설정 추가

  • /etc/my.cnf.d/mariadb-server.cnf에 Slave 설정을 추가합니다.
  • MariaDB 버전에 따라서는 /etc/my.cnf.d/server.cnf 인 경우도 있습니다.
~# vi /etc/my.cnf.d/mariadb-server.cnf

server-id = 3 

#리플리케이션 대상 디비 설정.
replicate-do-db = testdb1
replicate-do-db = testdb2

#리플리케이션 제외 디비 설정.
replicate-ignore-db = information_schema
replicate-ignore-db = mysql
replicate-ignore-db = performance_schema
replicate-ignore-db = sys

slave-skip-errors = all

#DB를 재시작하여 변경사항 적용.
~# systemctl restart mariadb
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

DB 복구 진행

먼저 복구할 DB를 미리 생성하고 Master1, Master2 장비에서 전송 받은 백업 파일을 사용해 DB를 복구합니다.

#복구할 DB 생성.
MariaDB [(none)]> create database testdb1;
MariaDB [(none)]> create database testdb2;
MariaDB [(none)]> quit

#DB 복구
~# mysql -u root -p testdb1 < /data/test1.sql
~# mysql -u root -p testdb2 < /data/test2.sql
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법
  • 백업 파일을 전송 받은 디렉토리로 이동해 백업 파일이 정상적으로 전송되었는지 확인합니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법
  • 백업 파일을 사용해 DB를 복구합니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

리플리케이션 채널 설정

리플리케이션 채널을 설정하는 쿼리문은 다음과 같은데, MySQL과는 일부 다른 부분이 있으니 잘 확인하고 사용해야 합니다.

MariaDB [(none)]> CHANGE MASTER '커넥션 이름' TO MASTER_HOST='마스터IP', MASTER_PORT=포트번호, MASTER_USER='생성한 리플리케이션 계정명', MASTER_PASSWORD='패스워드', MASTER_LOG_FILE='위에서 확인된 File명', MASTER_LOG_POS=위에서 확인된 Position 번호;

여기에 필요한 정보 중에서 [MASTER_LOG_FILE]과 [MASTER_LOG_POS]은 위쪽에서 확인한 Master DB들의 정보에 나타났던 것으로 정리하면 다음과 같습니다.

DB File Position
Master1mariadb-bin.000001939
Master2mariadb-bin.000002939

Master 서버 정보 입력

다음의 예시처럼 Slave 서버에 Master 서버 정보를 하나씩 입력합니다.

#Master1 예시
MariaDB [(none)]> CHANGE MASTER 'ch_testdb1' TO MASTER_HOST='10.0.0.6', MASTER_USER='testuser', MASTER_PORT=3306, MASTER_PASSWORD='Test123$', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=939;

#Master2 예시
MariaDB [(none)]> CHANGE MASTER 'ch_testdb2' TO MASTER_HOST='10.0.0.7', MASTER_USER='testuser', MASTER_PORT=3306, MASTER_PASSWORD='Test123$', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=939;

MariaDB [(none)]> FLUSH PRIVILEGES;
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

리플리케이션 채널 시작

리플리케이션 시작 후 에러가 없는지 확인합니다.

# start slave '커넥션명';
MariaDB [(none)]> start slave 'ch_testdb1'; 
MariaDB [(none)]> start slave 'ch_testdb2';

# show slave '커넥션명' status\G
MariaDB [(none)]> show slave 'ch_testdb1' status\G 
MariaDB [(none)]> show slave 'ch_testdb2' status\G
  • Master1
    상태 확인에서는 [Slave_IO_State], [Slave_IO_Running], [Slave_SQL_Running] 항목들이 아래와 같이 되어 있으면 정상입니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법
  • Master2
    상태 확인에서는 [Slave_IO_State], [Slave_IO_Running], [Slave_SQL_Running] 항목들이 아래와 같이 되어 있으면 정상입니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

리플리케이션 테스트

리플리케이션 설정을 모두 마친 후에 Master 서버들에서 DB 작업을 진행하고, Slave 서버에 해당 내용이 복제되는지 확인해보겠습니다.

  • Master1 서버 작업
    Master1 서버에 테스트를 위한 [sampletable1] Table을 생성합니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법
  • Slave 서버 확인
    Slave 서버에서 testdb1 DB에 sampletable1 Table이 복제되었는지 확인합니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법
  • Master2 서버 작업
    Master2 서버에 테스트를 위한 [sampletable2] Table을 생성합니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법
  • Slave 서버 확인
    Slave 서버에서 testdb2 DB에 sampletable2 Table이 복제되었는지 확인합니다.
Ncloud에서 MariaDB Multi Source Replication 구성하는 방법

리플리케이션 명령어 모음

리플리케이션 명령어
채널 설정 CHANGE MASTER '커넥션 이름' TO MASTER_HOST='마스터IP', MASTER_PORT=포트번호, MASTER_USER='생성한 리플리케이션 계정명', MASTER_PASSWORD='패스워드', MASTER_LOG_FILE='위에서 확인된 File명', MASTER_LOG_POS=위에서 확인된 Position 번호;
채널 시작START SLAVE "커넥션 이름";
채널 중지STOP SLAVE "커넥션 이름";
채널 상태 확인SHOW SLAVE "커넥션 이름" STATUS\G
채널 정보 삭제RESET SLAVE "커넥션 이름";

참고 URL

  1. MariaDB Replication 기본 설정 가이드
  2. MariaDB Multi-Source Replication 가이드