Репликация узла с ролью DB
Примечание!
Данная инструкция описывает только один способ репликации. Подробнее способы репликации описаны в документации БД.
Для отказоустойчивости и сохранения работоспособности узла с ролью DB в случае выхода из строя реализуется репликация - процесс синхронизации нескольких копий на разных серверах.
Использование виртуального IP-адреса
Для использования виртуального IP-адреса необходимо перед установкой Space Disp установить службу keepalived на хост, который в дальнейшем будет использован для установки узла с ролью DB, командой:
sudo apt install keepalived
Настройки keepalived хранятся в файле конфигурации /etc/keepalived/keepalived.conf
. Необходимо создать файл командами:
sudo su
nano /etc/keepalived/keepalived.conf
Прописать конфигурацию:
global_defs {
router_id pg
}
vrrp_instance postgresql {
state MASTER
interface <имя_сетевого_интерфейса>
virtual_router_id <целое_число_от_1_до_255>
priority 255
virtual_ipaddress {
<виртуальный_ip_адрес>
}
}
Пример конфигурации
global_defs {
router_id pg
}
vrrp_instance postgresql {
state MASTER
interface eth0
virtual_router_id 5
priority 255
virtual_ipaddress {
192.168.38.233
}
}
Для применения настроек необходимо перезапустить службу keepalived:
service keepalived restart
Настройка потоковой репликации
Далее основной хост с ролью DB будет называться Мастером, а хост DB, на котором выполняется репликация, будет называться Репликой.
Для создания Реплики необходимо клонировать хост (если хост является ВМ, созданной на SpaceVM, то см. инструкцию по клонированию ВМ).
> Если используется виртуальный IP-адрес, то перед клонированием необходимо выключить все ВМ кластера **Space Disp**.
После успешного клонирования на клоне необходимо остановить службу keepalived:
sudo service keepalived stop
Включить все ВМ кластера Space Disp.
Настройка Мастера
Авторизоваться пользователю root и отредактировать файл /etc/postgresql/11/main/pg_hba.conf
.
В файл необходимо добавить строку:
host replication vdi <IP-адрес Реплики>/32 md5
Сохранить изменения и выполнить перезапуск службы:
```
service postgresql restart
```
Настройка Реплики
Настроить keepalived. Перейти в файл /etc/keepalived/keepalived.conf
и изменить значения state на BACKUP и priority на 200.
Пример конфигурации
global_defs {
router_id pg
}
vrrp_instance postgresql {
state BACKUP
interface eth0
virtual_router_id 5
priority 200
virtual_ipaddress {
192.168.38.233
}
}
Авторизоваться пользователю root и остановить службу:
service postgresql stop
Перейти к файлу /etc/postgresql/11/main/pg_hba.conf
.
В файл необходимо добавить строку:
host replication vdi <IP-адрес Мастера>/32 md5
Переключиться на пользователя postgres и перейти в директорию с базой данных.
Удалить директорию с базой данных и создать пустую директорию с такими же правами:
su postgres
cd /var/lib/postgresql/11
rm -r main
mkdir main
chmod go-rwx main
Выполнить копирование БД:
pg_basebackup -h <IP_Мастера> -U vdi --checkpoint=fast -D ./main -R --slot=replica -C
Заменить
фактическим адресом.
Авторизоваться пользователю root и запустить службу postgresql:
exit
service postgresql start
Запустить службу keepalived:
service keepalived start
Репликация успешно настроена.
Переключение Реплики на Мастера
Для повышения Реплики до Мастера необходимо:
На Мастере остановить службу postgresql:
sudo service postgresql stop
На Реплике переключиться на пользователя postgres, перейти в директорию с утилитой pg_ctl и выполнить promote:
su postgres
cd /usr/lib/postgresql/11/bin
./pg_ctl -D /var/lib/postgresql/11/main promote
Выключить хост Мастера.