Zabbix 4.0 to 6.0
개요
켜져 있어서 돌아가는 Zabbix를 업그레이드하기
매뉴얼
https://www.zabbix.com/documentation/current/en/manual/installation/upgrade
매뉴얼을 참고하면 기존에 운영하고 있던 4.0버전에서 6.0LTS버전으로 업그레이드는 스무스하게 진행될 것 처럼 보인다
업그레이드 내역
- OS : CentOS 6 -> Rocky 8.6
- DBMS : MySQL 5.4 -> MySQL 8.0
- Zabbix : 4.0 -> 6.0LTS
순서
https://bestmonitoringtools.com/upgrade-zabbix-to-the-latest-version/
zabbix server만 업그레이드하는 경우라면 패키지 레파지토리 주소만 잡아주고 업그레이드하면 되지만 OS, DBMS까지 완전히 이동하는 경우에는 조금 절차자 많다.
- 기존 DB에서 zabbix 데이터베이스를 덤프 및 zabbix 컨피그 파일 백업
mysqldump -uroot -p --single-transaction --ignore-table=zabbix.history --ignore-table=zabbix.history_uint --ignoretable=zabbix.history_text --ignore-table=zabbix.history_log --ignore-table=zabbix.history_str --ignore-table=zabbix.trends --ignore-table=zabbix.trends_uint zabbix | gzip > zabbix_backup.sql.gz
/etc/zabbix/*external scripts from /usr/lib/zabbix/externalscripts/alert scripts from /usr/lib/zabbix/alertscripts/etc/httpd/conf.d/zabbix.conf/etc/php-fpm.d/zabbix.conf
- 신규 서버에 OS 및 프로그램 설치를 위한 패키지 레파지토리 설정
- Zabbix(스타트 금지!), DBMS 등 설치
- DBMS를 켜고 zabbix의 데이터베이스, 유저, 권한 설정 4.1. innodb_strict_mode='off' 설정!
- 1에서 뜬 덤프를 신규 서버로 복사하고 DB에 부어 넣기
- 1에서 백업한 컨피그 파일을 신서버에 적용하고 Zabbix 스타트
- zabbix가 정상동작하면 기존 서버를 내리고, 현재 서버를 기존 서버의 IP로 변경
- 변경된 IP에서도 데이터 수집이 정상적으로 이루어지면 끝.
문제들
당연히 예상대로 바로 잘 되지 않았다. 웹에서 다음과 같은 메세지가 출력되면 업그레이드 작업(대부분 데이터베이스 스키마 업그레이드) 중 문제가 생긴거다.
"The Zabbix database version does not match current rquirements. Your database version: 4000000. Required version: 6000000. Please contact your system administrator"
내가 시스템 관리잔데 시스템 관리자에게 연락을 하라니...
이제 /var/log/zabbix/zabbix_server.log를 테일링하며 문제를 잡아가면 된다.
에러1. utf8mb3로 데이터베이스 만들기. utf8mb4로 생성 금지.
MySQL은 기본적으로 utf8mb4로 설정이 되는데 latin1의 데이터를 여기로 밀어넣으면 원활하게 돌아가지 않는다. 자빅스를 업그레이드할 때 로그를 보면 4.0에서 6.0으로 가는 경우 스키마를 4.0->4.1->4.2->....->6.0까지 돌리는데 utf8m4의 경우 6.0부터 공식 지원이 되는것으로 보인다. 타켓 DB를 utf8mb4로 설정할 경우 4.1...단계에서부터 말려서 DB업그레이드에 실패하는 것 같다. 일단 지금 사용하는 zabbix와 mysql 버전이 낮다면 자빅스 데이터베이스를 생성할 때 utf8mb3로 생성하자. 물론 mysql 8의 관점에서보면 utf8mb3는 deprecated된 캐릭터 셋이지만...
이를 위하여 utf8mb3로 최종 업그레이드 후 utf8mb4로 캐릭터셋을 변경하는 프로시져를 자빅스가 공식 배포하고 있다. 아래 링크 참조.
https://www.zabbix.com/documentation/current/en/manual/appendix/install/db_charset_coll
에러2. [Z3005] query failed: [1118] Row size too large.
row size가 8126이 넘어가면 에러가 뜬다. 내 경우에는 업그레이드 중 host_inventory라는 테이블을 찾을 수 없다는 쿼리가 떳는데 해당 테이블의 row size가 8126이 넘어서 생성이 불가하였다. 이를 해겨하기 위해 테이블을 생성해주려고 했는데 당연히 그냥 생성이 될거였으면 에러가 안 났겠지. 그냥은 생성이 불가능하여 strictmode를 off로 하고 테이블을 생성하니 rowsize 체크를 하지 않고 정상 생성되었다. 생성 후 업그레이드 과정이 정상 진행 됨. 첨언) 처음에 덤프한 db를 부어넣기 전에 strict mode를 off로 잡아두었으면 테이블 생성 실패를 하지 않았을 것 같다.
자빅스는 오픈소스라고 좀 찾아보면 소스든 DB 스키마든 찾을만 하다. 로그를 보면서 없다는거 하나씩 하나씩 만들어주면 어떻게 어떻게 잘 돌아감
https://www.zabbix.com/forum/zabbix-help/47600-custom-host-inventory
끝
이렇게 되면 행복하게 잘 돌아감.
참고
- MySQL ERROR 1118 (42000): Row size too large. 에러 처리법 : https://www.lesstif.com/dbms/mysql-error-1118-42000-row-size-too-large-80249028.html
update users set passwd='{{ zabbix_conf.admin_password|password_hash('bcrypt') }}' where username='Admin'