...
Для установки пакета, необходимо загрузить его на сервер и выполнить следующую команду (установка должна производиться от имени суперпользователя root на обоих серверах):
sudo apt update
sudo apt install keepalived
|
После установки необходимо добавить демона Keepalived в автозагрузку и запустить его:
sudo systemctl enable keepalived
sudo systemctl start keepalived
|
Основной файл конфигурации
...
Необходимо добавить права
sudo chmod +x /etc/keepalived/check_mysql.sh
sudo chmod +x /etc/keepalived/keep_notify.sh
|
Шаг 4:Выделение лога в отдельный файл
...
Ниже приведен пример настройки rsyslog:
sudo nano -w /etc/rsyslog.d/10-keepalived.conf
|
Добавьте в файл 10-keepalived.conf следующее:
/etc/rsyslog.d/10-keepalived.conf
if $programname contains 'Keepalived' then /var/log/keepalived.log
if $programname contains 'Keepalived' then ~
|
Затем, нужно перезапустить rsyslog командой:
sudo service rsyslog restart
|
Теперь сообщения от демона keepalived попадут только в лог-файл /var/log/keepalived.log и не попадут в /var/log/syslog .
...
Для запуска сервиса воспользуйтесь командой:
sudo service keepalived start
|
Остановка сервиса:
sudo service keepalived stop
|
Проверить состояние сервиса можно командой:
sudo service keepalived status
|
Шаг 5: Настройка репликации MariaDB
...
Для этого, необходимо на первом сервере заблокировать таблицы, снять дамп, разблокировать таблицы и скопировать получившийся файл на второй сервер:
1) sudo mysql -uroot -proot -e "FLUSH TABLES WITH READ LOCK;"
2) sudo mysqldump -uroot -proot --databases eltex_alert eltex_bruce eltex_ems eltex_jobs eltex_ont wireless eltex_pcrf eltex_wifi_customer_cab eltex_sorm2 eltex_ott eltex_jerry > mysqldump_master.sql
3) sudo mysql -uroot -proot -e "UNLOCK TABLES;"
4) sudo scp mysqldump_master.sql <username>@<ip_server2>:/home/<username>/
|
Затем, развернуть dump на втором сервере:
sudo mysql -uroot -proot < /home/<username>/mysqldump_master.sql
|
5.2 Настройка конфигурациионного файла MariaDB
...
Закомментировать либо удалить строку на обоих серверах:
Указать server-id. Для серверов необходимо задать уникальные идентификаторы, к примеру, для первого:
для второго:
Включить бинарные логи на обоих серверах:
log_bin = /var/log/mysql/mysql-bin.log
|
Включаем GTID и обеспечиваем согласованность на обоих серверах
Перезапустить сервис mysql на каждом сервер и создать БД для репликации:
sudo service mysql restart
|
5.3 Создание учетных записей
...
Создать в консоли MySQL учетную запись для репликации на первом сервере:
Выполнять из mysql-client (mysql -uroot -proot)
GRANT SELECT, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'<ip_server2>' IDENTIFIED BY 'password';
GRANT SELECT, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'<ip_server1>' IDENTIFIED BY 'password'; #необходимо для проверки состояния репликации из EMS
FLUSH PRIVILEGES;
|
Создать в консоли MySQL учетную запись для репликации на втором сервере:
Выполнять из mysql-client (mysql -uroot -proot)
GRANT SELECT, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'<ip_server1>' IDENTIFIED BY 'password';
GRANT SELECT, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'<ip_server2>' IDENTIFIED BY 'password'; #необходимо для проверки состояния репликации из EMS
FLUSH PRIVILEGES;
|
Привилегия SELECT необходима для работы проверки репликации из GUI EMS
...
Выдаем им права на внешний доступ на обоих серверах:
Выполнять из mysql-client (mysql -uroot -proot)
GRANT ALL PRIVILEGES ON *.* TO 'javauser'@'%' IDENTIFIED BY 'javapassword';
GRANT ALL PRIVILEGES ON `wireless`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `Syslog`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_ems`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_alert`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_bruce`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_pcrf`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_wids`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_wifi_customer_cab`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_jobs`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_sorm2`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_ott`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_jerry`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_ont`.* TO 'javauser'@'%';
FLUSH PRIVILEGES;
|
5.5 Включение репликации
Настроить и запустить репликацию второго сервера с первого (выполнить действия на втором сервере):
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='<ip_server1>', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_USE_GTID=slave_pos;
START SLAVE;
|
Проверить состояние репликации:
MariaDB [(none)]> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: <ip_server2>
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 3332141
Relay_Log_File: localhost-relay-bin.000062
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: No
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 3332141
Relay_Log_Space: 0
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 0
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: optimistic
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
Slave_Transactional_Groups: 0
1 row in set (0.000 sec)
|
Выведем состояние параметров gtid:
MariaDB [(none)]> show global variables like '%gtid%';
+
| Variable_name | Value |
+
| gtid_binlog_pos | 0-2-4217 |
| gtid_binlog_state | 0-2-4217 |
| gtid_cleanup_batch_size | 64 |
| gtid_current_pos | 0-1-13665 |
| gtid_domain_id | 0 |
| gtid_ignore_duplicates | OFF |
| gtid_pos_auto_engines | |
| gtid_slave_pos | 0-1-13665 |
| gtid_strict_mode | ON |
| wsrep_gtid_domain_id | 0 |
| wsrep_gtid_mode | OFF |
+
11 rows in set (0.001 sec)
|
Структура значения GTID выглядит следующим образом:
...
Y - server_id ноды кластера;
Z - gjpbwbz позиция
На 1-ом сервере
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='<ip_server2>', MASTER_USER='replication', MASTER_PASSWORD='password',MASTER_USE_GTID=slave_pos;
START SLAVE;
|
Проверить состояние репликации:
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: <ip_server1>
Master_User: replication
Master_Port: 5890
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 2682485
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 2674921
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 2682485
Relay_Log_Space: 2675231
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: Slave_Pos
Gtid_IO_Pos: 0-1-13677
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: optimistic
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Slave_DDL_Groups: 740
Slave_Non_Transactional_Groups: 0
Slave_Transactional_Groups: 12844
1 row in set (0.001 sec)
|
После сохранения изменений, состояние репликации можно отслеживать в GUI EMS в разделе Информация → Состояние системы резервирования → MySQL.
...
Еще можно проверить непосредственно перейдя в саму БД. На обоих серверах должен быть статус слейва
Выполнять из mysql-client (mysql -uroot -proot)
show slave status \G
*************************** 1. row ***************************
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
|
Slave_IO_Running — состояние работы получения бинарного лога с сервера Master. Если состояние будет NO, то репликация не работает.
Slave_SQL_Running — статус выполнения команд из лога на сервере Slave. Если состояние будет NO, то репликация не работает.