Отказоустойчивый PostgreSQL auto-failover кластер с использованием Repmgr и Barman. Часть 1. Введение.

С места в карьер. Вот то, что вы получите в конце:

  • Синхронный резервный сервер с использованием repmgr
  • Демоны repmgr, работающие не на серверах БД
    • Не нужен witness-сервер с собственным экземпляром PostgreSQL
    • Auto-failover устойчивый к split-brain
    • Сервер высокой доступности без дополнительных утилит, таких как HAProxy
  • Сервер бэкапирования с использованием barman
    • Асинхронная потоковая репликация WAL
    • Которая становится синхронной, если один из БД серверов упадет. Как минимум два узла кластера работают синхронно в любой момент времени.
    • Хранение бэкапов мастера и резервного сервера в одном месте, используя фичу высокой доступности. Экономим дисковое пространство.
    • Использование barman как единое место хранения WAL и место восстановления кластера.
  • Ansible playbook для автоматического развертывания

Часть 1. Введение.
Часть 2. Репликация. Repmgr.
Часть 3. Auto-failover. Демоны repmgr.
Часть 4. Высокая доступность. Бэкапирование. Демоны repmgr. Barman.
Часть 5. Тестирование. Ansible. Вместо послесловия.

Софт

  • Debian 9.7
  • PostgreSQL 11.2 (Debian 11.2-1.pgdg90+1)
  • Repmgr 4.2
  • Barman 2.7
  • OpenVPN 2.4.0

Топология

Поехали

Для начала, добавим необходимые репозитории и установим PostgreSQL на всех серверах.

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)"-pgdg main | tee  /etc/apt/sources.list.d/pgdg.list
apt update
apt install postgresql-11
update-rc.d postgresql enable
systemctl restart postgresql

Изменим пароль юзера postgres на серверах db1 и db2. Он понадобится нам в части 3.

passwd postgres

Затем добавим репозитории 2ndQuadrant(разработчик repmgr и barman) на все серверы.

apt install curl apt-transport-https
sh -c 'echo "deb https://apt.2ndquadrant.com/ $(lsb_release -cs)-2ndquadrant main" > /etc/apt/sources.list.d/2ndquadrant.list'
curl https://apt.2ndquadrant.com/site/keys/9904CD4BD6BAF0C3.asc | apt-key add -
apt update

Установите следующие утилиты на все серверы. barman-cli это набор скриптов, позволяющий удаленно и безопасно(в случае разрывов) архивировать и получать WAL.

apt install postgresql-11-repmgr barman-cli sudo

У становите barman на сервер backup.

apt install barman

Измените пароль юзера barman на сервере backup. Он понадобится нам в части 4.

passwd barman

Объединяем серверы в единую сеть(опционально)

Чтобы процесс репликации и бэкапирования был безопасным, мы должны объединить серверы используя безопасное соединение.
Возможно, вам не понадобится выполнять эти шаги, если ваши серверы уже объединены в сеть используя безопасную сеть вашего датацентра. Однако, я не рекомендую вам держать все яйца в одной корзине.
Как бы то ни бьыло, имейте в виду, что вы должны заменить следующие IP на ваши там, где их увидите.

10.8.1.1
10.8.2.1
10.8.3.1

ОК, давайте объединим серверы используя point-to-point соединение OpenVPN.
Для начала, установим OpenVPN и сгенерируем ключ сервера.

apt install openvpn
openvpn --genkey --secret /etc/openvpn/server.key

Затем, удаленно скопируем ключи на соответственные серверы-клиенты.
С сервера db1 на db2.

scp /etc/openvpn/server.key root@db2_ip_or_host:/etc/openvpn/client.key

С сервера db2 на backup.

scp /etc/openvpn/server.key root@backup_ip_or_host:/etc/openvpn/client.key

С сервера backup на db1.

scp /etc/openvpn/server.key root@db1_ip_or_host:/etc/openvpn/client.key

Далее создадим конфиги сервера и клиента на всех серверах.
db1
/etc/openvpn/server.conf

dev tun
ifconfig 10.8.1.1 10.8.2.1
secret server.key
cipher AES-256-CBC
keepalive 3 9
ping-timer-rem

/etc/openvpn/client.conf

remote backup_ip_or_host
dev tun
ifconfig 10.8.1.1 10.8.3.1
secret client.key
cipher AES-256-CBC
keepalive 3 18
nobind

db2
/etc/openvpn/server.conf

dev tun
ifconfig 10.8.2.1 10.8.3.1
secret server.key
cipher AES-256-CBC
keepalive 3 9
ping-timer-rem

/etc/openvpn/client.conf

remote db1_ip_or_host
dev tun
ifconfig 10.8.2.1 10.8.1.1
secret client.key
cipher AES-256-CBC
keepalive 3 18
nobind

backup
/etc/openvpn/server.conf

dev tun
ifconfig 10.8.3.1 10.8.1.1
secret server.key
cipher AES-256-CBC
keepalive 3 9
ping-timer-rem

/etc/openvpn/client.conf

remote db2_ip_or_host
dev tun
ifconfig 10.8.3.1 10.8.2.1
secret client.key
cipher AES-256-CBC
keepalive 3 18
nobind

Перегрузим конфиги и рестартанем OpenVPN.

update-rc.d openvpn enable
systemctl daemon-reload
systemctl restart openvpn

Отлично! Теперь мы готовы к настройке репликации с использованием repmgr.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *