Skip to content

Latest commit

 

History

History
41 lines (26 loc) · 2.44 KB

README.md

File metadata and controls

41 lines (26 loc) · 2.44 KB

Программа-агент, которая создаёт отказоустойчивый кластер PostgreSQL

Программа-агент запущена на каждом из хостов. Программа-агент в случае потери сетевой связности мастера делает promote локальной СУБД до мастера.

Для того чтобы проверить, что сетевая связность потеряна у M, а не у S, используется координирование с арбитром.

Promote не происходит, если у S нет связи ни с M, ни с А.

Promote происходит если у S нет связи с M и А подтверждает отсутствие связи с М.

Архитектура

За основу взят контейнер postgres:9.6, в который добавляется собранный агент, написанный на golang.

Кластер создается через bash скрипты при инициализации контейнера, агент осуществляет все остальное.

Конфигурация осуществляется через файл app.env.

Агент проверят работоспособность всех составляющих кластера, если проверка завершилась успешно, происходит запуск.

Раз в секунду агент проверяет доступность соотвестсвующих узлов. Логика работа при обнаружении проблем с доступностью аналогична тексту задания.

Блокировка master происходит через iptables (iptables -P INPUT DROP) с дальнейшим сохранением через iptables-save > /etc/iptables/rules.v4.

Повышение до master происходит посредством триггер файла /tmp/touch_me_to_promote_to_me_master.

Запуск

docker compose up

Тестирование

// Тестирование master 
pgbench.exe -h 127.0.0.1 -p 5432 -U postgres -i -s 150 benchmark
// Останавливаем master
docker compose stop pg-master
// Проверяем работу slave (повышенного до master)
pgbench.exe -h 127.0.0.1 -p 5433 -U postgres -i -s 150 benchmark