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

Устанавливаем кластер 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.

High-available Zabbix architecture in Azure

 Еще смотрите - есть внешний балансировщик 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']     = 'zabbixuser@mysqlservername';
#    $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)

Печать