Today I’ve solved the problem of one server being to slow to handle the growth of my zabbix configuration.
I’m using zabbix-server 2.2.2 with MySQL/Debian backend and around 20 zabbix-agents with Debian installed.
Let’s say old Zabbix server IP is: A. B. C. D and new is: U. X. Y. Z.
The domain name for the instalation will be: http://zbx.newmachine.com
Below you will find all steps to migrate your configuration:
Ensure all agents will accept connections from the new IP
Modify each agent configuration file (in debian: /etc/zabbix/zabbix_agentd.conf) and add new IP
Server=127.0.0.1,A.B.C.D,U.X.Y.Z You can leave the old one for now.
Restart all agents so you can forget about them. Run on all agent server:
/etc/init.d/zabbix-agent restart It’s time to install zabbix on the new machine:
apt-get install zabbix-server-mysql zabbix-frontend-php Do not start the server for now.
Stop zabbix-server on the old machine:
/etc/init.d/zabbix-server stop mysqldump -u zabbix -p zabbix > /tmp/zabbix_db_dump I can take a while — mine was around 1,5GB
create database zabbix create user 'zabbix'@'localhost' identified by 'PASSWORD';
use zabbix;
grant all privileges on zabbix.* to 'zabbix'@'localhost'; Copy database to the new machine using compression:
scp -C /tmp/zabbix_db_dump Username@U.X.Y.Z:/tmp Import zabbix db on the new machine:
mysql -u zabbix -p zabbix < /tmp/zabbix_db_dump Now you can setup DNS and virtual host for the new installation. After that run:
http://zbx.newmachine.com in your browser to check whether all web server requirements for zabbix are fullfilled.
Proceed with zabbix instalation until the end. After that you sould be able to login:
http://zbx.newmachine.com with your old credentials Overwrite zabbix configuration with the old one if you use the same version on both machines
or just setup database password in file (/etc/zabbix/zabbix_agentd.conf):
DBPassword=PASSWORD Switch zabbix-server to on in /etc/default/zabbix-server:
START=yes Start new zabbix server:
/etc/init.d/zabbix-server start Check if everything is running fine 🙂
Extra steps:
If you’re running a smtp relay for zabbix email notifications, don’t forget to adjust your MTA
configuration to relay from IP: U. X. Y. Z
You can now modify agents configuration to stop answering to the old IP
and remove old zabbix setup.
Thank you for reading this post, don’t forget to subscribe!
закончилась поддержка Centos 8 и я переезжаю потихоньку на Debian. Во-вторых, в Centos 7 поддержка Zabbix Server прекращена, начиная с версии 5.4. То есть до 5.4 вы не обновитесь, не переехав на другую систему.
поддержка самой системы 7-й версии будет до 2023 года. По идее, она всё еще актуально. Но это в теории, на практике есть проблемы. Причин у команды Zabbix несколько:
- Старая версия php 5.4, а надо минимум 7.2 для нового веб интерфейса.
- подключения к базе данных не поддерживаются в Centos 7.
- Старые пакеты OpenSSL не поддерживают 1.3.
Все эти проблемы так или иначе можно решить, но ребята из Zabbix решили, что оно не стоит того. Слишком много хлопот с этой уже устаревшей системой. И я их прекрасно понимаю, так как сам устал от подобных проблем со старыми пакетами.
В итоге для дальнейшего обновления Zabbix Server нужно мигрировать с Centos 7 на какую-то другую систему. Я выбрал в качестве такой системы Debian 11.
Первое, что вам нужно сделать для переноса Zabbix Server — установить точно такую же версию
на новый сервер. Если переносите Zabbix Server 5.0, то на новый сервер устанавливаете тоже 5.0
Вам нужно не только установить и подготовить сам сервер, но и перенести все конфигурационные файлы и скрипты со старого сервера на новый. Можно просто скопировать с перезаписью дефолтных конфигов. А так же создать базу данных MySQL или PostgreSQL, в зависимости от того, что используете, с таким же именем, пользователем и паролем, как на старом сервере. Это не обязательно, но так будет удобнее. Не придётся конфиг сервера менять.
Когда закончите, можете запустить Zabbix Server на новом сервере и зайти в веб интерфейс. Если вас встретит установщик, значит всё сделали правильно. Можно выполнить чистую установку и убедиться, что всё готово, веб интерфейс работает. В это же время советую внимательно посмотреть и перенести со старого сервера всё, что может пригодиться — external scripts, задачи cron, настройки sudoers и многое другое, что могло использоваться в процессе эксплуатации.
Если вы используете русский язык в веб интерфейсе, то в Debian или Ubuntu не забудьте добавить локаль ru_RU:
# dpkg-reconfigure locales
И далее добавьте ru_RU. Ставить по умолчанию её не обязательно.
- Video Lecture
- Description
- TODO:
- Reinstall Zabbix Server
- Server Processes
- Front End PHP
- Configs
- Restart and Enable After Reboot
- Copy Custom Scripts
- Setup and Copy Database
- Repoint Domain Name
- Install SSL Certificate
- Install Postfix
- Step 1: Dumping the current database
- Step 2: Preparing the new database
- Step 3: Importing the database on the new server
- Шаг 4: Реконфигурация Zabbix для использования новой базы данных
- Шаг 5: Тестирование
- Шаг 6: Установите обслуживание секционирования базы данных
- Шаг 7: Мониторинг
- Перенос Zabbix Server
Video Lecture
Description
Move Zabbix Server from One Cloud Provider to Another.
In my case, it was Digital Ocean to Hetzner
My Zabbix Server configuration is using Ubuntu 18.04 and MySQL
TODO:
- Reinstall Zabbix Server Code (server processes and PHP front end code)
- Database (MySQL, Create a SQL dump file and copy to new server)
- Custom Scripts (Alertscripts, and CheckSSL script)
- Repoint the domains A name record to the new IP from the new cloud provider
- Get a new SSL cert
- Reinstall Postfix
Reinstall Zabbix Server
Server Processes
wget https://repo.zabbix.com/zabbix/4.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.4-1+bionic_all.deb
dpkg -i zabbix-release_4.4-1+bionic_all.deb
apt update Front End PHP
apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent Configs
sudo nano /etc/zabbix/zabbix_server.conf In server config file Set,
sudo nano /etc/zabbix/apache.conf In apache config change to your region. I changed Riga
to London
,
php_value date.timezone Europe/Riga Restart and Enable After Reboot
$ systemctl restart zabbix-server zabbix-agent apache2
$ systemctl enable zabbix-server zabbix-agent apache2
Copy Custom Scripts
Copy the secret.psk
, and checkssl.sh
scripts. Give the checkssl.sh
script execute permissions (0755)
sudo chmod a+x checkssl.sh Copy alert scripts sendsms.sh
and slackalert.sh
anb give execute permissions (0755)
sudo chmod a+x sendsms.sh
sudo chmod a+x slackalert.sh Setup and Copy Database
On new server ensure mysql is already installed.
sudo apt-get install mysql-server On old server create a snapshot of the DB.
mysqldump --quick zabbix gzip > zabbix.gz
mysqladmin -uroot create zabbix
gunzip < zabbix.gz mysql -uroot zabbix Copy the file zabbix.gz
to new server
Repoint Domain Name
Log onto your domain name provider and update your domain name A name record to the new ip address.
Install SSL Certificate
sudo apt-get install certbot
sudo apt-get install python-certbot-apache
sudo certbot --apache -d zabbix.seanwasere.com Install Postfix
sudo apt install mailutils
sudo nano /etc/postfix/main.cf Change value
...
inet_interfaces = loopback-only
inet_protocols = ipv4
... sudo service postfix reload Reconfigure the Zabbix Agent which is also running on the new server.
sudo nano /etc/zabbix/zabbix_agentd.conf Since I also use scripts, I need to enable remote commands, and to update the agent to require PSK encryption, and then restart.
sudo service zabbix-agent restart 
In the series “why wouldn’t I put this out public instead of just saving it to my own notes”
: Moving the Zabbix database to a new database server.
- Old server: Debian Linux 9, running MariaDB 10.1.48
- New server: Debian Linux 11, running MariaDB 10.5.12 (from Debian packaging)
- Zabbix (5.0.19 LTS) frontend is running on Apache
Step 1: Dumping the current database
# mysqldump --single-transaction zabbix | gzip > /mnt/zbx-dump.sql.gz
Copy the (huge) file to the new database server.
Step 2: Preparing the new database
Use the password you are using in Zabbix server configurations.
Do not import any SQL schema at this point, we want an empty database to start with.
Step 3: Importing the database on the new server
$ zcat zbx-dump.sql.gz | mysql -u zabbix -p zabbix
This can take a lot of time. (Пример: база данных размером 50 ГБ была импортирована примерно за два часа.)
Шаг 4: Реконфигурация Zabbix для использования новой базы данных
Править /etc/zabbix/zabbix_server.conf
: Набор DBHost
на новый адрес сервера базы данных.
Перезапустите сервер Zabbix: sudo systemctl restart zabbix-server
Перезапустите Apache: sudo systemctl restart apache2
Шаг 5: Тестирование
Посмотрите интерфейс Zabbix (графический интерфейс), все выглядит нормально и производительно. Смотрите лог сервера Zabbix ( /var/log/zabbix/zabbix_server.log
) ничего странного.
Обратите внимание, что между шагами 1 и 4 в новой базе данных нет данных, это ожидаемо, поэтому вы увидите некоторый пробел в графиках и списках событий.
Если вы столкнулись с непредвиденными проблемами, проверьте журнал сервера Zabbix или журнал MariaDB. Если больше ничего не помогает, откатитесь, отменив изменения, сделанные на предыдущем шаге. Существующие данные в старой базе данных все еще там.
Если устранение неполадок занимает много времени и вы хотите минимизировать интервал для потерянных данных в Zabbix, вы можете снова начать с шага 1. В этом случае не забудьте сбросить новый
zabbix
базу данных на новом сервере (иначе вы получите ошибку при создании базы данных на шаге 4).
Шаг 6: Установите обслуживание секционирования базы данных
Если база данных была разделена (см., например, этот пост в блоге Zabbix
), разделение таблицы есть, но нет системы, используемой для создания новых разделов. Повторно внедрите системные скрипты на новый сервер базы данных (задание cron или подобное), или, если используются хранимые процедуры, вы можете настроить их заново (см. сообщение в блоге Zabbix) или скопировать из старой базы данных:
# mysqldump --single-transaction --routines --no-data --no-create-info zabbix > /mnt/zabbix-partitioning.sql
Скопируйте файл на новый сервер. Затем импортируйте его на новый сервер:
# cat zabbix-partitioning.sql | mysql zabbix
Воссоздайте событие разделения, например:
# mysql
(Вставьте это)
РАЗДЕЛИТЕЛЬ $
СОЗДАТЬ СОБЫТИЕ `e_zbx_part_mgmt` ПО РАСПИСАНИЮ КАЖДЫЙ ДЕНЬ НАЧИНАЕТСЯ '2021-12-30 00:00:00' ПО ЗАВЕРШЕНИЮ СОХРАНИТЬ ДАВАТЬ ВОЗМОЖНОСТЬ КОММЕНТАРИЙ 'Создание и удаление разделов' НАЧНИТЕ ВЫЗОВ zabbix.drop_partitions('zabbix'); ВЫЗОВ zabbix.create_next_partitions('zabbix'); END$
РАЗДЕЛИТЕЛЬ ;Шаг 7: Мониторинг
Наконец, проверьте наличие всех необходимых средств мониторинга, таких как общий мониторинг MariaDB и мониторинг разделов.
Перенос Zabbix Server
Теперь можно перейти к переносу мониторинга сервера. Для этого остановите старый сервер:
# systemctl остановить zabbix-server zabbix-agent
Делаем дамбы базы данных. В нем обнаруживается всякая информация по мониторингу, которую необходимо обнаружить.
Этот дампинг необходимо передавать на новый сервер. Может использоваться любой привычный для вас способ. В обычных случаях я предпочитаю SCP:
10.1.3.19 — ip адрес нового сервера, на который переносим Zabbix. На старом уровне использования zabbix-server больше не запускается.
Переходим на новый сервер, распаковываем новый архив данных:
# gunzip ~/zabbix.sql.gz
Открываем консоль MySQL и восстанавливаем дамп в базе данных Zabbix:
# mysql -u root -p
> использовать заббикс;
> источник ~/zabbix.sql;
Дожидаемся окончания заливки. Это может длиться очень долго, если база большая.
После того, как загрузится дамп, можно зайти в веб-интерфейс нового сервера и убедиться, что всё восстановлено и сервер выглядит также, как на старом месте. Если всё ОК, то выключайте старый сервер мониторинга и больше не включайте с этим . Настройте новый адрес старого и тоже для верности перезагрузите.
После того, как новый сервер с перенесённым Zabbix загрузится, все агенты отправят на него информацию, так как для них ничего не поменялось. ограничение на этот перенос закончено.

