MariaDB Replication(복제) 설정
이번에 회사의 웹서버를 다중화를 계획하면서 DB 서버의 오류에 대비하기 위해서 미러링 서버를 구축하기로 했다. 그래서 테스트 서버 2대에 MariaDB 5.5.34 버전을 설치하고 Replication(복제) 테스트를 진행했다. 결과는 쉬운 설정으로 DB의 복제가 잘 이뤄졌다.
구성은 위의 이미지와 같다. Master -> Slave의 단방향 복제만 구현을 한 상태다. 양방향 복제도 가능하다고는 하는데 지금 당장 필요한 부분은 아니기 때문에 일단 테스트를 하지는 않았다. 이렇게 구성이 됐을 때 DB 복제를 위한 설정은 아래와 같다.
1. Master 설정
my.cnf 파일에 아래 내용을 추가한다.
server-id =1
log-bin=master-bin
binlog_format=mixed
replication 사용자 추가한다. 여기는 repl 이다.
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repl IDENTIFIED BY 'password';
MariaDB 데몬을 재시작한 후 복제할 DB의 데이터를 덤프한다.
# mysqldump -uwww -p www > www.sql
Master의 상태를 확인한다. Position 정보는 Slave 설정시에 필요하다.
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 | 81440 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
2. Slave 설정
my.cnf파일에 아래 내용을 추가한다.
server-id = 2
log-bin=slave-2-bin
relay-log=relay-bin
replicate-do-db=www
replicate-do-db 지시자를 이용해 복제한 DB를 지정하면 된다. 위에서는 www 라는 DB를 복제한다. 만약 하나 이상의 DB를 복제하려면 replicate-do-db 설정을 개수만큼 추가하면 된다. 다음으로 Master에서 덤프한 sql 데이터를 복구한다.
mysql -uwww -p www < www.sql
Slave에서 Master로 접속하기 위한 정보를 추가한다.
MariaDB [(none)]> CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000002',
MASTER_LOG_POS=81440,
MASTER_CONNECT_RETRY=10;
MariaDB 데몬을 재시작한다.
이렇게 설정한 후 Master에서 데이터를 insert 했을 때 Slave에 정상적으로 복제되는지 확인하면 된다. 또 하나 Master와 Slave에는 동일한 DB가 있어야 함으로 미리 DB를 생성해두도록 한다.
※ 참고자료
https://mariadb.com/kb/en/setting-up-replication/
https://mariadb.com/kb/en/replication-and-binary-log-server-system-variables/
안녕하세요, 우선적으로 양방향까지는 테스트를 해보지않았지만,
mariadb 5.5.5-10.0.12 를 master / slave 서버 둘다 설정하여 사용하고있었습니다.
하지만 해당 부분에서의동기화 오류가 빈번하게 발생하여, 혹시나 하는 마음으로
Mariadb 10.0.19 버전으로 master / slave / slave(10.0.19) 로 작업을 하였더니,
10.0.19 버전으로 설정해놓은 slave 서버는 문제가없는데요 혹시 테스트시 환경이
지속적으로 운영 서버에서도 정상적으로 진행이 되었는지 궁금하네요.
내용에도 적혀있지만 동일한 버전의 MariaDB에서 테스트를 했고 실제 운영 중인
사이트에 적용해서 2년째 사용 중인 설정입니다. 작동에 이상은 없었습니다.