Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

  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.

...