Обновление Zabbix 5.0 до 6.0 на Ubuntu 20.04 amd64

Дано:
Ubuntu 20.04 x64_86
Zabbix 5.0
Apache2
MariaDB 10.03.39

Резервное копирование

Обновление необходимо начать с резервного копирования базы данных и всех файлов:

1. Так же необходимо остановить службы

service zabbix-server stop
service zabbix-proxy stop

 

2. Резервная копия базы данных zabbix, с пользователем zabbix,

mkdir /opt/zabbix-backup/
mariadb-dump -u zabbix-p zabbix -f --log-error=/opt/zabbix-backup/zabbixdb/opt/zabbix-backup/.sql.gz.log | gzip > /opt/zabbix-backup/zabbixdb/opt/zabbix-backup/.sql.gz

3. Резервная копия скриптов оповещения, внешних скриптов, конфиги, конфиги apache, web-интерфейс и документация

tar -czf /opt/zabbix-backup/alertscripts/opt/zabbix-backup/.tar.gz /usr/lib/zabbix/alertscripts/
tar -czf /opt/zabbix-backup/externalscripts/opt/zabbix-backup/.tar.gz /usr/lib/zabbix/externalscripts/
tar -czf /opt/zabbix-backup/etczabbixx/opt/zabbix-backup/.tar.gz /etc/zabbix/
tar -czf /opt/zabbix-backup/apache2/opt/zabbix-backup/.tar.gz /etc/apache2/
tar -czf /opt/zabbix-backup/sharezabbix/opt/zabbix-backup/.tar.gz /usr/share/zabbix/
tar -czf /opt/zabbix-backup/sharedoc/opt/zabbix-backup/.tar.gz /usr/share/doc/zabbix-*

Подготовка к обновлению

1. Необходимо удалить старый репозиторий

rm -Rf /etc/apt/sources.list.d/zabbix.list

2.Скачать и установить необходимо Ubuntu, так как Ubuntu (arm64), не устанавливается корректно:

N: Пропускается получение настроенного файла «main/binary-amd64/Packages», так как репозиторий «https://repo.zabbix.com/zabbix/6.0/ubuntu-arm64 focal InRelease» не поддерживает архитектуру «amd64»

Скачивание и установка нового репозитория Zabbix 6.0 i386

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb 
dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb

Судя по выводу информации о пакетах, архитектуры установились все и amd64:

dpkg -l zabbix\*

||/ Имя                 Версия                 Архитектура  Описание
+++-===================-======================-============-=======================================================================
ii  zabbix-agent        1:6.0.30-1+ubuntu18.04 amd64        Zabbix network monitoring solution - agent
ii  zabbix-apache-conf  1:6.0.30-1+ubuntu18.04 all          Zabbix network monitoring solution - apache configuration for front-end
ii  zabbix-frontend-php 1:6.0.30-1+ubuntu18.04 all          Zabbix network monitoring solution - PHP front-end
ii  zabbix-get          1:6.0.30-1+ubuntu18.04 amd64        Zabbix network monitoring solution - get
un  zabbix-nginx-conf   <нет>                  <нет>        (описание недоступно)
ii  zabbix-release      1:6.0-4+ubuntu18.04    all          Zabbix official repository configuration
ii  zabbix-server-mysql 1:6.0.30-1+ubuntu18.04 amd64        Zabbix network monitoring solution - server (MySQL)
un  zabbix-server-pgsql <нет>                  <нет>        (описание недоступно)
ii  zabbix-sql-scripts  1:6.0.30-1+ubuntu18.04 all          Zabbix network monitoring solution - sql-scripts

Установка нового Zabbix 6.0

apt update
apt install --only-upgrade zabbix-server-mysql zabbix-frontend-php zabbix-agent

Проблема с обновлением. Устранение конфликта зависимостей

На этом этапе у меня произошла ошибка зависимостей
При обновлении Zabbix 5.0 до Zabbix 6.0 возникла ошибка:

Следующая информация, возможно, вам поможет:

Следующие пакеты имеют неудовлетворённые зависимости:
 zabbix-server-mysql : Зависит: libevent-2.1-6 (>= 2.1.8-stable) но он не может быть установлен
                       Зависит: libmysqlclient20 (>= 5.7.11) но он не может быть установлен
                       Зависит: libsnmp30 (>= 5.7.3+dfsg-1.8ubuntu3.6~dfsg) но он не может быть установлен

Для разрешения конфликта, необходимо поставить пакеты вручную:

wget http://launchpadlibrarian.net/355862127/libevent-2.1-6_2.1.8-stable-4build1_amd64.deb
dpkg -i libevent-2.1-6_2.1.8-stable-4build1_amd64.deb

echo 'deb http://security.ubuntu.com/ubuntu xenial-security main' | sudo tee /etc/apt/sources.list.d/xenial-security.list
sudo apt update
sudo apt install libmysqlclient20

wget http://launchpadlibrarian.net/447334332/libsnmp30_5.7.3+dfsg-5ubuntu6_amd64.deb
dpkg -i libsnmp30_5.7.3+dfsg-5ubuntu6_amd64.deb

Обновление веб-интерфеса

apt install zabbix-apache-conf

Запуск служб (в большинстве случаев сервер и агент)

service zabbix-server start
service zabbix-proxy start
service zabbix-agent start
service zabbix-agent2 start

Проблема со старой версией MariaDB

Но меня и здесь подстерегала проблема, Zabbix не может запуститься так как версия MariaDB старая, в логах видим /var/log/zabbix/zabbix_server.log:

Unable to start Zabbix server due to unsupported MariaDB database version (10.03.39).
Must be at least (10.05.00).
Use of supported database version is highly recommended.

Необходимо остановить службы

Для обновления, надо зайти на сайт https://mariadb.org/download/?t=repo-config, я выбрал установку используя репозиторий:
1. Выбирать дистрибутив 20.04 «focal»
2. Я выбрал версию 11.3, можно и старее, до 10.05
3. Выполнить в терминале:

sudo apt install apt-transport-https curl
sudo mkdir -p /etc/apt/keyrings
sudo curl -o /etc/apt/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'

4. В файл /etc/apt/sources.list.d/mariadb.list, записать:

# MariaDB 11.3 repository list
# https://mariadb.org/download/
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# deb [signed-by=/etc/apt/keyrings/mariadb-keyring.pgp] https://deb.mariadb.org/11.3/ubuntu focal main
deb [signed-by=/etc/apt/keyrings/mariadb-keyring.pgp] https://mirror.docker.ru/mariadb/repo/11.3/ubuntu focal main
# deb-src [signed-by=/etc/apt/keyrings/mariadb-keyring.pgp] https://mirror.docker.ru/mariadb/repo/11.3/ubuntu focal main

5. Обновление MariDB

apt update
apt install mariadb-server

Проблема с кодировкой

К сожалению, у меня возникла проблема с кодировкой, сразу не посмотрел свою.

Database error
Server sent charset unknown to the client. Please, report to the developers

 

1. Надо проверить и исправить кодировку в конфигах MariaDB
Сразу укажу и другие настройки БД (максимальное количество подключений, включение логгировния ошибок, кодировка)
Добавляем или редактируем файл /etc/mysql/mariadb.conf.d/50-server.cnf

[mariadbd]
max_connections       = 768
log_error             = /var/log/mysql/error.log
character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci

Перезапуск

service mariadb restart

2. Возможно этого будет достаточно, но сразу я этого не сделал начал ломать голову с кодировкой.
Самый простой и возможно долгий способ — это создать новую базу и восстановить резервную копию и она уже будет нужной кодировкой, для этого выполнить:

mariadb -uroot -p
create database zbx character set utf8mb4 collate utf8mb4_bin;
create user zbx@localhost identified by 'passWoRD';
grant all privileges on zbx.* to zbx@localhost;
quit; 
zcat /opt/zabbix-backup/zabbixdb/opt/zabbix-backup/.sql.gz | mariadb --default-character-set=utf8mb4 -uzbx -p zbx

3. Но даже здесь у меня возникла проблема, я не смог дать права новому пользователю, не хватило прав

ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

Поскольку сервер установлен внутри мизерной компании и никто кроме меня туда не заходит, то у root пользователя MariaDB не было пароля. Перепробовав различные способы установки пароля и выдачи прав root пользователю, не увенчались успехом. Поэтому пришлось удалить MariaDB и установить заново

При удалении, так же удалятся и некоторые пакеты Zabbix, поэтому установим их заново. Так же во время удаления, необходимо указать, что базы данных оставить и не удалять

apt purge mariadb*
apt install mariadb-server
apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent zabbix-apache-conf

4. Теперь можно установить пароль на root пользователя, отключить анонимных пользователей и удалить тестовую базу данных:

mariadb-secure-installation

5. Необходимо вернуться к пункту 2, и выполнить назначение привилегий пользователю zbx. Раз у пользователя не было прав, значит и база данных тоже не восстановилась, её тоже восстановить:

mariadb -uroot -p
grant all privileges on zbx.* to zbx@localhost;
quit; 
zcat /opt/zabbix-backup/zabbixdb/opt/zabbix-backup/.sql.gz | mariadb --default-character-set=utf8mb4 -uzbx -p zbx

6. Дополнительную информацию по другим проблемам со старой базой на новом Zabbix, укажу внизу статьи

7. После успешного восстановление базы данных, надо исправить путь к базе, пользователя и пароль, в конфиге /usr/share/zabbix/conf/zabbix.conf.php:

$DB['TYPE']       = 'MYSQL';
$DB['SERVER']     = 'localhost';
$DB['PORT']       = '0';
$DB['DATABASE']   = 'zbx';
$DB['USER']       = 'zbx';
$DB['PASSWORD']   = 'passWoRD';

В конфиге /etc/zabbix/zabbix_server.conf:

DBHost=localhost
DBName=zbx
DBUser=zbx
DBPassword=passWoRD

8. Так же MariaDB жаловался на:

[Warning] Could not increase number of max_open_files to more than 32768 (request: 32801)

Для исправления, необходимо в службе изменить ограничения открытых файлов, для этого отредактировать службу,  /usr/lib/systemd/system/mariadb.service, найти и исправить или добавить:

[Service]
LimitNOFILE=32768

9. Перезагрузить зависимые службы:

systemctl daemon-reload
systemctl restart mariadb
systemctl restart apache
systemctl restart zabbix-server 
systemctl restart zabbix-proxy 
systemctl restart zabbix-agent 
systemctl restart zabbix-agent2 

Долгожданный и успешный запуск Zabbix 6.0

При заходе в веб-интерфес Zabbix, появится предупреждение, что версия базы данных Zabbix, не соответствует требованиям. Zabbix сам обновит версию, это можно наблюдать как при обновлении страницы, меняются цифры версии. Если очень долго зависло на обновлении, необходимо изучить логи на ошибки (/var/log/zabbix/zabbix_server.log)

Database error
The Zabbix database version does not match current requirements. Your database version: 5000000. Required version: 6000000. Please contact your system administrator.

 

P.S.
Как оказалось старая база, очень плохо дружится с новым Zabbix 6.0
1. Неправильная кодировка
2. Database could be upgraded to use primary keys in history tables
3. Database is not upgraded to use double precision values

Решая одну проблему, натыкался на другую, поэтому я выбрал самое простое решение — сразу правильно выполнить импорт базы данных из резервной копии.

Но и с текущей базой тоже можно провести манипуляции, после чего должно всё заработать. Укажу ссылки, а вам решать, какой способ выбрать:

  1. https://www.zabbix.com/documentation/6.0/ru/manual/appendix/install/db_primary_keys — в документации zabbix, имеет смысл выбирать английский язык, он бывает более правильный и без ошибок указаны команды терминала
  2. https://www.zabbix.com/forum/in-russian/439786-проблема-обновления-базы-данных-при-обновлении-с-5-0-до-6-0
  3. https://www.zabbix.com/forum/zabbix-troubleshooting-and-problems/401004-upgrade-to-zabbix-5-0-database-is-not-upgraded-to-use-double-precision-values
  4. https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/database/mysql?at=6.0.8 — Если по какой-то причине нет скриптов в указанной директории

Полезные ссылки:

  1. https://www.zabbix.com/documentation/6.0/ru/manual/installation/upgrade/packages/debian_ubuntu — обновление до Zabbix 6.0
  2. https://master-server.pro/blog/import-export-bd-ssh — dump и restore сжатой базы данных
  3. https://serverspace.ru/support/help/installing-mariadb/ — установка MariaDB
  4. https://timeweb.cloud/tutorials/mariadb/ustanovka-mariadb-v-ubuntu-20-04 — установка MariaDB
  5. https://www.zabbix.com/forum/zabbix-help/47654-error-connecting-to-database-access-denied-for-user-zabbix-localhost-to-database — Проблема с доступом к базе Zabbix
  6. https://ixnfo.com/en/zabbix-upgrading-the-database-to-primary-keys.html — Обновление базы данных primary keys
  7. https://seo-ale.ru/poleznoe/it-kurilka/zabbix-focal-inrelease-doesnt-support-architecture-i386.html — проблемы с архитектурой i386 / amd64
  8. https://sky.pro/wiki/sql/kak-opredelit-kodirovku-v-my-sql-baza-tablitsa-pole/ — определение кодировки базы данных

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *