Zabbix

Zabbix DB Replication 구성하기

김모우 2021. 4. 2. 23:10
728x90
반응형

 

해당 포스트에서는 분리한 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를 모두 읽어들여 복제한 것을 확인 할 수 있습니다.

 

 

 

728x90
반응형

'Zabbix' 카테고리의 다른 글

Zabbix Server 버전 업그레이드 - 01  (0) 2021.04.19
Zabbix API를 이용한 Trigger 관리  (2) 2021.04.04
Zabbix 5.0 - Slack 연동  (1) 2021.01.23
Zabbix Linux Process 모니터링 하기  (8) 2021.01.14
Zabbix MYSQL Template 적용  (0) 2021.01.14