Устанавливаем кластер Zabbix в Azure на CentOS

Z - это Zabbix
Мониторинг - это очень большая часть процесса экспуатации ПО и инфраструктуры, а также, в моем случае, DevOps процесса - сборки, доставки и эксплуатации. Это один из тех трех слонов, на которых основана эксплуатация, я бы сказал.
Возвращаясь на землю, Azure Cloud - классная платформа, с кучей фишек и возможностей (и ограничений :-)), но тем не менее, у нее нет "настоящего" решения для мониторинга. Ни для виртуальных машин, ни для других ресурсов. Можно возразить - есть OMS и Azure Monitor, но я сталкивался с кучей проблем и ограничений в попытках настроить их, что решил, что самое лучшее - разработать велосипед свое собственное решение, которое будет отвечать моим запросам.
Сегодня я попробую описать мое предложение по мониторингу: высоко доступное, бесплатное и облачное.
Архитектура кластера Zabbix в облаке Azure
Система мониторинга обязана быть отказоустойчивой, потому что именно она должна сообщить вам, что ваши ресурсы недоступны.
Ниже я нарисовал архитектуру. Обратите внимание, что я использую Internal Load Balancer как точку доступа для виртуальных машин. Это потому, что реализация виртуальных сетей в Azure обязывает иметь описанный внутренний адрес, чтобы он мог маршрутизироваться. Грубо говоря, если вы создадите кластер на виртуалках и дадите этому кластеру какой-то виртуальный IP адрес, то Azure не будет ничего о нем знать, и не будет пускать трафик на этот адрес. И по этой причине, IP для внутреннего балансировщика должен совпадать с тем виртуальным IP, который вы потом создадите на основе виртуалок.
Кластер Zabbix будет работать в режиме активный-пассивный (active-passive) и будет основываться на следующих пакетах: pacemaker, corosync, pcsd.
Еще смотрите - есть внешний балансировщик External Load Balancer - он будет отправлять запросы из интернета (или вашей офисной сети) на веб-интерфейс Zabbix.
И последнее - база данных. Я использую Azure Database for MySQL servers как бэк-энд. Это PaaS-решение достаточно гибкое в плане производительности, и цена вполне доступная.
Настраиваем кластер Zabbix
Предположим, вы уже развернули схему, описанную выше - виртуалки, балансировщики и так далее. Теперь можно двигаться к настройке серверов. Помним, что у нас развернуты сервера с CentOS.
Скрипт, который идет ниже, должен быть выполнен на обоих серверах. В нем происходит первичная установка и настройка Zabbix Server и компонентов. Эта статья писалась в конце 2017 года, поэтому версии пакетов скорее всего уже поменялись, поэтому наверное их нужно будет обновить. Я советую запускать скрипт строку за строкой, чтобы ничего не пропустить и минимизировать ошибки. Также предполагается, что есть несколько подготовленных конфиг-файлов для Apache и Zabbix, которые предварительно скопированы в домашнуюю папку пользователя. Я постараюсь давать примерный листинг этих конфигов в комментариях скрипта.
Мне лень переводить ВСЕ комментарии с английского на русский, поэтому постарайтесь сами чуть-чуть попользоваться переводчиком.
ПОЖАЛУЙСТА ЧИТАЙТЕ КОММЕНТАРИИ !!!
###
### Создаем пользователей
###
# Users:
# - zabbix Для запуска Zabbix Server
# - zabbixagent Для запуска Zabbix Agent
groupadd zabbix
useradd -m -s /bin/bash -g zabbix zabbixagent
useradd -m -s /bin/bash -g zabbix zabbix
###
### Выключаем SELINUX
###
# SELINUX - подсистема безопасности, встроенная в CentOS, и она очень мешает работе кластера, поэтому выключаем ее.
sed -i 's/^SELINUX=enforcing.*/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/^SELINUX=enforcing.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
###
### Обновляем все пакеты
###
# Это мы делаем ТОЛЬКО ПРИ ПЕРВИЧНОЙ установке сервера. Все остальный обновления производим вручную по отдельности.
yum update -y
###
### Устанавливаем обязательные пакеты
###
# Download and import repository to be able to install "python-ldap", "python-pyzabbix" and "python-docopt" packages.
# These packages are prerequsites for "zabbix-ldap-sync".
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
rpm -Uvh epel-release-7-11.noarch.rpm
yum install python-ldap python-docopt python-pyzabbix -y
# Install other prerequsites and tools.
yum install httpd mc policycoreutils-python telnet php php-cli php-common php-devel php-pear php-gd php-mbstring php-mysql php-xml mod_ssl openssl git swaks -y
# Enable and configure auto-start Apache web-server.
systemctl enable httpd
systemctl start httpd
# Install Powershell and Azure CLI 2.0
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
yum install -y powershell
rpm --import https://packages.microsoft.com/keys/microsoft.asc
sh -c 'echo -e "[azure-cli]\nname=Azure CLI\nbaseurl=https://packages.microsoft.com/yumrepos/azure-cli\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/azure-cli.repo'
yum check-update
yum install azure-cli -y
###
### Устанавливаем поддержку ODBC support и драйверы
###
yum install -y unixODBC unixODBC-devel mssql-tools.x86_64
###
### Настраиваем Apache
###
# Меняем настройки PHP
cp /etc/php.ini /etc/php.ini_initial
sed -i 's/^max_execution_time.*/max_execution_time=600/' /etc/php.ini
sed -i 's/^max_input_time.*/max_input_time=600/' /etc/php.ini
sed -i 's/^memory_limit.*/memory_limit=256M/' /etc/php.ini
sed -i 's/^post_max_size.*/post_max_size=32M/' /etc/php.ini
sed -i 's/^upload_max_filesize.*/upload_max_filesize=16M/' /etc/php.ini
sed -i "s/^\;date.timezone.*/date.timezone=\'Europe\/London\'/" /etc/php.ini
###
### Устанавливаем Zabbix
###
# !!!Проверьте, что URL для Zabbix репозитория верный!!!
# This is important because later we will need to import database script.
rpm --import http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX
rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-3.el7.centos.noarch.rpm
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-get zabbix-sender zabbix-java-gateway -y
###
### Настройка Zabbix Server
###
# Настраиваем подключение веб-интерфейса Zabbix к базе данных. Это пример файла.
# <?php
# // Zabbix GUI configuration file.
# global $DB;
# $DB['TYPE'] = 'MYSQL';
# $DB['SERVER'] = 'mysqlservername.mysql.database.azure.com';
# $DB['PORT'] = '0';
# $DB['DATABASE'] = 'zabbixdb';
# $DB['USER'] = '[email protected]';
# $DB['PASSWORD'] = '******';
# // Schema name. Used for IBM DB2 and PostgreSQL.
# $DB['SCHEMA'] = '';
#
# $ZBX_SERVER = '10.1.1.200';
# $ZBX_SERVER_PORT = '10051';
# $ZBX_SERVER_NAME = 'Zabbix Server Name';
#
# $IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
#
cp /etc/zabbix/web/zabbix.conf.php /etc/zabbix/web/zabbix.conf.php_initial
cp /home/zabbixadmin*/zabbix.conf.php /etc/zabbix/web/zabbix.conf.php
#Меняем конфиг-файл Zabbix Server
#Конфиг Zabbix Server большой и будет отличаться в зависимости от вашей сети, производительности сервера и т.д. Поэтому я опишу только главное.
# ListenIP=0.0.0.0 - это дефолтное значение и его же надо и оставить.
cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf_initial
yes | cp /home/zabbixadmin*/zabbix_server.conf /etc/zabbix/zabbix_server.conf
###
### Настройка кластера Zabbix
###
# Прописываем файл hosts. Это надо для Zabbix Cluster. Тут ничего менять не надо.
echo "10.180.10.18 zabbixserver1" >> /etc/hosts
echo "10.180.10.19 zabbixserver2" >> /etc/hosts
# Устанавливаем компоненты кластера
yum install pacemaker pcs -y
# Задаем пароль для пользователя, под которым будет запущен кластер
echo "*****" | passwd "hacluster" --stdin
# Включаем и запускаем службы кластера
systemctl start pcsd.service
systemctl enable pcsd.service
systemctl enable corosync.service
systemctl enable pacemaker.service
# Все последующие настройки кластерных компонентов должны быть сделаны только на одном из серверов.
# Script provided in zabbix2.sh.
###
### Настраиваем Zabbix Agent
###
# Настраиваем разрешения для Zabbix Agent (zabbixagent user)
# Убедитесь, что вся группа zabbix имеет пермишены, чтобы положить .pid и .log файлы.
chmod g+rw /var/run/zabbix/
chmod g+rw /var/log/zabbix/
# Две строчки выше настроят параметры доступа к папкам, но они будут перезаписаны после ребута сервера.
# Ниже мы говорим системе CentOS делать такие же настройки после каждой перезагрузки.
rm -f /usr/lib/tmpfiles.d/zabbix-agent.conf
rm -f /usr/lib/tmpfiles.d/zabbix-server.conf
touch /usr/lib/tmpfiles.d/zabbix-agent.conf
touch /usr/lib/tmpfiles.d/zabbix-server.conf
echo "d /run/zabbix 0775 zabbix zabbix - -" >> /usr/lib/tmpfiles.d/zabbix-agent.conf
echo "d /run/zabbix 0775 zabbix zabbix - -" >> /usr/lib/tmpfiles.d/zabbix-server.conf
# Настраиваем конфиг-файл для Zabbix Agent
# Обратите внимание на адреса: 10.1.1.200 - это адрес кластера, виртуальный IP, он должен совпадать с адресом внутреннго балансировщика в Azure. Этот же адрес вы будете прописывать в настройки агента на других виртуальных серверах.
# 10.1.1.18 и 10.1.1.19 - это реальные адреса Zabbix-серверов
cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf_initial
sed -i "s/^Server=127\.0\.0\.1$/Server=10.1.1.200,10.1.1.18,10.1.1.19/" /etc/zabbix/zabbix_agentd.conf
sed -i "s/^ServerActive=127\.0\.0\.1$/ServerActive=10.1.1.200/" /etc/zabbix/zabbix_agentd.conf
sed -i "s/^Hostname=Zabbix server$/Hostname=$HOSTNAME/" /etc/zabbix/zabbix_agentd.conf
sed -i "s/^# User=zabbix$/User=zabbixagent/" /etc/zabbix/zabbix_agentd.conf
sed -i "s/^# RefreshActiveChecks=120$/RefreshActiveChecks=60/" /etc/zabbix/zabbix_agentd.conf
# Включаем службу Zabbix Agent
systemctl enable zabbix-agent
После того, как мы настроили ОБА сервера, не забудьте создать базу данных, создать для нее пользователя и назначить разрешения. Также импортируем базовый файл от Zabbix Server в базу данных.
Хорошо. Теперь запускаем следующий скрипт. Только на одном сервере - это будет настройка кластерных служб.
###
### Этот скрипт надо запустить только на ОДНОМ сервере и ТОЛЬКО при первоначальной настройке кластерных служб.
###
# Настраиваем авторизацию между серверами.
pcs cluster auth zabbixserver1 zabbixserver2 -u hacluster -p '*****'
# Создаем кластер
pcs cluster setup --name zabbixserver zabbixserver1 zabbixserver2 --force
# Запускаем кластерные служб ы на обоих серверах
pcs cluster start --all
# Выключаем stonith
pcs property set stonith-enabled=false
# Выключаем кворум
pcs property set no-quorum-policy=ignore
# Настраиваем бесконечную перезагрузку кластерных ресурсов (виртуальный IP and Zabbix Server), если они по какой-то причине упали
pcs property set start-failure-is-fatal=false
# Создаем виртуальный IP
pcs resource create cluster_vip ocf:heartbeat:IPaddr2 ip=10.1.1.200
# Создаем службу Zabbix Server
pcs resource create zabbix_server systemd:zabbix-server op monitor interval=10s
# Говорим, что оба ресурса - IP и Zabbix будут запущены на одном и том же сервере
pcs constraint colocation add zabbix_server cluster_vip
# Говорим, что вначале должен быть запущен ресурс виртуального IP, и только потом - Zabbix
pcs constraint order cluster_vip then zabbix_server
# Говорим, что предпочитаемый сервер - "zabbixserver1"
pcs constraint location cluster_vip prefers zabbixserver1
pcs constraint location zabbix_server prefers zabbixserver1
Теперь надо перезагрузить оба сервера. Команды ниже помогут вам в простейшей диагностике.
Эти команды запускают\останавливают кластер.
pcs cluster start --all
pcs cluster stop --all
Эта команда покажен статус кластера.
pcs status
Вроде все.
linux (ru), azure (ru), zabbix (ru)
- Просмотров: 5167
- Предыдущий: Очистка дисков на нодах Kubernetes кластера Azure AKS
- Следующий: Найти список всех образов для виртуальных машин в Azure

- RE: Устанавливаем кластер Zabbix в Azure на CentOS
- #1
- Евгений Павлятенко