После установки и обновления cacti мониторинг системы осталось настроить маленький кластер для повышения отказоустойчивости. Если мониторинг система нужна исключительно для мониторинга своих собственных серверов и никаких графиков и статистики не нужно для клиентов, то это делать не обязательно. Но в этом случаи если сервер упадет – быть беде. Чтобы себя немного подстраховать нужно установить и настроить как минимум один дополнительный cacti сервер для бекапа. Но в этом случаи у нас будет два отдельных cacti сервера, что тоже не очень удобно, ибо если нужно будет добавлять дополнительный хост или менять настройки – все нужно будет проделывать на всех cacti серверах. Во избежание таких проблем – я решил настроить master-master mysql репликацию между cacti серверами.
В данной статье пойдет речь о настройке отказоустойчивого cacti кластера используя Master-Master mysql репликацию.
1 Входные данные
У нас есть два geo-распределённых cacti сервера версии 0.8.8f под Ubuntu 16.04, которые мониторят одну и ту же ферму серверов.
Рисунок 1.1 – Схема сети
Информация о серверах и сервисах наведена в таблице.
Таблица 1.1 – Входные данные.
Cacti-US | Cacti-EU | |
Mysql root пользователь | root | root |
Mysql root пароль | 55db6f2cf739144c90530a3d | 55db6f2cf739144c90530a3d |
Mysql replication пользователь | replica | replica |
Mysql replication пароль | 55a245d1f7391425c38dd68d | 55a245d1f7391425c38dd68d |
Mysql cacti база | cactidb | cactidb |
IP адрес | 98.158.96.99 | 87.239.191.99 |
Теперь можно приступать к практике.
2 Настройка кластера
2.1 Подготовка Cacti-US сервера
Для настройки Master-Master репликации, нужно отредактировать конфигурацию mysql сервера. Переходим на первый cacti сервер и добавляем следующею конфигурацию.
root@cacti-us:~# cat /etc/mysql/conf.d/replica.cnf [mysqld] server-id = 1 log-bin = /var/lib/mysql/server-mysql-bin log-bin-index = /var/lib/mysql/server-mysql-bin.index relay-log = /var/lib/mysql/slave-mysql-relay-bin-1 relay-log-index = /var/lib/mysql/slave-mysql-relay-bin-1.index replicate-do-db = cactidb replicate-ignore-table = cactidb.poller_output replicate-ignore-table = cactidb.poller_command replicate-ignore-table = cactidb.poller_time replicate-ignore-table = cactidb.poller_reindex replicate-ignore-table = cactidb.user_log replicate-ignore-table = cactidb.poller replicate-ignore-table = cactidb.settings binlog-ignore-db = information_schema binlog-ignore-db = mysql binlog-ignore-db = performance_schema auto_increment_increment = 5 auto_increment_offset = 1 log_bin_trust_function_creators = 1
Если Вы читали мою статью о настройке Мастер-Мастер mysql репликации – все опции будут понятны, если нет – то советую почитать, чтобы могли ориентироваться. Главное в этой конфигурации – это БД которую нужно реплицировать (replicate-do-db). replicate-ignore-table – это таблицы, которые нужно исключить из репликации, так как будут проблемы с работой cacti системы.
Далее добавляем пользователя, который будет собственно заниматься репликацией.
root@cacti-us:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'CREATE USER "replica"@"%" IDENTIFIED BY "55a245d1f7391425c38dd68d";' root@cacti-us:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'GRANT replication slave ON *.* TO "replica"@"%";' root@cacti-us:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'flush privileges;'
Осталось рестартануть mysql.
root@cacti-us:~# /etc/init.d/mysql restart
Первый сервер готов.
2.2 Подготовка Cacti-EU сервера
Теперь переходим на второй сервер и добавляем mysql конфигурацию.
root@cacti-eu:~# cat /etc/mysql/conf.d/replica.cnf [mysqld] server-id = 2 log-bin = /var/lib/mysql/server-mysql-bin log-bin-index = /var/lib/mysql/server-mysql-bin.index relay-log = /var/lib/mysql/slave-mysql-relay-bin-2 relay-log-index = /var/lib/mysql/slave-mysql-relay-bin-2.index replicate-do-db = cactidb replicate-ignore-table = cactidb.poller_output replicate-ignore-table = cactidb.poller_command replicate-ignore-table = cactidb.poller_time replicate-ignore-table = cactidb.poller_reindex replicate-ignore-table = cactidb.user_log replicate-ignore-table = cactidb.poller replicate-ignore-table = cactidb.settings binlog-ignore-db = information_schema binlog-ignore-db = mysql binlog-ignore-db = performance_schema auto_increment_increment = 5 auto_increment_offset = 2 log_bin_trust_function_creators = 1
Заметьте, что increment_offset у второго сервера уже 2 – это поможет избежать конфликтам при репликации (детали в статье о репликации).
Добавляем пользователя для репликации.
root@cacti-eu:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'CREATE USER "replica"@"%" IDENTIFIED BY "55a245d1f7391425c38dd68d";' root@cacti-eu:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'GRANT replication slave ON *.* TO "replica"@"%";' root@cacti-eu:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'flush privileges;'
Осталось рестартануть mysql.
root@cacti-eu:~# /etc/init.d/mysql restart
Второй сервер готов.
2.3 Настройка репликации
Теперь нужно настроить саму репликацию.
В идеале, нужно снять дамп базы на одном из серверов и развернуть на втором, и только после этого приступать к настройке репликации. В моем случаи оба сервера имеют одинаковые настройки, т.е. mysql база данных у них почти идентичная и для репликации нужно только настроить и стартануть слейвы.
Переходим на первый сервер и смотрим настройки mysql мастера.
root@cacti-us:~# mysql -e 'show master status;' +-------------------------+----------+--------------+---------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------------+----------+--------------+---------------------------------------------+ | server-mysql-bin.000013 | 86918999 | | information_schema,mysql,performance_schema | +-------------------------+----------+--------------+---------------------------------------------+
Запомнив позицию и название бин-лог файла, переходим на второй сервер, настраиваем мастер и стартуем репликацию.
root@cacti-eu:~# mysql -u root -p55db6f2cf739144c90530a3d -e "CHANGE MASTER TO MASTER_HOST = '98.158.96.99', MASTER_USER = 'replica', MASTER_PASSWORD = '55a245d1f7391425c38dd68d', MASTER_LOG_FILE = 'server-mysql-bin.000013', MASTER_LOG_POS = 86918999;" root@cacti-eu:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'start slave;'
Европейский сервер готов. Теперь снимаем позицию мастера для Штатовского.
root@cacti-eu:~# mysql -e 'show master status;' +-------------------------+----------+--------------+---------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------------+----------+--------------+---------------------------------------------+ | server-mysql-bin.000016 | 42563451 | | information_schema,mysql,performance_schema | +-------------------------+----------+--------------+---------------------------------------------+
Запоминаем, переходим на первый сервер и проделываем те же действия.
root@cacti-us:~# mysql -u root -p55db6f2cf739144c90530a3d -e "CHANGE MASTER TO MASTER_HOST = '87.239.191.99', MASTER_USER = 'replica', MASTER_PASSWORD = '55a245d1f7391425c38dd68d', MASTER_LOG_FILE = 'server-mysql-bin.000016', MASTER_LOG_POS = 42563451;" root@cacti-us:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'start slave;'
Ну вот и все. Можно теперь проверить статус слейвов на обоих серверах.
root@cacti-eu:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'show slave status \G;' | grep -E 'Seconds_Behind_Master|Slave_IO_State' Slave_IO_State: Waiting for master to send event Seconds_Behind_Master: 0 root@cacti-us:~# mysql -u root -p55db6f2cf739144c90530a3d -e 'show slave status \G;' | grep -E 'Seconds_Behind_Master|Slave_IO_State' Slave_IO_State: Waiting for master to send event Seconds_Behind_Master: 0
Репликация работает.
2.4 Тестируем работу кластера
Осталось провести тест. Логинимся в Веб-интерфейс первого cacti сервера и добавляем новое устройство.
И, к примеру, добавим графики загруженности сетевых интерфейсов.
Смотрим на график через некоторое время.
График построился, все ок.
Теперь, переходим на второй сервер и проверяем добавился ли новый хост и все ли хорошо с графиками. Все, что нужно, это поменять домен (IP) в URL-е и Вы должны попасть на этот же график, только с другого хоста.
Как видим, все ок. Так как cacti сервера снимают показатели с ферм по отдельности, то графики могут немного отличатся.
Теперь если один из хостов cacti кластера падает – ми просто мониторим с любого другого. Когда хост подымается – все что нужно сделать – это синкануть папку rra с рабочего хоста на проблемный и графики будут в норме.