25.1. Архитектура #

Благодаря встроенным возможностям отказоустойчивости Postgres Pro Shardman позволяет создать кластер с узлами-лидерами (ввиду распределённого характера системы узлов-лидеров может быть несколько) и несколькими узлами-последователями. Лидер является ведущим сервером BiHA-кластера, а последователи — репликами лидера.

Утилита shardmanctl позволяет инициализировать кластер Postgres Pro Shardman и создавать узел-лидер, добавлять узлы-последователи, преобразовывать узлы существующего кластера в узел-лидер или узел-последователь на каждом сегменте, а также проверять статус узлов кластера. Лидер доступен для чтения и записи, в то время как последователи реплицируют данные с лидера в синхронном режиме.

Помимо узлов-лидеров и узлов-последователей можно задать узлам Postgres Pro Shardman роль узлов-рефери. Это узлы, участвующие в выборах в двух режимах:

  • Режим referee. В этом режиме узел принимает участие только в выборах лидера, но не в репликации данных. Кроме того, для рефери не создаются слоты репликации ни на лидере, ни на последователях.

  • Режим referee_with_wal. В этом режиме узел принимает участие и в выборах лидера, как и в режиме referee , и в репликации данных, а также получает весь WAL от лидера.

База данных postgres может также находиться на рефери.

Физическая потоковая репликация, реализованная в BiHA, обеспечивает отказоустойчивость, защищая от отказов серверов и системы хранения данных. При физической репликации файлы WAL узла-лидера синхронно отправляются на узел-последователь и применяются на нём. При синхронной репликации для каждой фиксации транзакции пользователь ожидает подтверждения от узлов-последователей. Узлы-последователи BiHA-кластера могут использоваться для выполнения следующих задач:

  • Создание таблиц в оперативной памяти для пишущих транзакций.

  • Подготовка резервной копии узла-последователя.

  • Восстановление повреждённых блоков данных на узле-лидере путём получения этих блоков с узла-последователя.

  • Проверка повреждённых записей в файлах WAL.

Физическая потоковая репликация, реализованная в BiHA, обеспечивает защиту от следующих видов отказов:

  • Отказ узла-лидера. В этом случае статус узла-последователя повышается, и он становится новым лидером кластера. Это также можно исправить в ручном режиме с помощью команды shardmactl shard -s shard-2 switch. Для переключения на определённый сегмент, используйте команду shardmactl shard -s shard-2 switch --new-primary follower2. Также сбой устраняется автоматически в ходе выборов.

  • Сбой соединения между узлом-лидером и узлом-последователем. Чтобы это исправить, запустите команду shardmactl shard -s shard-2 replicas reinit -n follower2.

  • Отказ узла-последователя. Отказ приведёт к остановке транзакции на лидере, так как он перестанет получать подтверждение транзакций от последователя и транзакция не сможет завершиться. Исправить ошибку можно так же, как и сетевую, повторно инициализировав последователя.

25.1.1. Конфигурация Postgres Pro Shardman с BiHA #

Топология кластера задаётся в файле sdmspec, смотри пример. Если файл прописан заранее, то команда shardmnctl init инициализирует кластер с заданной топологией. В противном случае сделать это можно вручную:

shardmanctl init -f sdmspec.json --(создаёт пустой кластер)
shardanctl nodes add -n master1,master2
shardmactl shard -s shard-1 add -n follower1
shardmactl shard -s shard-2 add -n follower2
shardmactl shard -s shard-1 add -w ref1
shardmactl shard -s shard-2 add -w ref2

Предупреждение

Категорически запрещается редактировать shared_preload_libraries, поскольку это может привести к полному отказу кластера, так как в файле находятся четыре ключевых элемента, которые нельзя отключать: Shardman, postgres_fdw, BiHA и pgpro_bindump.

sdmspec также включает в себя postgresql.conf и pg_hba.biha.conf.

Инструкция по регистрации кластера Postgres Pro Shardman в хранилище etcd описана в разделе Регистрация кластера Postgres Pro Shardman.

При инициализации кластерного ПО автоматически создаётся база данных biha_db. Это техническая БД, операции с ней запрещены.

Создаются слоты репликации с именами формата biha_node_идентификатор. Слоты управляются автоматически, изменять или удалять их вручную не нужно.

Для работы BiHA требуются файлы конфигурации postgresql.biha.conf и pg_biha/biha.conf, их нельзя редактировать вручную.

25.1.2. Выборы #

Выборы — это процесс, запускаемый shardmand для автоматического определения нового лидера при отказе текущего. Выборы проводятся на основании кворума кластера — минимального числа узлов, участвующих в выборе лидера.

Обратите внимание, что вручную настроить кворум нельзя, поскольку это автоматически делает утилита shardmanctl. Кворум рассчитывается по следующей формуле:

число экземпляров на одном сегменте / 2 + 1 = число узлов, необходимых для кворума