HAPRoxy for Percona or Galera
Last updated
Last updated
https://habr.com/ru/companies/acronis/articles/198448/
Хочу отметить, что эта инструкция родилась в процессе внедрения Zabbix в стенах компании Acronis. В процессе экспертизы и проведенных мною исследований, она доказала свое право на жизнь и благополучно служит нам верой и правдой день ото дня.
Для тех кто не знаком с HAProxy, цитата о предназначении продукта:
При увеличении нагрузки или посещаемости проекта, рано или поздно вертикальное маштабирование (увеличение ресурсов сервера, таких как память, скорость диска и т.д) упирается в некий предел и не дает ощутимого прироста. В таком случае в ход идет горизонтальное масштабирование — добавление новых серверов c перераспределением нагрузки между ними.
От слов к делу, установка и настройка очень просты:
В предыдущем материале я подробно описал какие предварительные операции я проделывал над чистой CentOS 6.4, мои рекомендации актуальный и тут, все пакеты будут указаны с учетом рекомендаций в предыдущем материале:
Репозитории подключены, система в актуальном состоянии, переходим к установке HAProxy:
# Ставим haproxy
yum install haproxy mariadb-client php-mysql php-cli -y
# Пишем конфиги
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.old
[root@rs-haproxy ~]# nano /etc/haproxy/haproxy.cfg
global
# Если хочется увидеть отладочную информацию, то этот пункт стоит закоментировать
# А этот напротив, раскоментировать
# Мы будем использовать этот сокет для мониторинга в zabbix
# Укажите действующий адрес на сервера и порт, на котором будет слушать наш haproxy
# roundrobin — последовательно пишет во все сервера, это хорошо в режиме чтения но может вызвать проблемы если таким образом записывать в базу
# leastconn этот режим отлично подходит при использовании haproxy в качестве failover прокси, используется последний работающий сервер и только он
# httpchk заставляет haproxy проверять сервер на его готовность перед отправкая каждого из запросов
# Ниже список серверов, их порт и порт на который будет происходит подключение для проверки жизнеспособности
# Сервера с флагом backup используются только если остальные сервера не доступны
Теперь перейдем к серверам нашей percona или galera
# Настраиваем механизм проверки наших баз данных, для этого понадобиться xinetd
yum install -y xinetd
[root@xtrabackup-node-01 ~]# nano /etc/xinetd.d/mysqlchk
default: on# порт проверки который мы указали выше
# Адреса с которых разрешена проверка состояния службы MySQL
# Очень важно добавить эту запись, иначе ничего не получиться
root@xtrabackup-node-01 ~]# nano /etc/services
mysqlchk 50005/tcp # mysqlchk
# Добавляем службу в автозагрузку и запускаем ее
chkconfig xinetd on
# Разрешаем доступ к порту проверки
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 50005 -j ACCEPT
# Добавляем права для доступа clustercheck
GRANT PROCESS ON . TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
# Проверяем все ли у нас получилось, должно получится что то вроде
[root@xtrabackup-node-01 ~]# /usr/bin/clustercheck
HTTP/1.1 200 OK
# Теперь проверим работу с нашего haproxy хоста
[root@rs-haproxy ~]# telnet адрес 50005
Готово! нужно проделать эту операцию на всех нодах percona/galera
# Это основной инструмент для нашего скрипта, установим его
yum install -y socat
# Настроим sudo для zabbix, если это не было сделано раньше
usermod -s /bin/bash zabbix
# Создаем папку для наших скриптов
mkdir -p /etc/zabbix/scripts/
# Собственно сам скрипт
rm -f /etc/zabbix/scripts/haproxy.mysql nano /etc/zabbix/scripts/haproxy.mysql
Скрипт сам обнаруживает доступные сервера и передает их zabbix Проверим это:
[root@rs-haproxy ~]# echo «show stat» | sudo socat /var/run/haproxy stdio | sed 's/,/\ /g' | awk '{print $2}' | grep -v -e «pxname» -e '^$'
# Минимальные настроки для нашего zabbix-agent
echo Timeout=30 >> /etc/zabbix/zabbix_agentd.conf
# Применяем права на исполнение новому скрипту
chown zabbix:zabbix -R /etc/zabbix/scripts/
mkdir -p /etc/zabbix/zabbix_agentd.d/
echo 'UserParameter=haproxy.mysql[*],/etc/zabbix/scripts/haproxy.mysql "$1" "$2"' >> /etc/zabbix/zabbix_agentd.d/haproxy.mysql.conf
Теперь проверим правильно ли работает наш скрипт:
su zabbix
# Вот так работает наше автоматическое обнаружение серверов bash-4.1$ /etc/zabbix/scripts/haproxy.mysql
{ «data»:[{ "{#SRV}":«FRONTEND»},{ "{#SRV}":«10.100.100.246»},{ "{#SRV}":«BACKEND»},]}
# Спросим любые данные
bash-4.1$ /etc/zabbix/scripts/haproxy.mysql qcur FRONTEND
Похоже что все в порядке! Перезагружаем службу и любуемся логами
/etc/init.d/zabbix-agent restart && tail -f -n 100 /var/log/zabbix/zabbix_agentd.log
Вот так выглядит наш шаблон под haproxy
Тут можно скачать шаблон для импорта в zabbix