Настройка репликации БД между серверами

Данное руководство описывает процесс создания отказоустойчивой конфигурации из двух экземпляров брокера VDI и БД с репликацией master - slave. Его можно использовать как для развертывания новой установки, так и для подключения второго сервера к уже имеющейся.

Данная инструкция подходит как для репликации встроенной БД в appliance брокера, так и внешней БД, подключенной к нему. В качестве адресов для примера используются: 10.0.0.1 - адрес первого брокера 10.0.0.2 - адрес второй брокера 10.0.0.3 - адрес первой внешней базы данных (если используется) 10.0.0.4 - адрес второй внешней базы данных (если используется)

Если используются внутренние БД апплаенса брокера HOSTVM VDI

Настройка первого сервера (Master)

На первом брокере (10.0.0.1):

  • Перед настройкой реплики остановить:

Брокер версии 3.0
systemctl stop apache2 uds
Брокер версии >= 3.5
systemctl stop vdi.service vdiweb.service
  • Отредактировать /etc/mysql/mariadb.conf.d/50-server.cnf

В параметре bind-address указать: IP адрес адрес первого брокера (10.0.0.1).

Раскомментировать параметры и задать значения:

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
  • Перезапустить сервис mariadb

systemctl restart mariadb
  • Зайти в MYSQL с привилегиями root, создать пользователя для репликации, назначить ему необходимые разрешения:

mysql -p

CREATE USER 'replica'@'%' IDENTIFIED BY 'password';

где replica это имя пользователя и password - пароль.

GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';

Добавить разрешения для подключения к БД с других хостов:

DROP USER 'udsdbadm'@'localhost';
CREATE USER 'udsdbadm'@'%' IDENTIFIED BY 'password';

Где 'password' – пароль для пользователя udsdbadm. После пересоздания пользователя необходимо внести соответствующие изменения в файл конфигурации брокера /var/server/server/setting.py, а также сменить пароль пользователю udsdbadm на новый на втором сервере (Slave).

GRANT ALL PRIVILEGES ON *.* TO 'udsdbadm'@'%';
FLUSH PRIVILEGES;
  • Внести изменения в файл конфигурации брокера /var/server/server/setting.py , указав новый пароль для пользователя udsdbadm:

DATABASES = {
...
        'PASSWORD': 'password'
...
}
  • Создать резервную копию БД (обязательно!):

mysqldump -u root --single-transaction --master-data udsdb > backup.sql
  • Запустить сервисы брокера:

Брокер версии 3.0
systemctl start apache2 uds
Брокер версии >= 3.5
systemctl start vdi.service vdiweb.service

Настройка второго сервера (Slave)

На втором брокере (10.0.0.2):

  • Остановить сервисы брокера:

Брокер версии 3.0
systemctl stop apache2 uds
Брокер версии >= 3.5
systemctl stop vdi.service vdiweb.service
  • Скопировать файл /var/server/server/settings.py с первого (10.0.0.1) брокера с заменой на второй (10.0.0.2):

  • Внести изменения в файл конфигурации брокера /var/server/server/setting.py , указав адрес первого брокера (10.0.01):

    DATABASES = {
    ...
            'HOST': '10.0.0.1'
    ...
    }
  • Запустить сервисы брокера

Брокер версии 3.0
systemctl start apache2 uds
Брокер версии >= 3.5
systemctl start vdi.service vdiweb.service

Настройка репликации

На втором брокере (10.0.0.2):

  • отредактировать /etc/mysql/mariadb.conf.d/50-server.cnf

  • В параметре bind-address указать IP адрес второго брокера (10.0.0.2)

    bind-address = 10.0.0.2
  • Раскомментировать параметры и задать значения:

    server-id = 2
    log_bin /var/log/mysql/mysql-bin.log
  • Перезапустить сервис mariadb

    systemctl restart mariadb

  • Скопировать и развернуть дамп базы с первого (10.0.0.1) сервера (обязательно!).

    cat backup.sql | /usr/bin/mysql -u root udsdb
  • Получить параметры MASTER_LOG_FILE и MASTER_LOG_POS из дампа:

    head -n22 backup.sql | tail -1

    Пример вывода предыдущей команды:

    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=236295;

  • Зайти в MYSQL с привилегиями root

    mysql -p

  • Остановить все операции на сервере

    STOP SLAVE;

  • Настроить репликацию с первым (10.0.0.1) сервером

    CHANGE MASTER TO MASTER_HOST='10.0.0.1', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=236295;

    Где 10.0.0.1 - адрес первого (10.0.0.1) сервера БД, replica -настроенный ранее пользователь для репликации, password - его пароль, myslq-bin.000001 и 236295 - параметры журнала, полученные ранее.

  • Запустить сервер:

    START SLAVE;

  • Проверить параметры репликации:

    SHOW SLAVE STATUS\G

    В выводе должен быть корректный адрес первого (10.0.0.1) сервера Master_Host: 10.0.0.1 и значение параметров Slave_IO_Running и Slave_SQL_Running равное Yes

Если используются серверы с внешними БД

Настройка первого сервера (Master)

Если при настройке внешних баз данных есть потребность предварительного переноса информации (сервисы, пользователи, транспорты и пр.) с уже настроенной встроенной базы данных брокера HOSTVM VDI - перенесите базу данных на первый (10.0.0.3) сервер БД согласно руководства ("Перенос базы данных"). Если перенос данных не требуется или репликация настраивается с нуля - этот пункт можно пропустить. На первом сервере БД (10.0.0.3):

  • Отредактировать /etc/mysql/mariadb.conf.d/50-server.cnf

В параметре bind-address указать: IP адрес адрес первого сервера (10.0.0.3).

Раскомментировать параметры и задать значения:

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
  • Перезапустить сервис mariadb

systemctl restart mariadb
  • Зайти в MYSQL с привилегиями root, создать пользователя для репликации, назначить ему необходимые разрешения:

mysql -p

CREATE USER 'replica'@'%' IDENTIFIED BY 'password';

где replica это имя пользователя и password - пароль.

GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';

  • Добавить разрешения для подключения к БД с других хостов:

DROP USER 'udsdbadm'@'localhost';
CREATE USER 'udsdbadm'@'%' IDENTIFIED BY 'password';

Где 'password' – пароль для пользователя udsdbadm. После пересоздания пользователя необходимо внести соответствующие изменения в файл конфигурации брокера /var/server/server/setting.py, а также сменить пароль пользователю udsdbadm на новый на втором сервере (Slave).

GRANT ALL PRIVILEGES ON *.* TO 'udsdbadm'@'%';
FLUSH PRIVILEGES;
  • Создать резервную копию БД (обязательно!):

mysqldump -u root --single-transaction --master-data udsdb > backup.sql

Настройка брокеров

На первом брокере (10.0.0.1):

  • Остановить сервисы:

Брокер версии 3.0
systemctl stop apache2 uds
Брокер версии >= 3.5
systemctl stop vdi.service vdiweb.service
  • Отредактировать файл /var/server/server/settings.py, указать в поле HOST адрес первого сервера БД (10.0.0.3), и пароль для пользователя udsdbadm:

DATABASES = {
...
        'HOST': '10.0.0.3'
        'PASSWORD': 'password'
...
}
  • Запустить сервисы:

Брокер версии 3.0
systemctl start apache2 uds
Брокер версии >= 3.5
systemctl start vdi.service vdiweb.service

На втором брокере (10.0.0.2):

  • Остановить сервисы:

Брокер версии 3.0
systemctl stop apache2 uds
Брокер версии >= 3.5
systemctl stop vdi.service vdiweb.service
  • Скопировать файл /var/server/server/settings.py с первого (10.0.0.1) брокера с заменой на второй (10.0.0.2):

  • Запустить сервисы брокера:

Брокер версии 3.0
systemctl start apache2 uds
Брокер версии >= 3.5
systemctl start vdi.service vdiweb.service

Настройка второго сервера (Slave)

Настройка репликации

На втором сервере БД (10.0.0.4):

  • отредактировать /etc/mysql/mariadb.conf.d/50-server.cnf

  • В параметре bind-address указать IP адрес второго сервера БД (10.0.0.4)

    bind-address = 10.0.0.4
  • Раскомментировать параметры и задать значения:

    server-id = 2
    log_bin /var/log/mysql/mysql-bin.log
  • Перезапустить сервис mariadb

    systemctl restart mariadb

  • Скопировать и развернуть дамп базы с первого (10.0.0.3) сервера БД (обязательно!).

    cat backup.sql | /usr/bin/mysql -u root udsdb
  • Получить параметры MASTER_LOG_FILE и MASTER_LOG_POS из дампа:

    head -n22 backup.sql | tail -1

    Пример вывода предыдущей команды:

    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=236295;

  • Зайти в MYSQL с привилегиями root

    mysql -p

  • Остановить все операции на сервере

    STOP SLAVE;

  • Настроить репликацию с первым (10.0.0.3) сервером БД

    CHANGE MASTER TO MASTER_HOST='10.0.0.3', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=236295;

    Где 10.0.0.3 - адрес первого (10.0.0.3) сервера БД, replica -настроенный ранее пользователь для репликации, password - его пароль, myslq-bin.000001 и 236295 - параметры журнала, полученные ранее.

  • Запустить сервер:

    START SLAVE;

  • Проверить параметры репликации:

    SHOW SLAVE STATUS\G

    В выводе должен быть корректный адрес первого (10.0.0.3) сервера Master_Host: 10.0.0.3 и значение параметров Slave_IO_Running и Slave_SQL_Running равное Yes

Last updated