Перейти к содержанию

Репликация узла с ролью 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

Выключить хост Мастера.