bihactl

bihactl — создать BiHA-кластер в Postgres Pro

Синтаксис

bihactl cluster init [параметр...] --biha-listen-addresses --pgdata

bihactl cluster status [параметр...]

bihactl cluster show-config [параметр...]

bihactl node add [параметр...] --biha-node-id --pgdata { --use-leader | --magic-file | --magic-string }

bihactl node set front-follower [параметр...] --id { --magic-file | --magic-string }

bihactl node set leader [параметр...] --id { --magic-file | --magic-string }

bihactl run [параметр...]

bihactl segment add [параметр...] { --use-leader | --magic-file | --magic-string }

bihactl segment set leader [параметр...] --id { --magic-file | --magic-string }

bihactl unit set leader [параметр...] --id { --magic-file | --magic-string }

bihactl upgrade start [параметр...] { --magic-string | --new-leader-biha-port | --new-leader-host | --new-leader-port | --new-pgdata | --old-bin | --old-pgdata | --subscriber-username }

bihactl upgrade move { --new-magic-string | --new-pgdata | --old-bin | --old-pgdata }

bihactl upgrade finish [параметр...] { --new-magic-string | --subscriber-username }

bihactl --version

bihactl --help

Описание

bihactl — это утилита командной строки, которая позволяет создать BiHA-кластер, изменять его состав, а также отслеживать статус кластера. За подробной информацией о решении BiHA обратитесь к главе Встроенная отказоустойчивость (BiHA).

Важно

bihactl для Postgres Pro Standard не поддерживается на архитектуре процессоров Эльбрус.

Примечание

bihactl не поддерживает использование знака равенства с include_dir в конфигурационном файле postgresql.conf. Для корректной работы используйте документированный синтаксис.

В этом разделе содержится информация о командах утилиты bihactl:

Узел-последователь можно добавить с использованием «‎‎магической» строки, сохранённой после выполнения команды bihactl cluster init, передав в команде bihactl node add параметр -s.

Справка по командной строке #

cluster init #

Синтаксис:

bihactl cluster init [--biha-hosts=хосты]
                     --biha-listen-addresses=адреса
                     [--biha-node-id=идентификатор_узла]
                     [--biha-port=порт_biha]
                     [--cluster-name=имя_кластера]
                     [--convert  [--server-cert=/путь/к/сертификату_сервера \
                     --server-key=/путь/к/ключу_сервера]]
                     [--magic-file=файл_с_магической_строкой]
                     [--max-replicas=макс_число_реплик]
                     [--minnodes=мин_число_узлов]
                     [--node-name=имя_узла]
                     [--no-password]
                     [--nquorum=значение_кворума]
                     [--options=параметры_initdb]
                     --pgdata=каталог_данных
                     [--pg-port=порт]
                     [--preferred-roles=предпочтительные_роли_для_репликации]
                     [--priority=приоритет_узла]
                      [--replication-hosts=хосты_для_репликации]
                     [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                     --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]] \
                     [--sync-standbys=число_синхронных_ведомых_узлов [--sync-standbys-min=мин_число_синхронных_ведомых_узлов]]
                    [--sql-hosts=хосты_для_sql]
                     [--use-ssl]
                     [--username=имя_начального_суперпользователя]

Инициализирует кластер и задаёт узел-лидер. Команду нужно выполнять на сервере, где будет размещён лидер. При выполнении этой команды bihactl запускает утилиту initdb. На этом этапе также можно указать необходимые параметры этой утилиты при помощи флага -o.

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

-I id_узла
--biha-node-id=id_узла #

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

--cluster-name=имя_кластера #

Указывает имя BiHA-кластера. Имя по умолчанию — biha_node_1111.

-C
--convert #

Преобразовывает существующий узел в узел-лидер BiHA-кластера. Если имя начального суперпользователя на существующем узле отличается от postgres, укажите это имя с помощью параметра --username.

--max-replicas=макс_число_реплик #

Указывает максимальное число репликационных подключений biha к узлу, т.е. максимальное число процессов walsender, где в качестве application_name указано biha_node_*.

Возможные значения: 0, INT_MAX. Значение по умолчанию — INT_MAX, количество подключений неограниченно.

-M мин_число_узлов
--minnodes=мин_число_узлов #

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

--no-password #

Если задан, bihactl не предлагает вручную указать пароль для роли biha_replication_user.

--node-name=имя_узла #

Указывает имя узла-лидера.

-N значение_кворума
--nquorum=значение_кворума #

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

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

-o параметры_initdb
--options=параметры_initdb #

Указывает дополнительные параметры initdb. Этот параметр игнорируется при преобразовании существующего узла с помощью --convert.

Использование параметра --username утилиты initdb не поддерживается. Вместо него используйте параметр --username утилиты bihactl.

-D каталог_данных
--pgdata=каталог_данных #

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

--preferred-roles=предпочтительные_роли_для_репликации #

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

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

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

--priority=приоритет_узла #

Задаёт приоритет узла, который влияет как на выборы, так и на репликацию в кластере, в секундах. Возможные значения: 0, INT_MAX. Значение по умолчанию — -1, при котором параметр игнорируется. Значение параметра можно изменить только функцией biha.set_priority.

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

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

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

    Важно

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

-Y число_синхронных_ведомых_узлов
--sync-standbys=число_синхронных_ведомых_узлов #

Включает кворумную синхронную репликацию, устанавливая параметр synchronous_standby_names и указывая число синхронных резервных узлов (кворум) с методом ANY. Значение должно быть целочисленным и больше нуля. Оно также должно быть выше значения параметра --sync-standbys-min, если оно задано, и не должно превышать число последователей без учёта рефери. Рекомендуется указывать значение число_синхронных_ведомых_узлов меньше, чем значение параметра --minnodes.

-y мин_число_синхронных_ведомых_узлов
--sync-standbys-min=мин_число_синхронных_ведомых_узлов #

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

-S
--use-ssl #

Включает защищённый режим передачи служебной информации между узлами кластера по протоколу SSL/TLS управляющего канала biha (BCP).

Важно

Чтобы использовать SSL для служебных подключений, установленная версия OpenSSL должна быть 1.1.1 или выше. В противном случае BiHA-кластер будет создан без SSL для служебных подключений, и в журнале будет записано соответствующее сообщение.

--username=имя_начального_суперпользователя #

Задаёт имя начального суперпользователя. По умолчанию это имя пользователя ОС, запускающего initdb. Используйте этот параметр в следующий случаях:

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

  • При преобразовании существующего узла, на котором имя начального суперпользователя отличается от postgres.

Использование параметра --username утилиты initdb не поддерживается.

cluster show-config #

Синтаксис:

bihactl cluster show-config  [--biha-listen-addresses=адреса]
                            [--format=формат_вывода_данных]
                            [--magic-file=файл_с_магической_строкой]
                            [--magic-string=магическая_строка]
                            [--pg-port=порт]
                            [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                            --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]]

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

{
  "proxima_enabled": false,
  "use_ssl": false,
  "service_mode": false,
  "user_biha_cert": "",
  "user_biha_key": "",
  "ssl_certificate": "",
  "ssl_private_key": "",
  "ssl_mode": "",
  "synchronous_standby_names": {
   "count": -1,
   "min": -2,
   "names": []
  },
  "unit": {
   "id": 1111,
   "name": "biha_node_1111",
   "can_be_leader": true,
   "can_vote": true,
   "priority": -1,
   "leader_timeout": 20000,
   "mode": "regular",
   "repl_pref_roles": "L",
   "nquorum": 1,
   "minnodes": 1,
   "heartbeat_send_period": 1000,
   "heartbeat_max_lost": 10,
   "no_wal_on_follower": 5000,
   "children": [
    {
     "id": 111,
     "name": "biha_node_111",
     "can_be_leader": true,
     "can_vote": true,
     "priority": -1,
     "leader_timeout": 20000,
     "mode": "regular",
     "repl_pref_roles": "L",
     "nquorum": 2,
     "minnodes": 2,
     "heartbeat_send_period": 1000,
     "heartbeat_max_lost": 10,
     "no_wal_on_follower": 5000,
     "children": [
      {
       "id": 1,
       "name": "biha_node_1",
       "can_be_leader": true,
       "can_vote": true,
       "priority": -1,
       "leader_timeout": 20000,
       "mode": "regular",
       "repl_pref_roles": "L",
       "pg_port": 5432,
       "biha_port": 15432,
       "max_replicas": 2147483647,
       "flw_ro": true,
       "config_send_period": 10000,
       "watchdog_timeout": 2,
       "callbacks_timeout": 10000,
       "asyncaction_timeout": 30000,
       "manage_slots_xmin": true,
       "deny_wal_sources": [],
       "biha_listen_addresses": [
        {
         "address": "biha-db-4",
         "port": -1
        }
       ],
       "sql_hosts": [],
       "replication_hosts": [],
       "biha_hosts": [],
       "unit_type": "node"
      },
      {
       "id": 2,
       "name": "biha_node_2",
       "can_be_leader": true,
       "can_vote": true,
       "priority": -1,
       "leader_timeout": 20000,
       "mode": "regular",
       "repl_pref_roles": "L",
       "pg_port": 5432,
       "biha_port": 5433,
       "max_replicas": 2147483647,
       "flw_ro": true,
       "config_send_period": 10000,
       "watchdog_timeout": 2,
       "callbacks_timeout": 10000,
       "asyncaction_timeout": 30000,
       "manage_slots_xmin": true,
       "deny_wal_sources": [],
       "biha_listen_addresses": [
        {
         "address": "biha-db-2",
         "port": -1
        }
       ],
       "sql_hosts": [],
       "replication_hosts": [],
       "biha_hosts": [],
       "unit_type": "node"
      }
     ],
     "unit_type": "segment"
    }
   ],
   "unit_type": "segment"
  }
 }

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

--format=формат_вывода_данных

Указывает формат вывода информации о конфигурации. Возможные значения: json (по умолчанию), yaml.

cluster status #

Синтаксис:

bihactl cluster status [--biha-listen-addresses=адреса]
                       [--format=формат_вывода_данных]
                       [--magic-file=файл_с_магической_строкой]
                       [--magic-string=магическая_строка]
                       [--pg-port=порт]
                       [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                       --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]]

Проверяет статус узла и отображает его в представлении biha.status_v.

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

--format=формат_вывода_данных

Указывает формат вывода информации о статусе. Возможные значения: json, yaml и table (по умолчанию).

node add #

Синтаксис:

bihactl node add [--biha-hosts=хосты]
                 [--biha-listen-addresses=адреса]
                 [--backup-method=средство_резервного_копирования]
                 [--backup-options=параметры_резервного_копирования]
                 --biha-node-id=идентификатор_узла
                 [--biha-port=порт_biha]
                 [--can-vote=true_или_false]
                 [--can-be-leader=true_или_false]
                 [--convert-standby [--server-cert=/путь/к/сертификату_сервера \
                 --server-key=/путь/к/ключу_сервера]]
                 [--max-replicas=макс_число_реплик]
                 [--mode=режим_узла] [--referee-with-postgres-db]]
                 [--node-name=имя_узла]
                 --pgdata=каталог_данных
                 [--pg-port=порт]
                 [--replication-hosts=хосты_для_репликации]
                 [--preferred-roles=предпочтительные_роли_для_репликации]
                 [--priority=приоритет_узла]
                 [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                 --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]]
                 {--segment-id=идентификатор_сегмента | --segment-name=имя_сегмента}
                 {--use-leader=информация_для_подключения | --magic-string=магическая_строка | --magic-file=файл_с_магической_строкой}
                 [--sql-hosts=хосты_для_sql]

Добавляет последователя в инициализированный кластер. Команду необходимо выполнять на сервере, где будет размещён последователь. При выполнении этой команды создаётся резервная копия лидера с помощью pg_basebackup или pg_probackup. При добавлении узла утилита bihactl удерживает слот репликации, вызывая pg_basebackup с параметрами --slot=ИМЯ_СЛОТА, --wal-method=stream, --checkpoint=fast или pg_probackup с параметрами --stream --slot=ИМЯ_СЛОТА, что предотвращает удаление WAL на лидере во время создания резервной копии.

Примечание

Узлы необходимо добавлять по очереди. Не добавляйте новый узел, если создание ранее добавленного узла ещё не завершено и узел находится в состоянии CSTATE_FORMING. В противном случае может возникнуть следующая ошибка:

          WARNING:  aborting backup due to backend exiting before pg_backup_stop was
          called
      

Для выбора утилиты резервного копирования используется параметр -m, а параметры выбранной утилиты можно задать при помощи параметра -O.

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

-m метод_резервирования
--backup-method=метод_резервирования #

Указывает утилиту резервного копирования. Допускаются значения pg_basebackup, pg_probackup и pg_probackup3. Значение по умолчанию — pg_basebackup. Если не указывать параметр --backup-method, будет использован метод резервного копирования по умолчанию. Утилита pg_basebackup — единственное допустимое значение при добавлении узла-рефери.

-O параметры_резервирования
--backup-options=параметры_резервирования #

Указывает дополнительные параметры резервного копирования в зависимости от утилиты резервного копирования, заданной в параметре --backup-method.

-I id_узла
--biha-node-id=id_узла #

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

--can-vote #

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

--can-be-leader #

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

-c
--convert-standby #

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

--max-replicas=макс_число_реплик #

Указывает максимальное число репликационных подключений biha к узлу, т.е. максимальное число процессов walsender, где в качестве application_name указано biha_node_*.

Возможные значения: 0, INT_MAX. Значение по умолчанию — INT_MAX, количество подключений неограниченно.

-r режим_работы_узла
--mode=режим_работы_узла #

Указывает режим работы узла. Допустимы следующие значения:

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

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

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

По умолчанию база данных postgres не копируется на узел в режиме referee или referee_with_wal. Чтобы скопировать базу данных postgres на рефери, воспользуйтесь параметром --referee-with-postgres-db.

--node-name=имя_узла #

Указывает имя узла-последователя. Если не указано, имя генерируется автоматически в формате biha_node_ + --biha-node-id. Например, если --biha-node-id — 1, имя узла — biha_node_1.

-D каталог_данных
--pgdata=каталог_данных #

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

--preferred-roles=предпочтительные_роли_для_репликации #

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

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

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

--priority=приоритет_узла #

Задаёт вес узла, который влияет как на выборы, так и на репликацию в кластере, в миллисекундах. Возможные значения: 0, INT_MAX. Значение по умолчанию — -1, при котором параметр игнорируется. Значение параметра можно изменить только функцией biha.set_priority.

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

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

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

    Важно

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

-R
--referee-with-postgres-db #

Копирует базу данных postgres со всеми объектами на узел-рефери. Этот параметр можно использовать только при добавлении узла в режиме referee или referee_with_wal.

--server-cert=/путь/к/сертификату_сервера #

Указывает путь к SSL-сертификату для узла BiHA в формате PEM.

--server-key=/путь/к/ключу_сервера #

Указывает путь к закрытому ключу сертификата --server-cert в формате PEM.

--segment-id=идентификатор_сегмента #

Указывает уникальный идентификатор сегмента, в который добавляется узел. Если сегмент не указать, по умолчанию узел будет добавлен в сегмент 111. Необходимо использовать либо --segment-id, либо --segment-name для указания сегмента.

--segment-name=имя_сегмента #

Указывает имя сегмента, в который добавляется узел. Если сегмент не указать, по умолчанию узел будет добавлен в сегмент 111. Необходимо использовать либо --segment-name, либо --segment-id для указания сегмента.

node set front-follower #

Синтаксис:

bihactl node set front-follower --id=идентификатор_узла
                                [--mode=режим_переключения]
                                [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                                --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]]
                                {--magic-string=магическая_строка | --magic-file=магический_файл}

Повышает узел с указанным идентификатором до главного последователя. Повышаемый узел должен располагаться в сегменте-последователе. Команду можно выполнить на любом узле BiHA-кластера.

За подробной информацией обратитесь к разделам Параметры аутентификации и Параметры подключения лидера.

--id=id_узла #

Указывает уникальный идентификатор повышаемого узла. Узел должен располагаться в сегменте-последователе.

--mode=режим_переключения #

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

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

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

    Важно

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

node set leader #

Синтаксис:

bihactl node set leader --id=идентификатор_узла
                        [--mode=режим_переключения]
                        [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                        --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]]
                        {--magic-string=магическая_строка | --magic-file=магический_файл}

Повышает узел с указанным идентификатором до лидера. Повышаемый узел должен располагаться в сегменте-лидере. Команду можно выполнить на любом узле BiHA-кластера.

За подробной информацией обратитесь к разделам Параметры аутентификации и Параметры подключения лидера.

--id=id_узла #

Указывает уникальный идентификатор повышаемого узла. Узел должен располагаться в сегменте-лидере.

--mode=режим_переключения #

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

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

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

    Важно

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

run #

Синтаксис:

bihactl run путь/к/скрипту_в_формате_.yml
            [--sql-output-format=формат_вывода]

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

-f формат_вывода
--sql-output-format=формат_вывода #

Указывает формат вывода скрипта. Возможные значения: json, yaml, table (по умолчанию) и csv.

segment add #

Синтаксис:

bihactl segment add [--id=идентификатор_сегмента]
                    [--minnodes=мин_число_узлов]
                    [--name=имя_сегмента]
                    [--nquorum=значение_кворума]
                    [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                    --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]]
                    {--use-leader=информация_для_подключения | --magic-string=магическая_строка | --magic-file=магический_файл}

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

За подробной информацией обратитесь к разделам Параметры аутентификации и Параметры подключения лидера.

-I идентификатор_сегмента
--id=идентификатор_сегмента #

Указывает уникальный идентификатор сегмента.

--name=имя_сегмента #

Указывает имя сегмента. Если не указано, имя генерируется автоматически в формате biha_node_ + --id. Например, если --id — 1, имя сегмента — biha_node_1.

segment set leader #

Синтаксис:

bihactl segment set leader --id=идентификатор_сегмента
                           [--mode=режим_переключения]
                           [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                           --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]]
                           {--magic-string=магическая_строка | --magic-file=магический_файл}

Повышает сегмент с указанным идентификатором до сегмента-лидера. Команду можно выполнить на любом узле BiHA-кластера.

За подробной информацией обратитесь к разделам Параметры аутентификации и Параметры подключения лидера.

--id=идентификатор_сегмента #

Указывает уникальный идентификатор повышаемого сегмента.

--mode=режим_переключения #

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

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

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

    Важно

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

unit set leader #

Синтаксис:

bihactl unit set leader --id=идентификатор_юнита
                        [--mode=режим_переключения]
                        [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                        --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]]
                        {--magic-string=магическая_строка | --magic-file=магический_файл}

Повышает узел или сегмент в зависимости от указанного идентификатора. Команду можно выполнить на любом узле BiHA-кластера. Команда в первую очередь предназначена доя использования в скриптах автоматизации.

За подробной информацией обратитесь к разделам Параметры аутентификации и Параметры подключения лидера.

--id=идентификатор_сегмента #

Указывает уникальный идентификатор повышаемого сегмента.

--mode=режим_переключения #

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

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

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

    Важно

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

upgrade start #

Синтаксис:

bihactl upgrade start [--convert]
                      [--extra-new-options-gucs -c ключ=значение]
                      [--extra-shared-libs=разделяемые_библиотеки]
                      {--magic-string=магическая_строка_старого_лидера | --magic-file=магический_файл_старого_лидера}
                      --new-leader-biha-port=порт_biha_нового_лидера
                      --new-leader-host=хост_нового_лидера
                      --new-leader-port=порт_нового_лидера
                      --new-pgdata=каталог_PGDATA_лидера_новой_версии
                      --old-bin=/путь/к/исполняемым/файлам/старой/версии
                      --old-pgdata=каталог_PGDATA_старой_версии
                      [--options=параметры_pg_upgrade]
                      [--username=имя_суперпользователя]
                      [--user-cert=/путь/к/сертификату_клиента --user-key=/путь/к/ключу_клиента \
                      [--ssl-mode=режим_ssl]]
                      [--root-cert=/путь/к/сертификату_цс --user-biha-cert=/путь/к/сертификату_клиента \
                      --user-biha-key=/путь/к/ключу_клиента [--biha-ssl-mode=режим_ssl]]
                      --subscriber-username=имя_пользователя

Запускает процесс миграции на основную версию для BiHA-кластера. За подробной информацией обратитесь к Подразделу 26.3.15.1.2.

Эта команда может принимать следующие параметры:

--convert #

Преобразовывает существующего последователя в лидера с новой версией Postgres Pro Standard. При указании этого параметра не требуется указывать параметры --new-leader-biha-port, --new-leader-host и --new-leader-port.

--extra-new-options-gucs -c ключ=значение #

Задаёт список разделённых запятыми дополнительных параметров конфигурации, направляемых в pg_upgrade --new-options.

--extra-shared-libs=разделяемые_библиотеки #

Задаёт разделяемые библиотеки для загрузки при выполнении pg_upgrade.

--magic-string=магическая_строка_старого_лидера #

Использует «‎‎магическую» строку, содержащую закодированные данные, для подключения к лидеру старого BiHA-кластера, т.е. кластера, для которого необходимо выполнить миграцию.

--magic-file=магический_файл_старого_лидера #

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

--new-leader-biha-port=порт_biha_нового_лидера #

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

--new-leader-host=хост_нового_лидера #

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

--new-leader-port=порт_нового_лидера #

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

--new-pgdata=каталог_PGDATA_лидера_новой_версии #

Указывает каталог, где будет создан лидер нового кластера с новой версией Postgres Pro Standard в результате конвертации из последователя старой версии. Каталог должен быть пустым.

--old-bin=/путь/к/исполняемым/файлам/старой/версии #

Указывает путь к исполняемым файлам старой версии Postgres Pro Standard.

--old-pgdata=каталог_PGDATA_старой_версии #

Указывает каталог, в котором создаётся последователь со старой версией Postgres Pro Standard. Далее этот последователь будет обновлён и преобразован в лидера нового кластера с новой версией Postgres Pro Standard. Каталог должен быть пустым.

-o pg_upgrade_options
--options=pg_upgrade_options #

Указывает дополнительные параметры pg_upgrade.

--ssl-mode=режим_ssl #

Определяет политику аутентификации по SSL для --subscriber-username. Поддерживаются следующие режимы:

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

  • require

  • verify-ca

За подробной информацией о режимах обратитесь к sslmode.

--subscriber-username=имя_пользователя #

Указывает имя пользователя для подключения pg_createsubscriber. У пользователя должны быть права на создание подписок и использование pg_replication_origin_advance().

--username=имя_начального_суперпользователя #

Задаёт имя начального суперпользователя. По умолчанию это имя пользователя ОС, запускающего initdb. Используйте этот параметр в следующий случаях:

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

  • При преобразовании существующего узла, на котором имя начального суперпользователя отличается от postgres.

Использование параметра --username утилиты initdb не поддерживается.

--user-cert=/путь/к/сертификату_клиента #

Указывает путь к SSL-сертификату для аутентификации --subscriber-username в формате PEM.

--user-key=/путь/к/ключу_клиента #

Указывает путь к закрытому ключу сертификата --user-cert в формате PEM.

upgrade move #

Синтаксис:

bihactl upgrade move --new-magic-string=магическая_строка_нового_лидера
                     --new-pgdata=каталог_PGDATA_последователя_новой_версии
                     --old-bin=/путь/к/исполняемым/файлам/старой/версии
                     --old-pgdata=каталог_PGDATA_последователя_старой_версии

Перемещает последователя из старого BiHA-кластера в новый BiHA-кластер во время процедуры миграции на основную версию. За подробной информацией обратитесь к Подразделу 26.3.15.1.2.

Эта команда может принимать следующие параметры:

--new-magic-string=магическая_строка_нового_лидера #

Использует «магическую» строку, которая содержит закодированные данные для подключения к лидеру нового BiHA-кластера, т.е. кластера, обновлённого до новой основной версии. «Магическая» строка выводится в результате выполнения команды bihactl upgrade start.

--new-pgdata=каталог_PGDATA_последователя_новой_версии #

Указывает каталог, куда будет перемещён последователь с новой версией Postgres Pro Standard. Каталог должен быть пустым.

--old-bin=/путь/к/исполняемым/файлам/старой/версии #

Указывает путь к исполняемым файлам старой версии Postgres Pro Standard.

--old-pgdata=каталог_PGDATA_старой_версии #

Указывает каталог, где в настоящий момент находится последователь со старой версией Postgres Pro Standard.

upgrade finish #

Синтаксис:

bihactl upgrade finish --new-magic-string=магическая_строка_нового_лидера
                       [--username=имя_суперпользователя]
                       [--user-cert=/путь/к/сертификату_клиента --user-key=/путь/к/ключу_клиента \
                       [--ssl-mode=режим_ssl]]
                       --subscriber-username=имя_пользователя

Завершает процесс миграции на основную версию для BiHA-кластера. За подробной информацией обратитесь к Подразделу 26.3.15.1.2.

Эта команда может принимать следующие параметры:

--new-magic-string=магическая_строка_нового_лидера #

Использует «магическую» строку, которая содержит закодированные данные для подключения к лидеру нового BiHA-кластера, т.е. кластера, обновлённого до новой основной версии. «Магическая» строка выводится в результате выполнения команды bihactl upgrade start.

--ssl-mode=режим_ssl #

Определяет политику аутентификации по SSL для --subscriber-username. Поддерживаются следующие режимы:

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

  • require

  • verify-ca

За подробной информацией о режимах обратитесь к sslmode.

--subscriber-username=имя_пользователя #

Указывает имя пользователя для подключения pg_createsubscriber. У пользователя должны быть права на создание подписок и использование pg_replication_origin_advance().

--username=имя_начального_суперпользователя #

Задаёт имя начального суперпользователя. По умолчанию это имя пользователя ОС, запускающего initdb. Используйте этот параметр в следующий случаях:

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

  • При преобразовании существующего узла, на котором имя начального суперпользователя отличается от postgres.

Использование параметра --username утилиты initdb не поддерживается.

--user-cert=/путь/к/сертификату_клиента #

Указывает путь к SSL-сертификату для аутентификации --subscriber-username в формате PEM.

--user-key=/путь/к/ключу_клиента #

Указывает путь к закрытому ключу сертификата --user-cert в формате PEM.

-v | --version #

Синтаксис:

bihactl -v
bihactl --version

Отображает текущую версию утилиты bihactl.

--help #

Синтаксис:

bihactl --help

Выводит справку по параметрам командной строки.

Параметры аутентификации #

Параметры аутентификации можно использовать со следующими командами: bihactl cluster init, bihactl cluster show-config, bihactl cluster status, bihactl node add, bihactl node set front-follower, bihactl node set leader, bihactl segment add, bihactl segment set leader и bihactl unit set leader.

--biha-ssl-mode=режим_ssl #

Определяет политику аутентификации по SSL для роли biha_replication_user. Поддерживаются следующие режимы:

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

  • require

  • verify-ca

За подробной информацией о режимах обратитесь к sslmode.

--root-cert=/путь/к/сертификату_цс #

Указывает путь к сертификату доверенного ЦС в формате PEM.

--server-cert=/путь/к/сертификату_сервера #

Указывает путь к SSL-сертификату для узла BiHA в формате PEM.

--server-key=/путь/к/ключу_сервера #

Указывает путь к закрытому ключу сертификата --server-cert в формате PEM.

--user-biha-cert=/путь/к/сертификату_клиента #

Указывает путь к SSL-сертификату для аутентификации роли biha_replication_user в формате PEM.

--user-biha-key=/путь/к/ключу_клиента #

Указывает путь к закрытому ключу для сертификата --user-biha-cert в формате PEM.

Параметры подключения к лидеру #

Параметр --use-leader используется с командами bihactl node add и bihactl segment add.

Параметры --magic-file и --magic-string используются с командами bihactl cluster show-config, bihactl cluster status, bihactl node add, bihactl node set front-follower, bihactl node set leader, bihactl segment add, bihactl segment set leader и bihactl unit set leader.

-f файл_с_магической_строкой
--magic-file=файл_с_магической_строкой #

Указывает путь к файлу, в котором хранится магическая строка с зашифрованными данными для подключения к узлу-лидеру. Если параметр используется с командой bihactl cluster init, сгенерированная строка сохраняется в указанном файле. С другими командами магическая строка из указанного файла используется для подключения к лидеру. На момент выполнения команд файл должен существовать.

-s магическая_строка
--magic-string=магическая_строка #

Указывает магическую строку, которая содержит зашифрованные данные для подключения к узлу-лидеру. Магическая строка генерируется в выводе команды bihactl cluster init и имеет следующий вид:

dmVyc2lvbj0xIGhvc3Q9bG9jYWxob3N0IHBvcnQ9NTQzMiBiaWhhLXBvcnQ9NTQzMw==
-l параметры_подключения
--use-leader=параметры_подключения #

Указывает параметры подключения к узлу-лидеру в следующем формате:

host=хост_узла_лидера port=порт_лидера biha-port=порт_biha_лидера

Сетевые параметры #

Параметры --biha-listen-addresses и --biha-port используются с командами bihactl cluster init, bihactl node add, bihactl cluster show-config и bihactl cluster status.

Параметры --biha-hosts, --sql-hosts, --replication-hosts и --pg-port используются с командами bihactl cluster init и bihactl node add.

--biha-hosts=хосты #

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

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

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

-P порт_biha
--biha-port=порт_biha #

Указывает порт для обмена служебной информацией между узлами. Если порт не указан, устанавливается значение --pg-port + 1.

--biha-listen-addresses=адреса #

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

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

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

-p порт
--pg-port=порт #

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

Если не указан, bihactl использует значение по умолчанию — 5432.

--replication-hosts=хосты_для_репликации #

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

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

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

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

--sql-hosts=хосты_для_sql #

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

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

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

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

FAQ