Учитывая, что JoinPAY обрабатывает ежедневно десятки тысяч финансовых транзакций, и обслуживает социально-значимые отрасли (например, общественный транспорт), то «падать» мы не имеем никакого права. Безусловно у нас везде предусмотрены режимы офлайн-работы оконечного оборудования с последующей накопительной отгрузкой на хост, но чем меньше таких переключений, тем лучше.
Поэтому стояла задача получить кластер, который переживает выпадение любого сервера, или даже нескольких серверов, и умеет автоматически вводить в строй сервера после аварий. Были разные подходы, и синтетические тесты, но остановились на связке PostgreSQL+Patroni+Haproxy+etcd.
При имитации падения мастер-ноды переключение занимает 4-6 секунд в нашем случае и происходит в автоматизированном режиме. Проверка статуса нод происходит с интервалом в 1 секунду, для перевода сервера в даун требуется 3 неудачных ответа (код 500), для переключения сервера назад — 2 удачных ответа (с кодом 200).