Конфигурация ecss-mysql и создание репликации

Для корректной отработки скрипта настройки репликации MySQL необходимо следующее:

  • Версия ОС: Ubuntu 18.04;
  • Версия MySQL: mysql-server-5.7;
  • Два хоста для настройки репликации (по умолчанию имена хостов ecss1, ecss2);
  • На каждом из хостов должен быть пользователь с одинаковым именем, имеющим root-права (нужен только на этапе выполнения скрипта). В рассматривающейся ниже инструкции будет использоваться имя пользователя support.

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

  • <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. Установка имен хостов.
    1. Проверьте текущие имена хостов, где будет установлена ecss-mysql. Если сервера будут установлены на одном хосте с основной системой (ecss-node), то имя должно соответствовать ecss1/ecss2 соответственно. Если MySQL будут установлены на отдельные сервера, то имя хоста может быть любым. Воспользуйтесь следующей командой на обоих серверах, чтобы изменить имя хостов:

      hostnamectl set-hostname <HOST_NAME>
    2. После установки имен на каждом сервере в конец файла /etc/hosts нужно добавить IP-адрес и имя соседнего сервера, например на ecss1 выполнить:

      sudo sh -c 'echo "192.168.1.22 ecss2" >> /etc/hosts'
      

      Если MySQL установлены на отдельных серверах, то добавьте в файл /etc/hosts имена и IP-адреса серверов с ecss-node, а также серверов с ecss-mysql.

  2. Поддержка доступа между серверами с ecss-mysql через ssh по rsa-ключам без использования пароля.

    1. На хосте ecss1 сгенерируйте rsa-ключ следующей командой (выполняйте команду без sudo, чтобы ключ сгенерировался для текущего пользователя):

      ssh-keygen
    2. Передайте ключ на ecss2:

      ssh-copy-id support@ecss2
    3. Аналогичным образом сгенерируйте ключ на хосте ecss2 и скопируйте его на первый хост:

      ssh-keygen
      ssh-copy-id support@ecss1
  3. После успешной установки пакета ecss-mysql на обоих хостах требуется настроить репликацию между базами данных MySQL. Для этого на хосте ecss1 запустите скрипт создания репликации:

    /usr/lib/ecss/ecss-scripts/mysql-replication/install_replication.sh

    Продублируйте ответы из пункта с установкой пакета до вопроса о настройке репликации:

    • Логин root пользователя ("Enter db root login") — пользователь для доступа к MySQL.
    • Пароль root пользователя ("Enter db root password") — пароль для доступа к MySQL.
    • Логин для пользователя replica ("Login for replica user") — с этим логином в MySQL будет создан пользователь. Данный пользователь используется для входа в MySQL при репликации системы. Пароль нужно запомнить, он используется в процессе восстановления репликации. 
    • Пароль для пользователя replica ("Password for replica user") — этот пароль будет установлен для пользователя, указанного в ответе на предыдущий вопрос. Пароль нужно запомнить, так как он используется в процессе восстановления репликации. 
    • IP-адрес локального хоста ("Local host IP address") — IP-адрес хоста, на котором запускается репликация. В приведенном примере это <HOST_1_IP>.
    • IP-адрес удаленного хоста ("Remote host IP address") — IP-адрес второго хоста, на котором развернут MySQL и с которым происходит репликация. В приведенном примере это <HOST_2_IP>.
    • Имя удаленного хоста ("Remote host name") — имя соседнего хоста с установленным пакетом ecss-mysql. В приведенном примере это ecss2.
    • Логин для входа на удаленный хост ("Login for remote host") — имя пользователя, которое будет использоваться для входа по ssh на соседний хост с ecss-mysql. В приведенном примере это support.
    • IP-адрес хоста с Mediator ("Mediator host IP address") — IP-адрес хоста, на котором будет развернут пакет ecss-node. В приведенном примере это <HOST_1_IP>. Однако, если в разворачиваемой системе ecss-node и ecss-mysql буду находить на различных серверах, требуется указать IP-адрес хоста с ecss-node.
    • SNMP-порт Mediator ("Mediator SNMP port") — порт, на котором сервер с mediator слушает SNMP-трафик. Оставьте значение по умолчанию, равное 162.

    Следующая секция предлагает автоматическую настройку виртуального IP-адреса в keepalive для доступа к базе данных. В случаи отработки резерва, виртуальный адрес будет автоматически переезжать на другой хост. 

    • Настроить виртуальный IP-адрес? ("DO YOU WANT TO SET MASTER (VIRTUAL) IP address?") — если ответ "yes", то данный скрипт самостоятельно создаст настройки для виртуального адреса MySQL, если "no", то настройки необходимо задать вручную. 
    • Определить, какой из хостов будем мастером ("WHICH HOST WILL BE MASTER?") (опционально, появляется, если предыдущий ответ на вопрос "нет") — указывает, кто из хостов будет мастером.

    По завершению установки скрипт выводит значения переменных Slave_IO_Running, Slave_SQL_Running на ecss1, ecss2. Если переменные равны "yes" — значит репликация запустилась. Шаблон автоматического создания файла находится по пути /usr/lib/ecss/ecss-scripts/mysql-replication/keepalived.conf :

  4. Ручное конфигурирование keepalived,в случае, если на вопрос "Настроить виртуальный IP-адрес? ("DO YOU WANT TO SET MASTER (VIRTUAL) IP address?")" был дан ответ "no":


  5. Проверяем статус сервиса ecss-mysql-checker.timer на обоих хостах, должен быть active:

    sudo systemctl status ecss-mysql-checker.timer

    Пример:

    sudo systemctl status ecss-mysql-checker.timer 
    ● ecss-mysql-checker.timer - Check replication status every minute
       Loaded: loaded (/lib/systemd/system/ecss-mysql-checker.timer; disabled; vendor preset: enabled)
       Active: active (waiting) since Fri 2023-11-03 15:17:20 +07; 1s ago
      Trigger: Fri 2023-11-03 15:18:00 +07; 37s left
  6. Настраиваем dnsmasq:

    Данный пункт выполняется на хосте с установленным пакетом ecss-node .

    Для того чтобы подключить систему ECSS-10 к реплицированному MySQL, необходимо настроить dnsmasq. Для этого нужно переконфигурировать пакет ecss-dns-env:

    sudo dpkg-reconfigure ecss-dns-env
    

    В открывшимся окне конфигурации выбрать mysql, а затем ввести адрес <VIRTUAL_IP>.

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

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

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

    sudo 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. Проверить состояние событий. Для этого выполните команду:

    sudo mysql -uroot -p -e 'SELECT EVENT_SCHEMA, EVENT_NAME, STATUS FROM INFORMATION_SCHEMA.EVENTS;'

    На обоих хостах статус всех ивентов должен быть ENABLED. Пример:

    mysql> SELECT EVENT_SCHEMA, EVENT_NAME, STATUS FROM INFORMATION_SCHEMA.EVENTS;
    +-----------------+------------------------------+---------+
    | EVENT_SCHEMA    | EVENT_NAME                   | STATUS  |
    +-----------------+------------------------------+---------+
    | ecss_calls_db   | try_generate_count_cdr_event | ENABLED |
    | ecss_statistics | generate_aggregation_event   | ENABLED |
    | ecss_meeting_db | cleanup_event                | ENABLED |
    +-----------------+------------------------------+---------+
    11 rows in set (0.00 sec)
  3. Проверить таблицы состояний:

    Для мастера данное число будет равно 1, для slave 0.

    mysql> select * from ecss_system.events_status;
    +--------+---------+
    | lock   | enabled |
    +--------+---------+
    | events |       0 |
    +--------+---------+
    1 row in set (0.00 sec)

В случае возникновения ошибок репликации необходимо выполнить действия, описанные в разделе Восстановление репликации БД MySQL.

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

%   ,{manager, [
%              {config, [
%                        {dir, "/etc/ecss/snmp/manager/"},
%                        {verbosity, silence},
%                        {db_dir, "/var/lib/ecss/snmp/"} 
%                       ]},
%              {def_user_mod, snmp_alarm_user}
%             ]}

Удаление репликации

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

/usr/lib/ecss/ecss-scripts/mysql-replication/remove_replication.sh