Cacti. Отказоустойчивый кластер

cactiПосле установки и обновления cacti мониторинг системы осталось настроить маленький кластер для повышения отказоустойчивости. Если мониторинг система нужна исключительно для мониторинга своих собственных серверов и никаких графиков и статистики не нужно для клиентов, то это делать не обязательно. Но в этом случаи если сервер упадет – быть беде. Чтобы себя немного подстраховать нужно установить и настроить как минимум один дополнительный cacti сервер для бекапа. Но в этом случаи у нас будет два отдельных cacti сервера, что тоже не очень удобно, ибо если нужно будет добавлять дополнительный хост или менять настройки – все нужно будет проделывать на всех cacti серверах. Во избежание таких проблем – я решил настроить master-master mysql репликацию между cacti серверами.
В данной статье пойдет речь о настройке отказоустойчивого cacti кластера используя Master-Master mysql репликацию.

1 Входные данные

У нас есть два geo-распределённых cacti сервера версии 0.8.8f под Ubuntu 16.04, которые мониторят одну и ту же ферму серверов.
cacti3

Рисунок 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 сервера и добавляем новое устройство.
cacti3.1

И, к примеру, добавим графики загруженности сетевых интерфейсов.
Смотрим на график через некоторое время.
cacti3.2

График построился, все ок.
Теперь, переходим на второй сервер и проверяем добавился ли новый хост и все ли хорошо с графиками. Все, что нужно, это поменять домен (IP) в URL-е и Вы должны попасть на этот же график, только с другого хоста.
cacti3.3
Как видим, все ок. Так как cacti сервера снимают показатели с ферм по отдельности, то графики могут немного отличатся.
Теперь если один из хостов cacti кластера падает – ми просто мониторим с любого другого. Когда хост подымается – все что нужно сделать – это синкануть папку rra с рабочего хоста на проблемный и графики будут в норме.

Автор: admin, 18 июня 2016
Рубрики: Системы мониторинга
Метки: ,

Написать комментарий

Проверка на бота * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

Последние статьи

Яндекс.Метрика
?>