HOSTVM
Search
K
Comment on page

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

Данное руководство описывает процесс создания отказоустойчивой конфигурации из двух экземпляров брокера 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'@'%';
Добавить разрешения для подключения к БД с других хостов:
UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='udsdbadm';
FLUSH PRIVILEGES;
  • Создать резервную копию БД (обязательно!):
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):
  • Запустить сервисы брокера
Брокер версии 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
    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'@'%';
  • Добавить разрешения для подключения к БД с других хостов:
UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='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):
DATABASES = {
...
'HOST': '10.0.0.3'
...
}
  • Запустить сервисы:
Брокер версии 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