Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Используемая ОС: Ubuntu 16.04 

Mysql-server-5.7
Имя хостов: ecss1, ecss2
Имя пользователя на хостах с Root-правами: ssw

Используемые переменные:

  • <DB_ROOT_LOGIN> - имя root MySQL сервера (root)
  • <DB_ROOT_PASSWORD> - пароль root MySQL сервера
  • <HOST_1_IP> - IP адрес хоста ecss1
  • <HOST_2_IP> - IP адрес хоста ecss2
  • <HOST_1> - имя первого хоста (ecss1)
  • <HOST_2> - имя второго хоста (ecss2)
  • <REPLICA_USER> - пользователь, который будет использоваться для репликации данных (replica)
  • <REPLICA_USER_PASSWORD> - пароль для REPLICA_USER
  • <HOST_2_USER> - пользователь для доступа к shell ecss2
  • <MEDIATOR_HOST> - хост, на котором развернут mediator (127.0.0.1)
  • <SNMP_PORT> - SNMP порт медиатора (162)
  1. Устанавливаем пакеты с 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.% для системы, которая будет работать в кластере.

    Данный пункт нужно выполнить на обоих хостах.

  2. Конфигурируем bind-address для mysql. 
    Откройте конфигурационный файл mysql: /etc/mysql/mysql.conf.d/mysqld.cnf и добавьте туда следующую строку:

    bind-address            = 0.0.0.0

    перезапустите mysql.

    sudo systemctl restart mysql.service

    Данный пункт нужно выполнить на обоих хостах.

  3. На ecss1 выполняем команды:

    • Генерируем ключ для авторизации на ecss1 с ecss2:

      ssh-keygen
    • Передаем ключ на ecss2:

      ssh-copy-id ssw@ecss2
  4. На ecss2 выполняем команды:

    • Генерируем ключ для авторизации на ecss2 с ecss1:

      ssh-keygen
    • Передаем ключ на ecss1:

      ssh-copy-id ssw@ecss1
  5. На ecss1 переходим в директорию /usr/lib/ecss/ecss-scripts/mysql-replication/

    cd /usr/lib/ecss/ecss-scripts/mysql-replication
  6. Запускаем скрипт настройки репликации данных ./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 - значит репликация запустилась.

  7. Опциональный пункт: если необходимо реплицировать базу данных для web_conf, то на данном этапе нужно установить пакет web_conf на одном их хостов. В этом случае база данных будет прореплицирована на второй хост.
  8. Для того, чтобы доступ до реплицированного 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
    }
  9. Перезапускаем keepalived на каждой из хостов ecss1, ecss2:

    sudo systemctl restart keepalived.service

    После этого на одном из хостов должен подняться интерфейс, по которому будет доступен MySQL. В случае, если на данном хосте остановить MySQL, то сетевой интерфейс переместится на соседний хост.

  10. Настраиваем 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

Проверка корректности настройки репликации

Для проверки того, что репликация данных работает корректно необходимо выполнить следующие действия.

  1. Проверить состояние реплики. Для этого выполните команду:

    mysql -uroot -p -e 'show slave status \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"

    Данная команда должна показывать на обоих хостах следующую информацию:

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
  2. Проверить состояние событий. Для этого выполните команду:

    mysql -uroot -p -e 'use ecss_statistics; show events\G;' |grep Status

    Один из хостов (на котором присутствует виртуальный адрес keepalive) должен показать следующий статус:

    Status: ENABLED

    тогда статус соседнего хоста должен быть:

    Status: SLAVESIDE_DISABLED

Восстановление реплики через mysqldump

Данный пункт необходимо выполнять в случае возникновения ошибок репликации. Рассмотрим пример восстановления данных на ecss2 на основе ecss1.

ecss1-mysql> STOP SLAVE;
ecss1-mysql> RESET MASTER;
ecss1-mysql> FLUSH TABLES WITH READ LOCK;
ecss1-mysql> SHOW MASTER STATUS; # запомнить параметры File, Position (<FILE>, <POS>)

Не закрывая соединения с мастер базой следует сделать дамп необходимых данных. При закрытии соединения отключиться режим чтения.

ecss1-shell> mysqldump --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers -uroot -proot --opt --databases ecss_audit ecss_address_book  ecss_calls_db ecss_statistics ecss_subscribers history_db web_conf > ecss1.mysql.dump

Снять режим чтения командой:

ecss1-mysql> UNLOCK TABLES;

Скопировать файл ecss1.mysql.dump на ecss2. После этого зайти в mysql ecss2 и выполнить команду:

mysql-ecss2> STOP SLAVE;

Далее в shell ecss2 выполнить команду. Команда может выполняться длительное время.

mysql -uroot -p < ecss1.mysql.dump

Далее на слейве удалить все журналы от мастера и начать репликацию с момента, когда на мастере был сделан дамп:

mysql-ecss2> RESET SLAVE;
mysql-ecss2> CHANGE MASTER TO MASTER_LOG_FILE='<FILE>', MASTER_LOG_POS=<POS>;
mysql-ecss2> START SLAVE;
mysql-ecss2> SHOW SLAVE STATUS \G;

Убедиться в том, что параметры Slave_IO_Running и Slave_SQL_Running установлены в значение Yes. Далее в mysql ecss2 выполняем:

Если после RESET SLAVE выдается ошибка, что relay-файл не найден, необходимо удалить все relay-файлы на этом хосте. Затем повторить RESET SLAVE.
mysql-ecss2> STOP SLAVE;
mysql-ecss2> FLUSH TABLES WITH READ LOCK;
mysql-ecss2> RESET MASTER;
mysql-ecss2> SHOW MASTER STATUS;

Запомнить File и Position и в mysql ecss1 выполнить:

mysql-ecss1> CHANGE MASTER TO MASTER_LOG_FILE='<FILE>', MASTER_LOG_POS=<POS>;
mysql-ecss1> START SLAVE;
mysql-ecss1> SHOW SLAVE STATUS \G;

Убедиться в том, что параметры Slave_IO_Running и Slave_SQL_Running имеют значение Yes. Снять lock на ecss2 и запустить репликацию:

mysql-ecss2> UNLOCK TABLES;
mysql-ecss2> START SLAVE;

Для получения предупреждений при нарушении репликации необходимо раскомментировать следующие строчки в конфигурационном файле медиатора /etc/ecss/ecss_mediator/ и перезапустить ecss-mediator-3.8.0.

%   ,{manager, [
%              {config, [
%                        {dir, "/etc/ecss/snmp/manager/"},
%                        {verbosity, silence},
%                        {db_dir, "/var/lib/ecss/snmp/"} 
%                       ]},
%              {def_user_mod, snmp_alarm_user}
%             ]}
  • Нет меток