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 = число узлов, необходимых для кворума