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까지 완전히 이동하는 경우에는 조금 절차자 많다.

  1. 기존 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
  1. 신규 서버에 OS 및 프로그램 설치를 위한 패키지 레파지토리 설정
  2. Zabbix(스타트 금지!), DBMS 등 설치
  3. DBMS를 켜고 zabbix의 데이터베이스, 유저, 권한 설정 4.1. innodb_strict_mode='off' 설정!
  4. 1에서 뜬 덤프를 신규 서버로 복사하고 DB에 부어 넣기
  5. 1에서 백업한 컨피그 파일을 신서버에 적용하고 Zabbix 스타트
  6. zabbix가 정상동작하면 기존 서버를 내리고, 현재 서버를 기존 서버의 IP로 변경
  7. 변경된 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

이렇게 되면 행복하게 잘 돌아감.

참고

update users set passwd='{{ zabbix_conf.admin_password|password_hash('bcrypt') }}' where username='Admin'