26.4. Справка по расширению biha #

biha — расширение Postgres Pro для управления BiHA-кластером.

В этом разделе содержится информация о параметрах конфигурации, функциях и представлениях расширения biha.

26.4.1. Параметры конфигурации #

Расширение biha поддерживает ряд описанных ниже параметров конфигурации, специфичных для BiHA-кластера:

26.4.1.1. Параметры конфигурации кластера #

Важно

  • При настройке параметров конфигурации кластера нужно обязательно обеспечить надёжность сети, чтобы изменения затронули все узлы кластера без возникновения ошибок.

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

  • Не рекомендуется изменять какие-либо параметры конфигурации кластера, пока один из узлов находится в состоянии NODE_ERROR, так как на этом узле изменения могут не примениться.

service_mode (boolean) #

Определяет, включен ли сервисный режим в BiHA-кластере.

Значение можно задать с помощью функции biha.service_mode.

Возможные значения:

  • f (по умолчанию): сервисный режим отключён.

  • t: сервисный режим включён.

ssl_certificate (text) #

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

Значение можно задать с помощью функции biha.set_ssl_certificate. Чтобы изменения вступили в силу, необходим перезапуск узла.

Значение по умолчанию: /PGDATA/pg_biha/biha_pub_cert.pem

ssl_mode (text) #

Указывает режим аутентификации для роли biha_replication_user. За подробной информацией о настройке SSL-аутентификации обратитесь к Настройка SSL для biha_replication_user. За подробной информацией о режимах обратитесь к sslmode.

Значение можно задать с помощью функции biha.set_ssl_mode. Чтобы изменения вступили в силу, необходим перезапуск узла.

Возможные значения:

  • verify-full (по умолчанию)

  • require

  • verify-ca

ssl_private_key (text) #

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

Значение можно задать с помощью функции biha.set_ssl_private_key. Чтобы изменения вступили в силу, необходим перезапуск узла.

Значение по умолчанию: /PGDATA/pg_biha/biha_priv_key.pem

synchronous_standby_names.count (integer) #

Включает кворумную синхронную репликацию, устанавливая параметр synchronous_standby_names и указывая число синхронных резервных (кворум) с методом ANY.

Значение можно задать с помощью функции biha.set_sync_standbys.

Значение должно быть целым числом больше нуля, больше значения параметра synchronous_standby_names.min, если он задан, а также не должно превышать число последователей, за исключением рефери. Рекомендуется задавать значение synchronous_standby_names.count меньше, чем значение minnodes.

synchronous_standby_names.min (integer) #

Включает нестрогую кворумную синхронную репликацию, указывая значение поля MIN параметра synchronous_standby_names, что является минимальным числом синхронных резервных, которые должны быть доступны, чтобы лидер продолжал подтверждать транзакции. Если значение параметра не указано, BiHA-кластер работает в соответствии с ограничениями синхронной репликации по умолчанию, т.е. лидер не доступен для транзакций на запись, пока все последователи не догонять его текущее состояние.

Значение можно задать с помощью функции biha.set_sync_standbys_min.

Значение synchronous_standby_names.min должно быть целым числом равным или больше нуля, а также меньше значения synchronous_standby_names.count. Если задано значение -1, нестрогая кворумная синхронная репликация отключена.

synchronous_standby_names.names (integer) #

Указывает список синхронных резервных в параметре конфигурации synchronous_standby_names.

Значение можно задать с помощью функции biha.set_ssn, а также изменять список синхронных резервных с помощью функций biha.add_to_ssn или biha.get_ssn.

use_ssl (boolean) #

Указывает, будет ли использоваться защищённый режим передачи служебной информации между узлами кластера по протоколу SSL/TLS управляющего канала biha. За подробной информацией обратитесь к Управление SSL для служебных подключений.

Значение можно задать с помощью функции biha.set_use_ssl. Чтобы изменения вступили в силу, необходим перезапуск узла.

Возможные значения:

  • false (по умолчанию): SSL отключён для служебных подключений BiHA.

  • true: сервисные подключения BiHA защищены SSL.

user_biha_cert (text) #

Указывает путь к публичному SSL-сертификату, который используется для аутентификации роли biha_replication_user. За подробной информацией о настройке SSL-аутентификации обратитесь к Настройка SSL для biha_replication_user.

Значение можно задать с помощью функции biha.set_user_cert.

user_biha_key (text) #

Указывает путь к закрытому ключу SSL, который используется для аутентификации роли biha_replication_user. За подробной информацией о настройке SSL-аутентификации обратитесь к Настройка SSL для biha_replication_user.

Значение можно задать с помощью функции biha.set_user_key.

26.4.1.2. Параметры конфигурации сегмента #

Следующие параметры конфигурации можно задать индивидуально для каждого логического узла (сегмента). Значения параметров наследуются узлами в рамках сегмента.

heartbeat_max_lost (integer) #

Указывает максимальное число сообщений о контроле состояния, которые допустимо не получить по BCP до того, как узел будет считаться недоступным.

Значение можно задать с помощью функции biha.set_heartbeat_max_lost.

Значение по умолчанию: 10

Минимальное значение: 3

Узлы во всех состояниях используют значение тайм-аута сообщений о контроле состояния, который рассчитывается как heartbeat_max_lost * heartbeat_send_period, для определения доступности других узлов. Например, если Узел A не получает сообщения о контроле состояния от Узла B в течение вышеупомянутого тайм-аута, состояние Узла B изменится на UNKNOWN в представлении biha.status_v Узла A, что будет означать, что Узел A считает Узел B недоступным. Лидер в состоянии LEADER_RW дополнительно использует тайм-аут, указанный в параметре no_wal_on_follower.

heartbeat_send_period (integer) #

Указывает частоту отправки сообщений о контроле состояния в миллисекундах.

Значение можно задать с помощью функции biha.set_heartbeat_send_period.

Значение по умолчанию: 1000

Минимальное значение: 500

Узлы во всех состояниях используют значение тайм-аута сообщений о контроле состояния, который рассчитывается как heartbeat_max_lost * heartbeat_send_period, для определения доступности других узлов. Например, если Узел A не получает сообщения о контроле состояния от Узла B в течение вышеупомянутого тайм-аута, состояние Узла B изменится на UNKNOWN в представлении biha.status_v Узла A, что будет означать, что Узел A считает Узел B недоступным. Лидер в состоянии LEADER_RW дополнительно использует тайм-аут, указанный в параметре no_wal_on_follower.

minnodes (integer) #

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

Значение можно задать с помощью функции biha.set_minnodes.

Значение по умолчанию: равно nquorum

Устанавливая это значение, принимайте во внимание возможный риск разделения кластера. Рекомендуется использовать следующую формулу: (общее_число_узлов + 1)/2. Например, если в кластере 3 узла, значение minnodes должно быть 2.

Если на узле для параметра can_vote установлено значение false, такой узел игнорируется параметром minnodes.

no_wal_on_follower (integer) #

Указывает тайм-аут продвижения слота репликации в миллисекундах.

Значение можно задать с помощью функции biha.set_no_wal_on_follower.

Значение по умолчанию: 20000

Минимальное значение: 5000

BiHA использует этот параметр конфигурации для следующих целей:

  • Когда вы вручную назначаете узел-последователь в качестве нового лидера с помощью функции biha.set_leader, состояние последователя изменяется на FOLLOWER_OFFERED.

    Последователь в состоянии FOLLOWER_OFFERED проверяет, обновилась ли его позиция WAL. Обновление позиции WAL подтверждает, что последователь продолжает получать данные репликации от источника. Если последователь не получает записи WAL дольше, чем задано в параметре no_wal_on_follower, состояние последователя изменяется обратно на FOLLOWER. В этом случае в журнале появляется следующее сообщение: «Timed out waiting for new WAL records from current leader» (Истёк тайм-аут ожидания записей WAL от текущего лидера).

  • Лидер в состоянии LEADER_RW использует параметр no_wal_on_follower в связке со значением тайм-аута сообщений о контроле состояния (который рассчитывается как heartbeat_max_lost * heartbeat_send_period) для определения доступности других узлов.

    Лидер проверяет позиции слотов репликации других узлов. Если позиция слота репликации узла обновляется, это означает, что узел получает данные репликации от лидера и доступен. Если лидер не получает от узла сообщения о контроле состояния в течение вышеупомянутого тайм-аута, а позиция слота репликации узла не меняется в течение тайм-аута, заданного в no_wal_on_follower, лидер будет считать узел недоступным, а состояние узла изменится на UNKNOWN в представлении biha.status_v лидера.

  • Если в каскадном BiHA-кластере узел не получает WAL в течение времени, заданного в no_wal_on_follower, он начинает искать новый источник репликации в соответствии с конфигурацией repl_pref_roles.

nquorum (integer) #

Указывает минимальное число узлов, которые должны проголосовать за нового лидера при отказе текущего лидера.

Значение можно задать с помощью функции biha.set_nquorum.

Значение по умолчанию: 2

Устанавливая это значение, принимайте во внимание возможный риск разделения кластера. Рекомендуется использовать следующую формулу: (общее_число_узлов + 1)/2. Например, если в кластере 3 узла, значение nquorum должно быть 2.

Если на узле для параметра can_vote установлено значение false, такой узел игнорируется параметром nquorum.

26.4.1.3. Параметры конфигурации узла #

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

asyncaction_timeout (integer) #

Указывает время ожидания выполнения асинхронных операций, таких как добавление сегментов и удаление узлов, в миллисекундах. Если сегмент или узел не добавляются или не удаляются в течение указанного времени, BiHA прерывает SQL-команду.

Значение параметра должно быть одинаковым на всех узлах кластера.

Значение можно задать с помощью функции biha.set_asyncaction_timeout.

Значение по умолчанию: 30000

Минимальное значение: 1000

biha_hosts (string) #

Используется другими узлами для подключению к текущему узлу по внутреннему управляющему каналу (BCP), например, через прокси-сервер или туннель. Если значение biha_hosts пустое, по умолчанию, используется значение biha_listen_addresses текущего узла.

Значение можно задать с помощью функции biha.set_biha_hosts.

Возможные значения: один или несколько разделённых запятыми адресов в формате hostname:port. port — необязательное значение, если порт не указан или задано значение -1, используется значение biha_port текущего узла.

Например: biha-db-1:5433,biha-proxy:8081

biha_listen_addresses (string) #

Определяет, на каких адресах открыты слушающие сокеты для внутреннего управляющего канала BCP.

Значение можно задать с помощью функции bihactl.

Возможные значения: один или несколько разделённых запятыми адресов в формате hostname:port. port — необязательное значение, если порт не указан или задано значение -1, используется значение biha_port текущего узла.

Например: biha-db-1:5433,biha-proxy:8081

biha_port (integer) #

Указывает порт для обмена служебной информацией между узлами.

Значение параметра задаётся утилитой bihactl и может быть перезаписано при изменении параметров конфигурации biha_hosts, biha_listen_addresses или replication_hosts.

callbacks_timeout (integer) #

Устанавливает время для выполнения всех функций-обработчиков для одного события в миллисекундах.

Значение можно задать с помощью функции biha.set_callbacks_timeout.

Значение по умолчанию: 10000

Минимальное значение: 1000

config_send_period (integer) #

Определяет тайм-аут для рассылки сообщения с конфигурацией кластера.

Значение можно задать с помощью функции biha.set_config_send_period.

Значение по умолчанию: 10000

Минимальное значение: 500

deny_wal_sources (string) #

Указывает перечень узлов, которые не могут быть источниками репликации для текущего узла. Если идентификатор узла внесён в перечень, текущий узел не может реплицировать с этого узла.

Значение можно задать с помощью функции biha.set_deny_wal_sources.

Значение по умолчанию: пустое

Параметр deny_wal_sources имеет более высокий приоритет, чем repl_pref_roles. Например, если идентификатор лидера внесён в перечень deny_wal_sources узла, этот узел не реплицирует с лидера, даже если для его параметра preferred_roles задано значение LF.

flw_ro (boolean) #

Определяет доступность последователя для операций на чтение.

Значение можно задать с помощью функции biha.set_flw_ro.

Возможные значения:

  • on (по умолчанию): последователь доступен для операций на чтение.

  • off: чтение с этого последователя разрешено только суперпользователям, а также членам ролей BIHA_CLUSTER_MANAGEMENT_ROLE и pg_monitor.

manage_slots_xmin (boolean) #

Определяет, отслеживает ли BiHA значение xmin слотов репликации.

Значение можно задать с помощью функции biha.set_manage_slots_xmin.

Возможные значения:

  • true (по умолчанию): отслеживание xmin включено.

  • false: отслеживание xmin отключено.

max_replicas (integer) #

Указывает максимальное число подключений biha к узлу для репликации, то есть максимальное число процессов walsender, где application_namebiha_node_*. За подробной информацией обратитесь к Подразделу 26.1.5.2.

Значение можно задать с помощью функции biha.set_max_replicas.

Значение должно быть целым числом больше нуля и не должно превышать значения max_wal_senders.

Другие возможные значения:

  • INT_MAX (по умолчанию): число подключения неограниченно.

  • 0: подключения запрещены.

pg_port (integer) #

Указывает порт узла для входящих подключений к Postgres Pro.

Значение параметра задаётся утилитой bihactl и может быть перезаписано при изменении параметров конфигурации biha_hosts, biha_listen_addresses или replication_hosts.

replication_hosts (string) #

Используется другими узлами для подключения к текущему узлу по каналу репликации. Значение параметра biha_listen_addresses должно включать replication_hosts. Если значение replication_hosts пустое, по умолчанию используется значение biha_listen_addresses текущего узла.

Значение можно задать с помощью функции biha.set_replication_hosts.

Возможные значения: один или несколько разделённых запятыми адресов в формате hostname:port. port — необязательное значение, если порт не указан или задано значение -1, используется значение biha_port текущего узла.

Максимальное значение строки 1024 байта, в противном случае параметр игнорируется.

Например: biha-db-1:5433,biha-proxy:8081

sql_hosts (string) #

Используется другими узлами для выполнения SQL-запросов к текущему узлу. Если значение sql_hosts пустое, по умолчанию используется значение replication_hosts текущего узла.

Значение можно задать с помощью функции biha.set_sql_hosts.

Возможные значения: один или несколько разделённых запятыми адресов в формате hostname:port. port — необязательное значение, если порт не указан или задано значение -1, используется значение biha_port текущего узла.

Максимальное значение строки 1024 байта, в противном случае параметр игнорируется.

Например: biha-db-1:5433,biha-proxy:8081

watchdog_timeout (integer) #

Указывает тайм-аут для прекращения принятия запросов узлом, если процесс biha не отвечает, в секундах. За подробной информацией обратитесь к Подразделу 26.3.9.

Значение можно задать с помощью функции biha.set_watchdog_timeout. Чтобы изменения вступили в силу, необходим перезапуск узла.

Значение по умолчанию: 2

Минимальное значение: 1

26.4.1.4. Параметры конфигурации, общие для узлов и сегментов #

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

can_be_leader (boolean) #

Определяет возможность узла или сегмента стать лидером.

Значение можно задать с помощью функции biha.set_can_be_leader.

Возможные значения:

  • true (по умолчанию): узел или сегмент может стать кандидатом на выборах нового лидера.

  • false: узел или сегмент не может стать кандидатом на выборах нового лидера.

Самый большой объём WAL может быть на том узле, который не может стать лидером. В этой ситуации при необходимости выборов другие узлы, которые могут предлагать себя в качестве кандидатов в лидеры, попытаются получить недостающие данные с этого узла. В случае успеха один из этих узлов станет лидером. Если данные получить не удалось, на узле, который не может стать лидером, запустится процесс автоматической синхронизации. Если параметр biha.autorewind не включён, состояние этого узла изменится на NODE_ERROR.

can_vote (boolean) #

Определяет, может ли узел или сегмент голосовать.

Значение можно задать с помощью функции biha.set_can_vote.

Возможные значения:

  • true (по умолчанию): узел или сегмент может голосовать.

  • false: узел или сегмент не может голосовать, а также не может быть кандидатом на выборах нового лидера.

leader_timeout (integer) #

Определяет максимальную длительность переключения после запуска biha.set_leader, в миллисекундах. Если процесс переключения не завершается в указанный период, узел возвращается в состояние FOLLOWER.

Значение можно задать с помощью функции biha.set_leader_timeout.

Значение по умолчанию: 20000

Минимальное значение: 0

mode (text) #

Указывает режим работы узла или сегмента. Режим задаётся утилитой bihactl, его нельзя изменить после инициализации кластера.

Возможные значения для узла:

  • regular (по умолчанию): узел может быть лидером или последователем.

  • referee: узел может только участвовать в выборах лидера и не содержит никаких пользовательских баз данных.

  • referee_with_wal: узел участвует в выборах лидера также, как и в режиме referee, а также получает полный WAL с лидера.

Возможные значения для сегмента: regular

name (text) #

Указывает имя узла или сегмента. Имя задаётся утилитой bihactl, его нельзя изменить после инициализации кластера.

priority (integer) #

Задаёт приоритет узла или сегмента в секундах, который влияет как на выборы, так и на репликацию в кластере.

Значение можно задать с помощью функции biha.set_priority.

Значение должно быть целым числом больше или равным нулю. Значение 0 означает наивысший приоритет.

Значение по умолчанию: -1, параметр игнорируется.

Примечание

После изменения значения по умолчанию его нельзя снова задать, то есть отключение priority не поддерживается.

BiHA использует этот параметр конфигурации для следующих целей:

  • Задать тайм-аут начала репликации при выборе источника репликации в BiHA-кластере с каскадной репликацией. Чем выше значение, тем позднее узел начинает репликацию и разрешает подключение менее приоритетных узлов. Параметр необходим для того, чтобы узлы кластера могли наладить схему каскадной репликации автоматически.

  • Установить приоритет узла в кластере с синхронной репликацией. Значение определяет тайм-аут, по истечении которого узел предложит себя в качестве кандидата на выборах. Нулевое значение означает самый высокий приоритет.

    Важно

    Чтобы обеспечить корректную работу параметра, установите значение параметра --sync-standbys на единицу меньше общего количества узлов кластера.

repl_pref_roles (text) #

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

Значение можно задать с помощью функции biha.set_pref_roles.

Возможные значения: L (лидер), F (последователь) или R (рефери), или их комбинации. Значение должно содержать от одного до трёх символов, которые не должны повторяться. Например: L, F, LFR или LF.

Значение по умолчанию: L, которое означает, что данные реплицируются с лидера или главного последователя в зависимости от сегмента, в котором расположен узел.

26.4.1.5. Необязательные параметры конфигурации #

Следующие параметры конфигурации являются необязательными и могут быть изменены с помощью команды ALTER SYSTEM SET, например:

ALTER SYSTEM SET biha.autorewind = true;

Значения этих параметров на узлах кластера могут отличаться.

biha.autorewind (boolean) #

Управляет политикой автоматической синхронизации для узла, в отношении которого должен быть выполнен pg_rewind. Например, для старого лидера при его синхронизации с новым лидером. За подробной информацией обратитесь к Автоматическая синхронизация кластера после аварийного переключения.

Возможные значения:

  • false (по умолчанию): автоматическая синхронизация не выполняется.

  • true: автоматическая синхронизация выполняется после ошибки, после которой узел переходит в состояние NODE_ERROR.

biha.autowaltrim (boolean) #

Управляет политикой автоматического выравнивания WAL в рамках одного узла. За подробной информацией обратитесь к Автоматическая синхронизация кластера после аварийного переключения.

Возможные значения:

  • true (по умолчанию): BiHA автоматически планирует и выполняет процедуру выравнивания WAL, если это возможно.

  • false: процедура выравнивания WAL не выполняется, синхронизация кластера проводится с помощью pg_rewind.

biha.wal_validation (boolean) #

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

Возможные значения:

  • true (по умолчанию): валидация WAL включена.

  • false: валидация WAL отключена.

Механизм проверки WAL выполняет следующие действия:

  • Проверяет линии времени. Если в TLI (идентификаторе линии времени) не хватает полных сегментов WAL до точки переключения или вообще нет сегментов, он считается некорректным.

  • Скрывает некорректные линии времени от узлов BiHA. Это не позволяет узлу с большей, но некорректной линией времени стать кандидатом на роль лидера.

  • Перезапускает Postgres Pro в случае несогласованности WAL на повышаемом узле.

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

26.4.1.6. Уровни протоколирования biha #

26.4.1.6.1. Общие уровни протоколирования #

Общие уровни протоколирования используются для компонентов biha, у которых нет специальных уровней протоколирования.

biha.BihaLog_log_level (enum) #

Задаёт уровень протоколирования для предоставления общей информации о работе компонентов biha. Значение по умолчанию — LOG.

biha.BihaWarn_log_level (enum) #

Задаёт уровень протоколирования для предупреждения о возможных ошибках в работе компонентов biha. Значение по умолчанию — WARNING.

biha.BihaDetails_log_level (enum) #

Задаёт уровень протоколирования для предоставления подробной информации о работе компонентов biha. Значение по умолчанию — DEBUG1.

biha.BihaDebug_log_level (enum) #

Задаёт уровень протоколирования для предоставления отладочной информации о работе компонентов biha. Значение по умолчанию — DEBUG2.

biha.BihaDebug2_log_level (enum) #

Задаёт уровень протоколирования для предоставления отладочной информации о работе компонентов biha. Значение по умолчанию — DEBUG3.

26.4.1.6.2. Уровни протоколирования управляющего канала BiHA (BCP) и транспорта #
biha.BcpTransportLog_log_level (enum) #

Задаёт уровень протоколирования для предоставления общей информации о работе управляющего канала. Значение по умолчанию — LOG.

biha.BcpTransportWarn_log_level (enum) #

Задаёт уровень протоколирования для вывода предупреждений о возможных проблемах в канале управления. Значение по умолчанию — WARNING.

biha.BcpTransportDetails_log_level (enum) #

Задаёт уровень протоколирования для предоставления подробной информации о работе управляющего канала. Значение по умолчанию — DEBUG1.

biha.BcpTransportDebug_log_level (enum) #

Задаёт уровень протоколирования для предоставления отладочной информации о работе управляющего канала. Значение по умолчанию — DEBUG2.

26.4.1.6.3. Уровни протоколирования Node Controller #

Следующие уровни протоколирования предоставляют информацию о компоненте Node Controller.

biha.NodeControllerLog_log_level (enum) #

Задаёт уровень протоколирования для предоставления общей информации о работе компонента Node Controller. Значение по умолчанию — LOG.

biha.NodeControllerWarn_log_level (enum) #

Задаёт уровень протоколирования для вывода предупреждений о возможных проблемах компоненте Node Controller. Значение по умолчанию — WARNING.

biha.NodeControllerDetails_log_level (enum) #

Задаёт уровень протоколирования для предоставления подробной информации о работе компонента Node Controller. Значение по умолчанию — DEBUG1.

biha.NodeControllerDebug_log_level (enum) #

Задаёт уровень протоколирования для предоставления отладочной информации о работе компонента Node Controller. Значение по умолчанию — DEBUG2.

biha.NodeControllerDebug2_log_level (enum) #

Задаёт уровень протоколирования для предоставления отладочной информации о работе компонента Node Controller. Значение по умолчанию — DEBUG3.

26.4.1.6.4. Уровни протоколирования Postgres Controller #

Следующие уровни протоколирования предоставляют информацию о компоненте Postgres Controller.

biha.PgControllerLog_log_level (enum) #

Задаёт уровень протоколирования для предоставления общей информации о работе компонента Postgres Controller. Значение по умолчанию — LOG.

biha.PgControllerWarn_log_level (enum) #

Задаёт уровень протоколирования для вывода предупреждений о возможных проблемах в компоненте Postgres Controller. Значение по умолчанию — WARNING.

biha.PgControllerDetails_log_level (enum) #

Задаёт уровень протоколирования для предоставления подробной информации о работе компонента Postgres Controller. Значение по умолчанию — DEBUG1.

biha.PgControllerDebug_log_level (enum) #

Задаёт уровень протоколирования для предоставления отладочной информации о работе компонента Postgres Controller. Значение по умолчанию — DEBUG2.

biha.PgControllerDebug2_log_level (enum) #

Задаёт уровень протоколирования для предоставления отладочной информации о работе компонента Postgres Controller. Значение по умолчанию — DEBUG3.

26.4.1.6.5. Уровни протоколирования Config Controller #

Следующие уровни протоколирования предоставляют информацию о компоненте Config Controller.

biha.BihaConfigLog_log_level (enum) #

Задаёт уровень протоколирования для предоставления общей информации о работе компонента Config Controller. Значение по умолчанию — LOG.

biha.BihaConfigWarn_log_level (enum) #

Задаёт уровень протоколирования для вывода предупреждений о возможных проблемах в компоненте Config Controller. Значение по умолчанию — WARNING.

biha.BihaConfigDetails_log_level (enum) #

Задаёт уровень протоколирования для предоставления подробной информации о работе компонента Config Controller. Значение по умолчанию — DEBUG1.

biha.BihaConfigDebug_log_level (enum) #

Задаёт уровень протоколирования для предоставления отладочной информации о работе компонента Config Controller component. Значение по умолчанию — DEBUG2.

biha.BihaConfigDebug2_log_level (enum) #

Задаёт уровень протоколирования для предоставления отладочной информации о работе компонента Config Controller. Значение по умолчанию — DEBUG3.

26.4.2. Функции #

Все перечисленные ниже функции необходимо вызывать из базы данных biha_db, например:

biha_db=# SELECT biha.add_node(222, 1111);

Если иное не указано в описании функции, функция должна вызываться на лидере.

26.4.2.1. Состав кластера #

biha.add_node (id integer, идентификатор_родительского_узла integer) → boolean #

Добавляет сегмент в кластер GDBiHA. Если не указать идентификатор_родительского_узла, по умолчанию в качестве родительского узла будет назначен узел с идентификатором 1111. За подробной информацией обратитесь к Подразделу 26.3.1.

Например, добавьте сегмент с идентификатором 222 в кластер с идентификатором 1111:

biha_db=# SELECT biha.add_node(222, 1111);
 add_node
-------------
 t
(1 row)
 
biha.set_leader (id integer, режим string) → boolean #

Устанавливает лидера, главного последователя или лидер-сегмент вручную. За подробной информацией о процедуре ручного переключения обратитесь к Ручное переключение узлов.

Примечание

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

Поддерживаются следующие режимы переключения:

  • graceful (по умолчанию): повышаемый узел ожидает понижения старого лидера или главного последователя и при необходимости догоняет его по записям WAL.

  • immediate: переключение происходит немедленно, без ожидания. Состояние узла с указанным идентификатором сразу меняется на LEADER_RW/LEADER_RO или FRONT_FOLLOWER, пропуская состояние FOLLOWER_OFFERED. В этом режиме функция-обработчик LEADER_CHANGE_STARTED не вызывается. Если на текущем лидере или главном последователе выполняется команда в режиме immediate, его состояние сразу меняется на FOLLOWER и собщение о смене лидера передаётся на другие узлы.

    Важно

    Режим immediate небезопасен, так как может привести к потере данных. Перед переключением в этом режиме рекомендуется включить автоматическую синхронизацию, задав для параметра конфигурации biha.autorewind значение true.

Например, назначьте узел с идентификатором 2 новым лидером в режиме immediate:

biha_db=# SELECT biha.set_leader(2, 'immediate');
 set_leader
-------------
 t
(1 row)
biha.set_leader_timeout (id integer,значение_тайм_аута integer) → boolean #

Задаёт значение параметра конфигурации leader_timeout.

Функцию biha.set_leader_timeout можно вызвать для отдельного физического узла или сегмента в зависимости от указанного идентификатора. При вызове функции для сегмента значение времени ожидания переключения применяется ко всем узлам в рамках сегмента.

Например, чтобы установить время ожидания 10000 мс для всех узлов в сегменте 222, выполните:

biha_db=# SELECT * FROM biha.set_leader_timeout(222, 10000);
 set_leader_timeout
-------------
 t
(1 row)
biha.remove_node (id integer) → boolean #

Удаляет узел или сегмент из кластера. Перед удалением узел необходимо остановить. Если узел является родительским для другого узла, удалить его нельзя. За подробной информацией об изменении состава кластера обратитесь к Подразделу 26.3.1.

Например, удалите узел с идентификатором 4:

biha_db=# SELECT biha.remove_node(3);
 remove_node
-------------
 t
(1 row)

26.4.2.2. Конфигурирование кластера #

biha.config () → setof record #

Возвращает значения параметров конфигурации для каждого узла и сегмента. Наиболее критичные параметры конфигурации можно также посмотреть с помощью представления Подраздел 26.4.3.1.

Отображаются следующие параметры:

  • id: идентификатор узла (integer).

  • nquorum: текущее значение nquorum (integer).

  • minnodes: текущее значение minnodes (integer).

  • heartbeat_send_period: текущее значение heartbeat_send_period (integer).

  • heartbeat_max_lost: текущее значение heartbeat_max_lost (integer).

  • no_wal_on_follower: текущее значение no_wal_on_follower (integer).

  • sync_standbys_min: текущее значения поля MIN параметра synchronous_standby_names (integer).

  • priority: текущее значение priority (integer).

  • can_be_leader: текущее значение can_be_leader (boolean).

  • can_vote: текущее значение can_vote (boolean).

  • mode: текущее значение mode (text).

  • proxima_enabled: текущий статус proxima, если расширение поддерживается текущей версией Postgres Pro Standard (integer).

  • name: имя узла (text).

  • repl_pref_roles: предпочтительные роли узлов для репликации, заданные в параметре конфигурации repl_pref_roles (text).

  • max_replicas: максимальное число репликационных подключений к узлу, заданное в параметре конфигурации max_replicas (integer).

  • config_version: текущая версия конфигурации pg_biha/biha_conf_версия_конфигурации.json (integer).

  • parent_id: уникальный идентификатор узла, который является родительским для текущего узла (integer).

  • service_mode: текущее значение service_mode (boolean).

  • unit_type: тип юнита. Возможные значения: NODE, SEGMENT.

  • deny_wal_sources: текущее значение deny_wal_sources (string).

  • biha_hosts: текущее значение biha_hosts (string).

  • replication_hosts: текущее значение replication_hosts (string).

  • sql_hosts: текущее значение sql_hosts (string).

  • leader_timeout: текущее значение leader_timeout (integer).

  • use_ssl: текущее значение use_ssl (boolean).

  • ssl_certificate: текущее значение ssl_certificate (text).

  • ssl_private_key: текущее значение ssl_private_key (text).

  • user_cert: текущее значение user_biha_cert (text).

  • user_key: текущее значение user_biha_key (text).

  • ssl_mode: текущее значение ssl_mode (text).

  • flw_ro: текущее значение flw_ro (boolean).

  • callbacks_timeout: текущее значение callbacks_timeout (integer).

  • watchdog_timeout: текущее значение watchdog_timeout (integer).

  • asyncaction_timeout: текущее значение asyncaction_timeout (integer).

  • manage_slots_xmin: текущее значение manage_slots_xmin (boolean).

  • config_send_period: текущее значение config_send_period (integer).

Например, вызовите функцию biha.config для узла с идентификатором 1:

biha_db=# select * from biha.config() where id = 1 \gx
  -[ RECORD 1 ]---------+--------------------------
  id                    | 1
  nquorum               | 3
  minnodes              | 1
  heartbeat_send_period | 1000
  heartbeat_max_lost    | 10
  no_wal_on_follower    | 20000
  sync_standbys_min     | -2
  priority              | -1
  can_be_leader         | t
  can_vote              | t
  mode                  | regular
  proxima_enabled       | f
  name                  | biha_node_1
  repl_pref_roles       | L
  max_replicas          | 2147483647
  config_version        | 12
  parent_id             | 111
  service_mode          | f
  unit_type             | NODE
  deny_wal_sources      |
  biha_hosts            | biha-db-1:5433,biha-proxy:8081
  replication_hosts     | biha-db-1:5432,postgres-proxy:8081
  sql_hosts             |
  leader_timeout        | 20000
  use_ssl               | f
  ssl_certificate       | pg_biha/biha_pub_cert.pem
  ssl_private_key       | pg_biha/biha_priv_key.pem
  user_cert             |
  user_key              |
  ssl_mode              |
  flw_ro                | t
  callbacks_timeout     | 10000
  watchdog_timeout      | 2
  asyncaction_timeout   | 30000
  manage_slots_xmin     | t
  config_send_period    | 10000
biha.config_json () → setof record #

Возвращает конфигурационный файл в формате JSON. Чтобы увидеть содержимое ветви конфигурационного дерева JSON, используйте функцию biha.get_option.

Например:

biha_db=# select biha.config_json();
                      config_json
-------------------------------------------------------
 {                                                    +
     "unit": {                                        +
         "id": 1111,                                  +
         "mode": "regular",                           +
         "name": "biha_node_1111",                    +
         "nquorum": 1,                                +
         "can_vote": true,                            +
         "children": [                                +
             {                                        +
                 "id": 111,                           +
...
     "proxima_enabled": false,                        +
     "ssl_certificate": "pg_biha/biha_pub_cert.pem",  +
     "ssl_private_key": "pg_biha/biha_priv_key.pem",  +
     "synchronous_standby_names": {                   +
         "min": -2,                                   +
         "count": -1,                                 +
         "names": [                                   +
         ]                                            +
     }                                                +
}
(1 row)
biha.get_option (json_path text) → setof record #

Возвращает содержимое ветви конфигурационного дерева JSON по указанному JSON-пути. Чтобы увидеть весь конфигурационный файл JSON, используйте функцию biha.config_json.

Например:

biha_db=# select biha.get_option('$.unit.children.[0].children.[1].biha_listen_addresses.[0].address');
 get_option
------------
 "node-3"
(1 row)
biha.set_config_send_period (id integer, config_send_period integer) → boolean #

Задаёт значение параметра конфигурации config_send_period.

26.4.2.3. Мониторинг кластера #

biha.error_details () → setof record #

Возвращает описание причины, по которой узел перешёл в состояние NODE_ERROR. Возвращаемая запись содержит тип ошибки, подробную информацию о ней, место возникновения с указанием begin_lsn, end_lsn и идентификаторов текущей и следующей линии времени, а также replay_lsn.

Например:

biha_db=# \x
biha_db=# SELECT * FROM biha.error_details();
-[ RECORD 1 ]--+-------------------------------------------------------------------------------------                 │
type           | TIMELINE_ERROR                                                                                       │
details        | Timeline divergence detected: current timeline ended before replayLSN, rewind needed                 │
next_tli       | 3                                                                                                    │
next_begin_lsn |                                                                                                      │
next_end_lsn   |                                                                                                      │
cur_tli        | 2                                                                                                    │
cur_begin_lsn  | 0/17F53A0                                                                                            │
cur_end_lsn    | 0/3455FC8                                                                                            │
replay_lsn     | 0/34593B8
biha.monitoring () → setof record #

Отображает таблицу, которая содержит данные мониторинга текущего статуса узлов кластера. Таблица содержит следующие столбцы:

  • id: уникальный идентификатор узла.

  • time: время получения данных мониторинга.

  • biha_state: текущее состояние узла. За подробной информацией о возможных состояниях обратитесь к biha.status_v.

  • pg_state: текущее состояние Postgres Pro. Возможные значения: Prestartup, Startup, Recovery, Recovery_Pause, Promoting, Promoted.

  • online: показывает, в сети ли узел.

  • startup_progress: показывает прогресс запуска в процентах, когда значение pg_stateStartup.

Например:

biha_db=# select * from biha.monitoring();
 id |          time          |   biha_state   | pg_state | online | startup_progress
----+------------------------+----------------+----------+--------+-----------------
  3 | 2025-09-02 13:49:57+03 | LEADER_RW      | Promoted | t      |
  1 | 2025-09-02 13:49:57+03 | CSTATE_FORMING | Startup  | t      |               81
  2 | 2025-09-02 13:49:57+03 | FOLLOWER       | Recovery | t      |
(3 rows)
biha.nodes () → setof record #

Выводит состояние транспортного канала BiHA текущего узла по отношению к другим узлам и определяет представление biha.nodes_v, подробно описанное в biha.nodes_v.

Функция выводит таблицу со следующими столбцами:

  • id: идентификатор узла.

  • host: хост узла.

  • port: порт узла.

  • state: состояние подключения узла. Столбец может содержать одно из следующих значений:

    • ACTIVE: есть активные клиентские подключения к узлу. В этом состоянии выполняются операции на чтение и запись.

    • CONNECTING: попытка установить клиентское соединение с узлом.

    • IDLE: узел находится в состоянии пассивного ожидания.

    • INIT: инициализация клиентского соединения.

    • SSLCONNECT: попытка установить защищённое соединение. Это состояние отображается только при включённом SSL.

    • SSLACCEPT: попытка принять защищённое соединение. Это состояние отображается только при включённом SSL.

  • conn_start: время начала подключения.

  • conn_count: количество подключений к узлу с момента запуска кластера.

Например:

biha_db=# SELECT * FROM biha.nodes();
 id |   host    | port  | state  |       conn_start       | conn_count
----+-----------+-------+--------+------------------------+------------
  1 | localhost | 10001 | ACTIVE | 2023-07-05 17:17:17+07 |          1
  2 | localhost | 10002 |        |                        |
  5 | localhost | 10005 | ACTIVE | 2023-07-05 17:17:17+07 |          1
  3 | localhost | 10003 | ACTIVE | 2023-07-05 17:17:17+07 |          1
  4 | localhost | 10004 | ACTIVE | 2023-07-05 17:17:17+07 |          1
(4 rows)
biha.status () → setof record #

Определяет представление biha.status_v, подробно описанное в biha.status_v. Использовать эту функцию не рекомендуется , так как она предоставляет необработанные данные для представления.

26.4.2.4. Репликация #

Следующие функции используются для настройки репликации и управления ею.

biha.add_to_ssn (id integer) → boolean #

Примечание

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

Добавляет указанный узел в список синхронных резервных параметра synchronous_standby_names.names. Необходимо указывать узел, имени которого ещё нет в списке.

Например:

biha_db=# SELECT biha.add_to_ssn(3);
 add_to_ssn
-------------
 t
(1 row)
biha.get_ssn () → varchar #

Отображает текущее значение параметра synchronous_standby_names.

Например:

biha_db=# SELECT biha.get_ssn();
                   get_ssn
---------------------------------------------
 ANY 1 (biha_node_1,biha_node_2,biha_node_3)
(1 row)
biha.set_deny_wal_sources (id integer, запрещённые_идентификаторы integer[]) → boolean #

Задаёт значение параметра конфигурации deny_wal_sources для указанного узла или сбрасывает существующее значение.

Массив запрещённых_идентификаторов должен соответствовать следующим требованиям:

Например, чтобы запретить репликацию узла с идентификатором 3 с узла с идентификатором 1, выполните:

biha_db=# SELECT biha.set_deny_wal_sources(3, ARRAY[1]);
 set_deny_wal_sources
--------------
 t
(1 row)

Чтобы сбросить значение параметра и установить пустое значение, вызовите функцию с пустым массивом.

biha.set_max_replicas (id integer, max_replicas_num integer) → boolean #

Задаёт значение параметра конфигурации max_replicas.

Например, для узла с идентификатором 1 настройте максимум 3 реплики:

biha_db=# SELECT biha.set_max_replicas(1, 3);
 set_max_replicas
------------------
 t
(1 row)
biha.set_pref_roles (идентификатор_узла integer, значение text) → boolean #

Задаёт значение параметра конфигурации repl_pref_roles.

Например:

biha_db=# SELECT biha.set_pref_roles(1, 'LFR');
 set_pref_roles
----------------
 t
(1 row)
biha.set_priority (идентификатор_узла integer, значение integer) → boolean #

Задаёт значение параметра конфигурации priority.

Например:

biha_db=# SELECT biha.set_priority(1, 10);
 set_priority
--------------
 t
(1 row)
biha.remove_from_ssn (id integer) → boolean #

Примечание

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

Удаляет указанный узел из списка синхронных резервных узлов параметра synchronous_standby_names.names. Необходимо указать узел, имя которого уже есть в списке.

Например:

biha_db=# SELECT biha.remove_from_ssn(3);
  remove_from_ssn
-------------
 t
(1 row)
biha.set_ssn (VARIADIC ids integer[]) → boolean #

Примечание

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

Задаёт значение параметра конфигурации synchronous_standby_names.names.

Например:

biha_db=# SELECT biha.set_ssn(1, 2, 3);
 set_ssn
---------
 t
(1 row)
biha.set_sync_standbys (sync_standbys_count integer) → boolean #

Задаёт значение параметра конфигурации synchronous_standby_names.count.

Важно

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

Например:

biha_db=# SELECT biha.set_sync_standbys(1);
 set_sync_standbys
-------------------
 t
(1 row)
biha.set_sync_standbys_min (sync_standbys_min_count integer) → boolean #

Примечание

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

Задаёт значение параметра конфигурации synchronous_standby_names.min.

С помощью этой функции можно также управлять нестрогой кворумной синхронной репликацией. Чтобы отключить нестрогую кворумную синхронную репликацию, задайте значение -1.

Например:

biha_db=# SELECT biha.set_sync_standbys_min(1);
 set_sync_standbys_min
-----------------------
 f
(1 row)

26.4.2.5. Выборы и кворум #

biha.set_minnodes (id integer, minnodes integer) → boolean #

Задаёт значение minnodes. Если идентификатор_узла — физический узел, значение biha.minnodes задаётся для сегмента, в котором узел расположен. Если идентификатор_узла — сегмент, значение задаётся для текущего сегмента и расположенных в нём узлов. Можно задать разные значения для каждого сегмента.

Например:

  biha_db=# SELECT biha.set_minnodes(3, 1);
   set_minnodes
  --------------------------
   t
  (1 row)
  
biha.set_nquorum (id integer, nquorum integer) → boolean #

Задаёт значение nquorum. Если идентификатор_узла — физический узел, значение biha.nquorum задаётся для сегмента, в котором узел расположен. Если идентификатор_узла — сегмент, значение задаётся для текущего сегмента и расположенных в нём узлов. Для каждого сегмента можно задать разные значения.

Например:

  biha_db=# SELECT biha.set_nquorum(3, 3);
   set_nquorum
  --------------------------
   t
  (1 row)
  
biha.set_nquorum_and_minnodes (id integer, nquorum integer, minnodes integer) → boolean #

Задаёт значения параметров nquorum и minnodes. Если node_id — физический узел, значения nquorum и minnodes задаются для сегмента, в котором узел расположен. Если node_id — сегмент, значения задаются для текущего сегмента и расположенных в нём узлов. Для каждого сегмента можно задать разные значения.

Например:

  biha_db=# SELECT biha.set_nquorum_and_minnodes(3, 3, 1);
   set_nquorum_and_minnodes
  --------------------------
   t
  (1 row)
  
biha.set_can_be_leader (id integer, can_be_leader boolean) → boolean #

Задаёт значение параметра конфигурации can_be_leader.

Например, чтобы разрешить узлу с идентификатором 4 стать кандидатом на роль лидера, выполните:

biha_db=# SELECT biha.set_can_be_leader(4,true);
 set_can_be_leader
--------------
 t
(1 row)
biha.set_can_vote (id integer, can_vote boolean) → boolean #

Задаёт значение параметра конфигурации can_vote.

Например, чтобы разрешить узлу с идентификатором 4 голосовать, выполните:

biha_db=# SELECT biha.set_can_vote(4,true);
 set_can_vote
--------------
 t
(1 row)

26.4.2.6. Настройка сети #

biha.config_network () → setof record #

Выводит текущие значения сетевых параметров конфигурации. В выводе значение biha_listen_addresses отображается для других сетевых параметров конфигурации, если их значения не были заданы.

Например:

  biha_db=# select * from biha.config_network();
    id | biha_listen_addresses | biha_hosts | biha_port | replication_hosts | sql_hosts | port
   ----+-----------------------+------------+-----------+-------------------+-----------+------
     1 | biha-db-1             | biha-db-1  |      5433 | biha-db-1         | biha-db-1 | 5432
     2 | biha-db-2             | biha-db-2  |      5433 | biha-db-2         | biha-db-2 | 5432
     3 | biha-db-3             | biha-db-3  |      5433 | biha-db-3         | biha-db-3 | 5432
     4 | biha-db-4             | biha-db-4  |      5433 | biha-db-4         | biha-db-4 | 5432
     5 | biha-db-5             | biha-db-5  |      5433 | biha-db-5         | biha-db-5 | 5432
  (5 rows)
  
biha.set_biha_hosts (id integer, VARIADIC biha_hosts text[]) → boolean #

Задаёт значение параметра конфигурации biha_hosts.

Например:

biha_db=# select biha.set_biha_hosts(1, 'biha-1:8080', 'biha-p', 'biha-2222:3333');
 set_biha_hosts
----------------
 t
(1 row)
biha.set_sql_hosts (id integer, VARIADIC sql_hosts text[]) → boolean #

Задаёт значение параметра конфигурации sql_hosts.

Например:

biha_db=# select biha.set_sql_hosts(1, 'bha-1:8080', 'bha-p', 'bha-2222:3333');
 set_sql_hosts
----------------
 t
(1 row)
biha.set_replication_hosts (id integer, VARIADIC replication_hosts text[]) → boolean #

Задаёт значение параметра конфигурации replication_hosts.

Например:

biha_db=# select biha.set_replication_hosts(1, 'bha-1:8080', 'bha-p', 'bha-2222:3333');
 set_replication_hosts
-----------------------
 t
(1 row)

26.4.2.7. Настройка безопасности #

biha.set_ssl_certificate (text) → boolean #

Задаёт значение параметра конфигурации ssl_certificate

Например:

biha_db=# SELECT biha.set_ssl_certificate('/tmp/install/share/extension/biha_pub_cert.pem');
WARNING:  [BiHA] this parameter takes effect after node restart
 set_ssl_certificate
---------------------
 t
(1 row)
biha.set_ssl_mode (text) → boolean #

Задаёт значение параметра конфигурации ssl_mode.

Например:

biha_db=# SELECT biha.set_ssl_mode('verify-full');
WARNING:  [BiHA] this parameter takes effect after node restart
 set_ssl_mode
--------------
 t
(1 row)
biha.set_ssl_private_key (text) → boolean #

Задаёт значение параметра конфигурации ssl_private_key.

Например:

biha_db=# SELECT biha.set_ssl_private_key('/tmp/install/share/extension/biha_priv_key.pem');
WARNING:  [BiHA] this parameter takes effect after node restart
 set_ssl_private_key
---------------------
 t
(1 row)
biha.set_user_cert (text) → boolean #

Задаёт значение параметра конфигурации user_biha_cert.

Например:

biha_db=# SELECT biha.set_user_cert('/tmp/install/share/extension/biha_pub_cert.pem');
WARNING:  [BiHA] this parameter takes effect after node restart
 set_user_cert
---------------
 t
(1 row)
biha.set_user_key (text) → boolean #

Задаёт значение параметра конфигурации user_biha_key.

Например:

biha_db=# SELECT biha.set_user_key('/tmp/install/share/extension/biha_priv_key.pem');
WARNING:  [BiHA] this parameter takes effect after node restart
 set_user_key
--------------
 t
(1 row)
biha.set_use_ssl (boolean) → boolean #

Задаёт значение параметра конфигурации use_ssl.

Например:

biha_db=# SELECT biha.set_use_ssl(true)
WARNING:  [BiHA] this parameter takes effect after node restart
 set_use_ssl
-------------
 t
(1 row)

26.4.2.8. Управление функциями-обработчиками #

biha.set_callbacks_timeout (идентификатор_узла integer, значение_тайм_аута integer) → boolean #

Задаёт значение параметра конфигурации callbacks_timeout.

biha.register_callback (event text, function text, база_данных text, executor text, приоритет integer) → integer #

Добавляет новый обработчик и возвращает его уникальный идентификатор. Функцию можно вызвать только на лидере в состоянии LEADER_RW. Новый обработчик будет реплицирован на последователей.

Примечание

Со стороны biha нет проверки наличия функции func в базе данных database. Если указанная функция не существует, исполнение обработчика завершится ошибкой.

Пример использования biha.register_callback см. в Регистрация функций-обработчиков.

Таблица 26.3. Определения переменных

ИмяТипОписание
eventtextСобытие в BiHA-кластере, которое запускает функцию-обработчик. Подробнее о событиях и соответствующих типах функций-обработчиков читайте в Типы обработчиков.
functiontextНазвание SQL-функции, которую расширение biha исполняет при наступлении события event. Функция должна находиться в базе данных database, иначе она не будет исполнена.
база_данныхtextБаза данных, в которой исполняется функция func.
executortext

Пользователь, от имени которого исполняется функция func. Это необязательный параметр. Значение по умолчанию — biha_callbacks_user.

приоритетintegerЧем ниже значение, тем раньше исполнится обработчик. Это необязательный параметр. Значение по умолчанию — 0.

biha.unregister_callback(callback_id) #

Удаляет обработчик. Функцию можно вызвать только на лидере в состоянии LEADER_RW. Пример использования функции biha.unregister_callback см. в разделе Отмена регистрации функции-обработчика.

26.4.2.9. Прочие функции #

biha.get_magic_string() → string #

Генерирует «‎‎магическую» строку для узла кластера. Например:

biha_db=# SELECT biha.get_magic_string();
                          get_magic_string
----------------------------------------------------------------------
 dmVyc2lvbj0xIGhvc3Q9bG9jYWxob3N0IHBvcnQ9NjU0MzIgYmloYS1wb3J0PTEwMDAx
(1 row)
biha.set_asyncaction_timeout (id integer, значение_тайм_аута integer) → boolean #

Задаёт значение параметра конфигурации asyncaction_timeout.

Например:

biha_db=# SELECT biha.set_asyncaction_timeout(1, 50000);
 set_asyncaction_timeout
-------------------------
 t
(1 row)
biha.set_flw_ro (id integer, available_for_read_only boolean) → boolean #

Задаёт значение параметра конфигурации flw_ro.

Например:

biha_db=# SELECT biha.set_flw_ro(1, true);
 set_flw_ro
------------
 t
(1 row)
biha.set_manage_slots_xmin (id integer, manage_slots_xmin boolean) → boolean #

Задаёт значение параметра конфигурации manage_slots_xmin.

biha.service_mode (enable_service_mode boolean, force boolean) → boolean #

Включает сервисный режим в BiHA-кластере. Эту функцию можно вызвать только на лидере. Функция принимает следующие параметры:

  • enable: если задано значение true, сервисный режим включён. Если задано значение false, сервисный режим отключён. Значение по умолчанию — false.

  • force: если задано значение true, позволяет отключить сервисный режим, игнорируя ошибки. Если значение не задано или false, сервисный режим нельзя отключить до разрешения всех ошибок. Значение по умолчанию — false.

biha.set_heartbeat_max_lost (integer) → boolean #

Задаёт значение параметра конфигурации heartbeat_max_lost.

Например:

biha_db=# SELECT biha.set_heartbeat_max_lost(7);
 set_heartbeat_max_lost
-------------
 t
(1 row)
biha.set_heartbeat_send_period (integer) → boolean #

Задаёт значение параметра heartbeat_send_period в миллисекундах.

Например:

biha_db=# SELECT biha.set_heartbeat_send_period(2000);
 set_heartbeat_send_period
-------------
 t
(1 row)
biha.set_no_wal_on_follower (integer) → boolean #

Задаёт значение параметра конфигурации no_wal_on_follower.

Например:

biha_db=# SELECT biha.set_no_wal_on_follower(10000);
 set_no_wal_on_follower
------------------------
 t
(1 row)
biha.set_watchdog_timeout (id integer, значение_тайм_аута integer) → boolean #

Задаёт значение параметра конфигурации watchdog_timeout.

Например:

biha_db=# SELECT biha.set_watchdog_timeout(1, 10);
WARNING:  [BiHA] this parameter takes effect after node restart
 set_watchdog_timeout
----------------------
 t
(1 row)
biha.reset_node_error () → boolean #

Сбрасывает состояние NODE_ERROR на узле. Используйте эту функцию после того, как устранена причина перехода узла в состояние NODE_ERROR. За подробной информацией обратитесь к разделу Восстановление узла из состояния NODE_ERROR.

26.4.3. Представления #

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

26.4.3.1. biha.config_v #

В этом представлении выводятся наиболее критичные параметры, возвращаемые функцией biha.config.

Например:

biha_db=# select * from biha.config_v;
  id  | unit_type |      name      | parent_id |  mode   | nquorum | minnodes | heartbeat_send_period | heartbeat_max_lost
------+-----------+----------------+-----------+---------+---------+----------+-----------------------+--------------------
    1 | NODE      | biha_node_1    |       111 | regular |       3 |        1 |                  1000 |                 10
    3 | NODE      | biha_node_3    |       111 | regular |       3 |        1 |                  1000 |                 10
    4 | NODE      | biha_node_4    |       111 | regular |       3 |        1 |                  1000 |                 10
  111 | SEGMENT   | biha_node_111  |      1111 | regular |       1 |        1 |                  1000 |                 10
 1111 | SEGMENT   | biha_node_1111 |           | regular |       1 |        1 |                  1000 |                 10
(5 rows)

Таблица 26.4. Представление biha.config_v

Имя столбцаОписание
idИдентификатор узла (integer).
unit_typeТип узла. Возможные значения: NODE, SEGMENT.
nameИмя узла (text).
parent_idУникальный идентификатор узла, который является родительским для текущего (integer).
modeТекущее значение mode (text)
nquorumТекущее значение nquorum (integer).
minnodesТекущее значение minnodes (integer).
heartbeat_send_periodТекущее значение heartbeat_send_period (integer).
heartbeat_max_lostТекущее значение heartbeat_max_lost (integer).

26.4.3.2. biha.nodes_v #

В этом представлении показывается состояние подключения узлов в кластере. Для узла, на котором выполняется запрос для представления, следующие столбцы содержат NULL: state, since_conn_start, conn_count.

Например:

biha_db=# SELECT * FROM biha.nodes_v;
 id |   host    | port  | state  | since_conn_start | conn_count
----+-----------+-------+--------+------------------+------------
  1 | localhost | 10001 | ACTIVE | 00:02:28.42069   |          1
  2 | localhost | 10002 |        |                  |
  3 | localhost | 10003 | ACTIVE | 00:02:23.42069   |          1
  4 | localhost | 10004 | ACTIVE | 00:02:23.42069   |          1
  5 | localhost | 10005 | ACTIVE | 00:02:23.42069   |          1
(4 rows)

Таблица 26.5. Представление biha.nodes_v

Имя столбцаОписание
idИдентификатор узла.
hostАдрес узла.
portПорт узла.
stateСостояние соединения узла. В этом столбце может отображаться одно из следующих значений:
  • ACTIVE: есть активные клиентские подключения к узлу. В этом состоянии выполняются операции на чтение и запись.

  • CONNECTING: попытка установить клиентское соединение с узлом.

  • IDLE: узел находится в состоянии пассивного ожидания.

  • INIT: инициализация клиентского соединения.

  • SSLCONNECT: попытка установить защищённое соединение. Это состояние отображается только при включённом SSL.

  • SSLACCEPT: попытка принять защищённое соединение. Это состояние отображается только при включённом SSL.

since_conn_startВремя, прошедшее с момента подключения узла к сети.
conn_countСколько раз узел подключался к сети с момента запуска кластера.

26.4.3.3. biha.status_v #

В этом представлении показывается состояние узлов в кластере.

Например:

biha_db=# SELECT * FROM biha.status_v;
 id | leader_id | term | online |   state   | last_known_state |  since_last_hb
----+-----------+------+--------+-----------+------------------+-----------------
  1 |         1 |    4 | t      | LEADER_RW | LEADER_RW        |
  2 |         1 |    4 | t      | FOLLOWER  | FOLLOWER         | 00:00:01.931472
  3 |         1 |    4 | f      | UNKNOWN   | FOLLOWER         | 00:00:18.931472
  4 |         1 |    4 | t      | FOLLOWER  | FOLLOWER         | 00:00:01.931472
  5 |         1 |    4 | t      | FOLLOWER  | FOLLOWER         | 00:00:01.931472
(5 rows)

Таблица 26.6. Представление biha.status_v

Имя столбцаОписание
idИдентификатор узла (integer).
leader_idИдентификатор узла-лидера (integer).
termПоколение узла (integer). Используется при голосовании на выборах нового узла-лидера.
onlineПоказывает, подключён ли узел к сети (boolean: t или f).
state

Состояние узла (text). В этом столбце может отображаться одно из следующих значений:

  • PRESTARTUP: начальное состояние узла при запуске BiHA-кластера. Узел отправляет сообщения о контроле состояния и запускает pg_rewind, если это было запланировано. В других случаях узел переходит в состояние STARTUP.

  • STARTUP: узел ожидает, пока процесс запуска Postgres Pro достигнет точки согласованности.

  • CSTATE_FORMING: узел получает и отправляет сообщения о контроле состояния, чтобы определить, в какое состояние он должен перейти.

  • LEADER_RO: узел является лидером, доступным только для операций чтения.

  • LEADER_RW: узел является лидером, доступным для операций на чтение и запись.

  • FOLLOWER: узел является последователем, т.е. репликой лидера. Если can_be_leader и can_vote имеют значение true, последователь может быть избран новым лидером.

  • FRONT_FOLLOWER: узел является главным последователем своего сегмента. За подробной информацией о сегментах и главном последователе обратитесь к Подразделу 26.1.5.3.

  • FOLLOWER_OFFERED: узел был вручную назначен новым лидером с помощью функции biha.set_leader. В этом состоянии назначенный лидером узел получает недостающие данные со старого лидера.

  • CANDIDATE: узел предложил себя в качестве кандидата на выборах нового лидера.

  • REFEREE: узел является рефери кластера. Это единое состояние для режимов referee и referee_with_wal.

  • NODE_ERROR: узел в нерабочем состоянии из-за ошибки. Узлы в этом состоянии не могут голосовать на выборах. Чтение с таких узлов запрещено. Чтобы получить больше информации об ошибке, используйте функцию biha.error_details. О восстановлении дефектных узлов читайте в разделе Восстановление узла из состояния NODE_ERROR.

  • UNKNOWN: узел недоступен для текущего узла.

last_known_stateПоследнее известное состояние узла (text).
since_last_hbВремя, прошедшее с момента получения последнего сообщения о контроле состояния (interval).

26.4.3.4. biha.super_status_v #

Расширенная версия представления biha.status_v, которая дополнительно отображает данные для кластера GDBiHA.

Представление biha.super_status_v содержит следующие дополнительные столбцы:

  • name: имя узла (text).

  • unit_type: тип юнита. Возможные значения: NODE, SEGMENT.

  • parent_id: уникальный идентификатор узла, который является родительским для текущего узла (integer).

  • segment_name: имя сегмента, к которому принадлежит узел (text).

FAQ