Пора ставить кластер на мониторинг.
Настройка Zabbix агента
На всех нодах подключаем репозиторий Zabbix, станавливаем Zabbix-агент и шаблоны мониторинга кластера для Zabbix:
1 2 |
# rpm -ivh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm # yum -y install zabbix-agent percona-zabbix-templates php php-mysql |
Копируем шаблон в директорию конфигураций Zabbix агента:
1 |
# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf |
Меняем путь в userparameter_percona_mysql.conf
1 |
# sed -i -e 's#/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh#/etc/zabbix/get_mysql_stats_wrapper.sh#g' /etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf |
На первой ноде:
Копируем скрипты чтения данных кластера в директорию /etc/zabbix :
1 2 |
# cp /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh /etc/zabbix # cp /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php /etc/zabbix |
Оригинальный get_mysql_stats_wrapper.sh не умеет работать с нестандартным портом MySQL. Добавляем переменную PORT и правим переменные CACHEFILE и TIMEFLM. Файл приводим к такому виду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# cat get_mysql_stats_wrapper.sh #!/bin/sh # The wrapper for Cacti PHP script. # It runs the script every 5 min. and parses the cache file on each following run. # Version: 1.1.5 # # This program is part of Percona Monitoring Plugins # License: GPL License (see COPYING) # Copyright: 2015 Percona # Authors: Roman Vynar ITEM=$1 HOST=localhost PORT=3308 DIR=`dirname $0` CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg" CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt:$PORT" if [ "$ITEM" = "running-slave" ]; then # Check for running slave RES=`HOME=~zabbix mysql -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','` if [ "$RES" = " Yes, Yes," ]; then echo 1 else echo 0 fi exit elif [ -e $CACHEFILE ]; then # Check and run the script TIMEFLM=`stat -c %Y $CACHEFILE` TIMENOW=`date +%s` if [ `expr $TIMENOW - $TIMEFLM` -gt 300 ]; then rm -f $CACHEFILE $CMD 2>&1 /dev/null fi else $CMD 2>&1 /dev/null fi # Parse cache file if [ -e $CACHEFILE ]; then cat $CACHEFILE | sed 's/ /\n/g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}' else echo "ERROR: run the command manually to investigate the problem: $CMD" fi |
Создаём пользователя БД для чтения данных:
1 |
MariaDB [(none)]> GRANT SUPER, PROCESS ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 's3cret'; |
В ss_get_mysql_stats.php задаем параметры подключения к БД для получения данных:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# cat ss_get_mysql_stats.php <?php # ============================================================================ # This program is part of Percona Monitoring Plugins # License: GPL License (see COPYING) # Copyright 2008-2015 Baron Schwartz, 2012-2015 Percona # Authors: # Baron Schwartz, Roman Vynar # ============================================================================ ... # ============================================================================ $mysql_user = 'zabbix'; $mysql_pass = 's3cret'; $mysql_port = 3308; ... |
Создаём также файл доступа для get_mysql_stats_wrapper.sh :
1 2 3 4 5 |
# touch ~zabbix/.my.cnf vi /var/lib/zabbix/.my.cnf [client] user = zabbix password = s3cret |
Убеждаемся что команды выдают данные, но никак не ошибку “Access denied”:
1 2 3 |
# /etc/zabbix/get_mysql_stats_wrapper.sh running-slave 0 # /etc/zabbix/get_mysql_stats_wrapper.sh gg 102347 |
Настраиваем Zabbix агент (в моём случае менялись только директивы Server и ServerActive) и убеждаемся что директива
1 |
Include=/etc/zabbix/zabbix_agentd.d/ |
Добавляем порты Zabbix в исключения iptables:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# iptables -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 10050 -j ACCEPT # iptables -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 10051 -j ACCEPT # cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Tue Sep 29 18:43:45 2015 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [21247:2382963] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT #Keepalived vrrp.mcast.net multicast -A INPUT -m pkttype --pkt-type multicast -s 10.20.0.0/16 -d 224.0.0.18/24 -j ACCEPT #HAProxy reads -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT #HAProxy writes -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 3307 -j ACCEPT #MAriaDB itself -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 3308 -j ACCEPT #Galera Cluster replication traffic -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 4567 -j ACCEPT #Galera Cluster Incremental State Transfer -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 4568 -j ACCEPT #Rsync_SST -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 4444 -j ACCEPT #HAProxy Web interface -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT #Zabbix agent -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 10050 -j ACCEPT -A INPUT -s 10.20.0.0/16 -i eth0 -p tcp -m tcp --dport 10051 -j ACCEPT #Drop all other -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Tue Sep 29 18:43:45 2015 |
Копируем файлы конфигурации на две другие ноды:
1 2 3 4 5 6 |
# scp /etc/zabbix/*.* root@10.20.20.12:/etc/zabbix # scp /var/lib/zabbix/.my.cnf root@10.20.20.12:/var/lib/zabbix/ # scp /etc/sysconfig/iptables root@10.20.20.12:/etc/sysconfig/iptables # scp -r /etc/zabbix/*.* root@10.20.20.13:/etc/zabbix # scp /var/lib/zabbix/.my.cnf root@10.20.20.13:/var/lib/zabbix/ # scp /etc/sysconfig/iptables root@10.20.20.13:/etc/sysconfig/iptables |
Перезапускаем iptables и запускаем Zabbix агент:
1 |
# service iptables restart && service zabbix-agent start |
Добавляем Zabbix агент в автозагрузку на всех нодах:
1 |
# chkconfig zabbix-agent on |
Настройка Zabbix сервера
- Загрузите самый новый архив с сайта Percona
- Распакуйте и перейдите в папку zabbix/templates/
- Импортируйте XML шаблон в Zabbix (Configuration -> Templates -> Import) добавив при этом галочки напротив «Screens»
- Добавьте ноды подключивши их к группе “Percona Templates” и подключивши к шаблону “Percona MySQL Server Template” (вкладка Templates).
Готово.