Настройка репликации БД между серверами
Данное руководство описывает процесс создания отказоустойчивой конфигурации из двух экземпляров брокера 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):
Перед настройкой реплики остановить:
systemctl stop apache2 uds
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
Запустить сервисы брокера:
systemctl start apache2 uds
systemctl start vdi.service vdiweb.service
Настройка второго сервера (Slave)
На втором брокере (10.0.0.2):
Остановить сервисы брокера:
systemctl stop apache2 uds
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' ... }
Запустить сервисы брокера
systemctl start apache2 uds
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):
Остановить сервисы:
systemctl stop apache2 uds
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'
...
}
Запустить сервисы:
systemctl start apache2 uds
systemctl start vdi.service vdiweb.service
На втором брокере (10.0.0.2):
Остановить сервисы:
systemctl stop apache2 uds
systemctl stop vdi.service vdiweb.service
Скопировать файл
/var/server/server/settings.py
с первого (10.0.0.1) брокера с заменой на второй (10.0.0.2):Запустить сервисы брокера:
systemctl start apache2 uds
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