해당 포스트에서는 분리한 Zabbix DB 서버를 가지고 Replication 구성을 진행해보도록 하겠습니다.
** OS 버전: ubuntu 18.04
** DB 버전: mysql Ver 8.0.22
1. Slave 서버 준비
- Slave DB 서버는 되도록이면 데이터 호환성을 위해 Master DB와 같은 버전의 DB를 사용해줍니다.
- Slave DB 서버의 버전을 다르게 가져가 경우 Master DB보다는 버전이 높아야합니다.
- 저는 Hyper-V의 VM을 통해서 테스트를 진행하였습니다. - 기존 zabbix DB로 사용하던 VM을 복사를 진행하였으며, 그러므로 별도의 DB 설치는 진행하지 않았습니다. - 다른 방식을 통해서 진행하시는 경우
# mysql -V : 아래 명령을 통해 본인의 DB 버전을 확인하신 후 동일 버전으로 설치를 진행해줍니다.
# dpkg -l : 아래 명령어로 설치된 패키지들이 확인이 가능합니다.
2. Zabbix-Server 중지
- Replcation 설정을 위해 잠시 Zabbix-Server를 중지합니다. - 초기 설정 단계에 진행하실 경우 Skip 해주세요.
# service zabbix-server stop
3. Master DB 설정
- 복제를 하기 위해 Master DB에서 필요한 설정을 해주겠습니다.
- 저는 기존의 Zabbix 계정을 이용하여 진행하였으며, 보안상 root 계정을 통한 Replication 구성은 자제를 권고드립니다.
- my.cnf 설정 : 저는 아래의 Include된 conf 디렉토리 밑에 설정하였습니다.
: 설정 내용 # vim /etc/mysql/mysql.conf.d/mysqld.cnf - mysqld 설정의 맨 밑줄에 아래와 같이 두 줄을 추가해주었습니다. . . [mysqld] server-id = 1 log-bin = mysql-bin . . . :wq
- DB 재 시작 # service mysql restart
- DB 설정 # mysql -u root -p : 암호 입력
> use mysql; > select Host,User from user;
- Slave DB에서 접근 예정으로, 외부 접속용 계정인 zabbix@'%' 계정에 replication slave 권한을 할당합니다. > grant replication slave on *.* to zabbix@'%'; > show grants for zabbix@'%';
- Master 상태 확인 > show master status; : Replication 설정에 사용할 내용으로 다른 곳에 적어두세요.
> Ctrl + D
- DB 백업 및 이동 # mysqldump -u [계정 명] -p zabbix > zabbix.sql # scp zabbix.sql [접속 계정 명]@[Slave DB IP]:~
4. Slave DB 설정
- my.cnf 수정 : 위와 동일한 경로에 설정해주었습니다.
: 설정 내용 # vim /etc/mysql/mysql.conf.d/mysqld.cnf - mysqld 설정의 맨 밑줄에 아래와 같이 두 줄을 추가해주었습니다. . . [mysqld] server-id = 2 replicate-do-db = 'zabbix' . . . :wq
- DB 재시작 # service mysql restart
- DB 설정 # mysql -u root -p : 암호 입력
> create database zabbix character set utf8 collate utf8_bin; > Ctrl + D
- DB 복원 # mysql -u root -p zabbix < zabbix.sql : 암호 입력
- Replication 설정 # mysql -u root -p : 암호 입력 > change master to -> master_host="[Master DB IP]', -> master_user="zabbix", -> master_password="[zabbix 계정 암호]", // 기억이 안나시면 zabbix_server.conf, zabbix.conf.php 보면 있음 -> master_log_file='mysql-bin.000003', // 저랑 똑같이 쓰시면 안되요, show master status 참고 -> master_log_pos=1258677; // 저랑 똑같이 쓰시면 안되요, show master status 참고, ' ' 없으니 주의!!
> start slave;
- Slave 상태 확인 > show slave status; : 아래와 같이 Slave_IO_Running, Slave_SQL_Running이 Yes로 표기되면 정상 대기 상태 입니다. : Slave_IO_State를 보시면 Master 서버에서 업데이트를 기다리고 있습니다.
** 오류 발생 ** > show slave status; : 아래와 같은 오류가 발생 Last_IO_Error: Fatal error: The SLAVE I/O thread stops because MASTER AND SLAVE have equal MySQL SERVER UUIDs; these UUIDs must be different FOR REPLICATION TO work.
** 해결 방안 ** - VM 복제로 인해서 auto.conf 파일의 server-uuid가 동일하여 발생되는 문제 : Slave DB 서버의 auto.cnf 를 삭제 처리하였습니다. # rm -f /var/lib/mysql/auto.cnf
: 아래와 같이 재 실행 후 확인해보면 auto.cnf 파일은 재 생성되어집니다.
4. 동작 테스트
- Zabbix Host를 하나 추가 해주겠습니다.
- Master DB 접속 # mysql -u root -p > use zabbix; > select * from hosts where host='replication-test';
- Slave DB 접속 # mysql -u root -p > use zabbix; > select * from hosts where host='replication-test';
> show slave status\G; : 아래와 같이 relay log를 모두 읽어들여 복제한 것을 확인 할 수 있습니다.