...
Устанавливаем пакеты с MySQL, конфигурацией баз данных, а также keepalive:
Без форматирования sudo aptitude install ecss-mysql-3.10 keepalived
Предупреждение В процессе установки пакета ecss-mysql вас попросят установить IP-маску для доступа к базам ecss. Необходимо указать маску сети, которая используется для внутреннего взаимодействия нод. Например, если HOST_1_IP = 192.168.2.1, а HOST_2_IP = 192.168.2.2, то при установке ecss-mysql нужно указать следующую маску 192.168.2.%. Запрещается устанавливать маску в 127.0.0.% для системы, которая будет работать в кластере. Данный пункт нужно выполнить на обоих хостах.
Конфигурируем bind-address для mysql.
Откройте конфигурационный файл mysql: /etc/mysql/mysql.conf.d/mysqld.cnf и добавьте туда следующую строку:Без форматирования bind-address = 0.0.0.0
перезапустите mysql.
Без форматирования sudo systemctl restart mysql.service
Данный пункт нужно выполнить на обоих хостах.
На ecss1 выполняем команды:
Генерируем ключ для авторизации на ecss1 с ecss2:
Без форматирования ssh-keygen
Передаем ключ на ecss2:
Без форматирования ssh-copy-id ssw@ecss2
На ecss2 выполняем команды:
Генерируем ключ для авторизации на ecss2 с ecss1:
Без форматирования ssh-keygen
Передаем ключ на ecss1:
Без форматирования ssh-copy-id ssw@ecss1
На ecss1 переходим в директорию /usr/lib/ecss/ecss-scripts/mysql-replication/
Без форматирования cd /usr/lib/ecss/ecss-scripts/mysql-replication
Запускаем скрипт настройки репликации данных ./install_replication.sh. Во время работы скрипт попросит указать необходимые параметры для настройки репликации, а также несколько раз попросит ввести пароль от bash пользователя. Это необходимо для перезапуска mysql сервиса и копирования его конфигурационных файлов. Пример исполнения скрипта:
Без форматирования [sudo] пароль для ssw: ENTER DB_ROOT_LOGIN (default: root): ENTER DB_ROOT_PASSWORD: ENTER REPLICA_USER (default: replica): ENTER REPLICA_USER_PASSWORD: ENTER HOST_1 IP address:192.168.56.101 ENTER HOST_2 IP address:192.168.56.102 ENTER HOST_1 (default: ecss1): ENTER HOST_2 (default: ecss2): ENTER HOST_2_USER (default: ssw): ENTER MEDIATOR_HOST IP address (default: 127.0.0.1): ENTER SNMP_PORT (default: 162): Проверьте введённые значения: DB_ROOT_LOGIN: root REPLICA_USER: replica HOST_1_IP: 192.168.56.101 HOST_2_IP: 192.168.56.102 HOST_1_NAME: ecss1 HOST_2_NAME: ecss2 HOST_2_USER: ssw MEDIATOR_IP: 127.0.0.1 SNMP_PORT: 162 Выберите действиe [c/r/a]: c-продолжить r-перенастроить параметры a-выход из скрипта конфигурации c Enter password: The authenticity of host 'ecss2 (192.168.56.102)' can't be established. ECDSA key fingerprint is SHA256:a9K7bSxTQiKVpRFBDzil9hgMSwlS7A4UWP8+fLkkT5g. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'ecss2,192.168.56.102' (ECDSA) to the list of known hosts. ssw@ecss2's password: mysql: [Warning] Using a password on the command line interface can be insecure. make replica user at ecss1 mysql: [Warning] Using a password on the command line interface can be insecure. grant replica user at ecss1 mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. make replica user at ecss2 mysql: [Warning] Using a password on the command line interface can be insecure. grant replica user at ecss2 mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. ssw@ecss2's password: ecss2_replica.cnf 100% 1553 1.5KB/s 00:00 ssw@ecss2's password: [sudo] пароль для ssw: Connection to ecss2 closed. Restarting MySQL at ecss1 Restarting MySQL at ecss2 ssw@ecss2's password: [sudo] пароль для ssw: Connection to ecss2 closed. ------------------------------------------------------ mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. MASTER_LOG_FILE on ecss2: server-mysql-bin.000001 MASTER_LOG_POS on ecss2: 154 mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. SLAVE_IO_RUNNING on ecss1: Yes SLAVE_SQL_RUNNING on ecss1: Yes mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. MASTER_LOG_FILE on ecss1: server-mysql-bin.000001 MASTER_LOG_POS on ecss1: 154 mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. SLAVE_IO_RUNNING on ecss2: Yes SLAVE_SQL_RUNNING on ecss2: Yes ssw@ecss2's password: mysql: [Warning] Using a password on the command line interface can be insecure. Enter password: Replacing MySQL login and password in keepalive's scripts at ecss1 Replacing MySQL login and password in keepalive's scripts at ecss2 ssw@ecss2's password: [sudo] пароль для ssw: Connection to ecss2 closed. Setting Replication violation notifications... * Reloading configuration files for periodic command scheduler cron [ OK ] ssw@ecss2's password: [sudo] пароль для ssw: * Reloading configuration files for periodic command scheduler cron [ OK ] Connection to ecss2 closed
По завершению установки скрипт выводит значения переменных Slave_IO_Running, Slave_SQL_Running на ecss1, ecss2. Если переменные равны Yes - значит репликация запустилась.
- Опциональный пункт: если необходимо реплицировать базу данных для web_conf, то на данном этапе нужно установить пакет web_conf на одном их хостов. В этом случае база данных будет прореплицирована на второй хост.
Для того, чтобы доступ до реплицированного MySQL был прозрачен для клиентов, создаем виртуальный IP. Он будет переезжать между хостами ecss1, ecss2 средствами VRRP+keepalive, если на одном из них mysqld остановился. Для этого в конфигурационный файл keepalived.conf на каждой ноде добавить следующую секцию:
Предупреждение В секции vrrp_instance MySQL необходимо скорректировать свойства virtual_router_id, virtual_ipaddress под конкретную локацию Без форматирования vrrp_script check_mysqld { script "killall -0 mysqld" # cheaper than pidof interval 1 # check every 1 seconds } !For MySQL vrrp_instance MySQL { state BACKUP interface eth0 virtual_router_id 226 priority 100 advert_int 1 smtp_alert nopreempt authentication { auth_type PASS auth_pass keepmysql } virtual_ipaddress { 192.168.23.181/24 dev eth0 label eth0:11 } track_script { check_mysqld } notify_master /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_master.sh notify_backup /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_backup.sh }
Перезапускаем keepalived на каждой из хостов ecss1, ecss2:
Без форматирования sudo systemctl restart keepalived.service
После этого на одном из хостов должен подняться интерфейс, по которому будет доступен MySQL. В случае, если на данном хосте остановить MySQL, то сетевой интерфейс переместится на соседний хост.
Настраиваем dnsmasq:
Для того, чтобы подключить систему ECSS-10 к реплицированному MySQL необходимо настроить dnsmasq. Для этого нужно прописать keepalive адрес, настроенный в пункте 8, в следующие конфигурационные файлы:
Без форматирования /etc/dnsmasq.d/ecss-cocon-mysql /etc/dnsmasq.d/ecss-statistic /etc/dnsmasq.d/ecss-tts
После внесения изменений сохраните конфигурационные файлы и перезапустите dnsmasq командой:
Без форматирования sudo systemctl restart dnsmasq.service
Пример конфигурационного файла /etc/dnsmasq.d/ecss-cocon-mysql:
Без форматирования address=/cocon.mysql.ecss/192.168.23.181
Проверка корректности настройки репликации
Для проверки того, что репликация данных работает корректно необходимо выполнить следующие действия.
Проверить состояние реплики. Для этого выполните команду:
Без форматирования mysql -uroot -p -e 'show slave status \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"
Данная команда должна показывать на обоих хостах следующую информацию:
Без форматирования Slave_IO_Running: Yes Slave_SQL_Running: Yes
Проверить состояние событий. Для этого выполните команду:
Без форматирования mysql -uroot -p -e 'use ecss_statistics; show events\G;' |grep Status
Один из хостов (на котором присутствует виртуальный адрес keepalive) должен показать следующий статус:
Без форматирования Status: ENABLED
тогда статус соседнего хоста должен быть:
Без форматирования Status: SLAVESIDE_DISABLED
Восстановление реплики через mysqldump
Данный пункт необходимо выполнять в случае возникновения ошибок репликации. Рассмотрим пример восстановления данных на ecss2 на основе ecss1.
...