Резервирование IVA CS

В IVA CS для управления базой данных используется СУБД PostgreSQL.

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

Главными требованиями для построения отказоустойчивого кластера PostgreSQL является потоковая репликация с ведущего сервера (master) на все резервные (реплики) и автоматический ввод резерва при отказе сервера master.

Потоковая репликация позволяет передавать изменения с сервера master на реплики таким образом, чтобы в каждый момент времени на резервных серверах хранилась полноценная копия базы данных, аналогичная базе данных на сервере master.

Для резервирования ПО IVA CS используется следующее программное обеспечение:

  • PostgreSQL — свободная объектно-реляционная система управления базами данных

  • Patroni — решение для кластеризации на базе PostgreSQL

  • etcd — распределённое хранилище вида ключ-значение для Patroni. Обеспечивает надёжный способ хранения данных, к которым могут обращаться распределённая система или кластер машин.

  • HAProxy — прокси-сервер TCP и HTTP трафика для организации единой точки подключения к PostgreSQL

Данное программное обеспечение устанавливается на каждый сервер во время выполнения файла install.sh.

Описание работы резервирования

Для конфигурирования ведущего и резервных серверов в единый кластер серверов PostgreSQL и последующего управления данным кластером используется Patroni. Для хранения информации, общей для всех узлов кластера, используется распределённое хранилище etcd.

Patroni обрабатывает отказы кластера и обеспечивает автоматическое переключение на резервный сервер при сбое сервера master. В этом случае резервный сервер переходит в режим сервера master, а бывший сервер master находится в режиме восстановления.

При переключении сервера с master на резервный теряются данные, которые не успели синхронизироваться между серверами в момент сбоя.

После восстановления сервера на нём происходит обновление базы данных до актуального состояния, сам сервер переходит в режим резервного, а резервный сервер, который стал сервером master, продолжает находиться в статусе ведущего.

При одновременном отказе нескольких серверов, после их восстановления необходимо вручную вводить в кластер данные с отключенных реплик.

Для работы с СУБД все сервисы должны иметь единую точку подключения, которую обеспечивает HAProxy.

В качестве сервера СУБД может выступать один из серверов PostgreSQL.

На основе данных, полученных от Patroni, HAProxy определяет, какой из серверов является master в данный момент, и отправляет запросы к СУБД на этот сервер.