Администрирование Pangolin DCS#

Pangolin DCS — это модуль распределенного хранилища конфигурации внутри компонента Pangolin Manager, который реализует Raft-алгоритм.

Raft-алгоритм решения консенсуса в кластере надежных вычислений#

Основы алгоритма#

Raft используется поверх кластера однообразных слабо связных узлов, на каждом из которых работает машина состояний. Raft-алгоритм обеспечивает надежную доставку сигналов на все узлы в заданном порядке. Благодаря чему обеспечивается переход всех машин состояний по одним и тем же последовательностям состояний, и каждый узел гарантированно приходит в согласие с другими узлами.

В Raft-кластере каждый из серверов в каждый момент времени находится в одном из трех состояний:

  • leader (мастер) – сервер обрабатывает все клиентские запросы, является источником истины всех данных в логе, поддерживает лог ведомых серверов;

  • follower (реплика) – пассивный сервер, который только «слушает» новые записи в лог от мастера и перенаправляет все входящие запросы от клиентов на мастера;

  • candidate (кандидат) – специальное состояние сервера, возможное только в момент выборов нового мастера (голосования).

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

  • выборы мастера (голосование);

  • репликация (передача данных протокола).

Выборы мастера#

Raft предполагает, что на кластере всегда существует явно выделенный мастер. Только мастер отправляет новые записи на другие узлы (реплики) кластера. Остальные узлы следуют за мастером и не взаимодействуют между собой (за исключением фазы голосования). Если внешний клиент подключается к кластеру через обычный узел, то все его запросы перенаправляются мастеру и только оттуда приходят на остальные узлы.

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

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

Репликация протокола#

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

Установка Pangolin DCS#

Pangolin DCS является частью Pangolin Manager. Развертывание Pangolin DCS происходит поэтапно:

  1. Включение параметра pangolin_dcs_enable при установке Pangolin Manager.

    Установка Pangolin Manager происходит при установке СУБД Pangolin. Чтобы включить параметр pangolin_dcs_enable, добавьте его со значением true в файл custom_config_sample.yml. Пример раздела для установки Pangolin DCS в файле custom_config_sample.yml:

    pangolin_dcs_enable: true
    pangolin_dcs_params:
    raft_data_dir: "{{ PGDATA.rstrip('data/') }}/raft_data"
    dump_dir: "{{ PGDATA.rstrip('data/') }}/raft_dump"
    logfile: "{{ PGLOGS }}/raft/raft.log"
    heartbeat_interval: 1000
    election_timeout: 5000
    verify_client: optional
    verify_server: true
    no_tls1_3: false
    pangolin_dcs_rest_api:
    dcs_root: root
    dcs_root_password:
    dcs_client_user: pangolindcs
    dcs_client_password: <Пароль пользователя>
    verify_client: optional
    ciphers: DEFAULT:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1
    allowlist: ""
    

    Примечание

    В связи с добавлением утилит безопасности в основной пакет Pangolin Manager, на узле арбитра производится их настройка аналогично узлам с DBMS — создание пользователя безопасности kmadmin_pg и настройка каталогов с утилитами.

  2. Настройка параметров Pangolin DCS (идентификатор кластера, состав кластера).

    Настройка параметров описана в следующих разделах.

Настройка Pangolin DCS#

Настройка конфигурационных файлов#

Настройка Pangolin DCS осуществляется параметрами в конфигурационном файле postgres.yml. Ниже приведен пример настройки параметров секции pangolin_dcs. В конфигурационном файле этой секцией замените секцию etcd:

pangolin_dcs:
  self_addr: srv-0-141:2481
  partner_addrs: srv-0-134:2481,srv-0-137:2481

  data_dir: /pgdata/07/raft_data
  journal_max_size: 10485760
  journal_wait_timeout: 10
  memory_journal_size: 10000
  journal_force_read_wait: true

  dump_dir: /pgdata/07/raft_dump
  dump_interval: 300
  dump_wait_timeout: 10

  logfile: /pangolinlogs/pangolin-manager/raft/raft.log
  log_max_size: 20971520
  log_rotation_period: 1d

  heartbeat_interval: 1000
  election_timeout: 5000

  certfile: '/pg_ssl/patroni_server.crt'
  keyfile: '/pg_ssl/patroni_server.key'
  cafile: '/pg_ssl/root.crt'
  capath: '/pg_ssl'
  crlfile: /pg_ssl/crl/intermediate.crl
  crlpath: /pg_ssl/crl
  pkcs12_config_path: /pg_ssl/intermediate/patroni_server.p12.cfg
  verify_client: optional
  verify_server: true
  no_tls1_3: false

Параметры:

  • обязательные параметры:

    • self_addr — адрес текущего узла в формате ip:port;

    • partner_addrs — список адресов остальных узлов в формате ip1:port1, ip2:port2;

    • data_dir — путь к директории для хранения журнала операций и текущих значений ключей;

  • необязательные параметры:

    • journal_max_size — максимальный размер в байтах для файла с журналом операций, по умолчанию 10 МБ;

    • journal_wait_timeout — время тайм-аута, по истечении которого операция записи/чтения журнала считается неуспешной, по умолчанию равен параметру loop_wait или 10с;

    • memory_journal_size — число максимально содержащихся в памяти последних записей журнала, по умолчанию 10000;

    • journal_force_read_wait — если равен true, то при рестарте службы pangolin-manager выполняется перечитывание журнала операций, по умолчанию true;

    • dump_dir — путь к директории для хранения дампа, по умолчанию равен data_dir;

    • dump_interval — интервал создания дампа, в секундах, по умолчанию равен 300;

    • dump_wait_timeout — время тайм-аута, по истечении которого операция записи/чтения дампа считается неуспешной, по умолчанию равен параметру loop_wait или 10 (секундам);

    • logfile — путь к файлу с логом от pangolin_dcs, по умолчанию равен data_dir/raft.log;

    • log_max_size — максимальный размер в байтах для файла с логом pangolin_dcs, по умолчанию равен 20мб, минимальное значение 8192 байт;

    • log_rotation_period — интервал ротации файла с логом pangolin_dcs, по умолчанию раз в сутки, формат <число><{одно из: s, m, h, d}>, соответственно: секунда, месяц, час, день;

    • heartbeat_interval — время в миллисекундах, раз в которое мастер DCS-кластера будет сообщать о себе остальным узлам;

    • election_timeout — время в миллисекундах, по прошествии которого при неполучении heartbeat от мастера узел инициирует новое голосование;

    • certfile — серверный сертификат Pangolin DCS для установления SSL-подключений;

    • keyfile — закрытый ключ Pangolin DCS, соответствующий серверному сертификату;

    • keyfile_password — пароль для рассекречивания закрытого ключа (если защищен паролем);

    • cafile — корневой сертификат УЦ (CA);

    • capath — директория, содержащая файлы с доверенными сертификатами УЦ (CA);

    • crlfile — файл со списком отозванных сертификатов (CRL);

    • crlpath — директория, содержащая файлы со списком отозванных сертификатов (CRL);

    • pkcs12_config_path — файл в формате JSON, содержащий данные для запроса сертификата из SecMan или парольную фразу для доступа к контейнеру PKCS#12 и путь к контейнеру;

    • verify_client — определяет, требуется ли запрашивать и проверять клиентский сертификат DCS. Возможные значения:

      • none — клиентский сертификат не запрашивается, проверка сертификата не выполняется;

      • optional — клиентский сертификат запрашивается и, если клиент отправляет сертификат, подвергается проверке;

      • required — клиентский сертификат запрашивается и, если клиент не отправляет сертификат, установка SSL-соединения завершается с ошибкой;

    • verify_server — определяет, требуется ли запрашивать и проверять серверный сертификат DCS (возможные значения: true/false);

    • no_tls1_3 — на серверах с установленным OpenSSL 1.1.0 и выше позволяет переключиться с протокола TLSv1.3 на TLSv1.2 (возможные значения: true/false, по умолчанию false).

При старте кластера с Pangolin Manager с таким конфигурационным файлом, инициализируется Raft-кластер, который между своими узлами передает информацию по защищенному SSL-каналу.

Заполните секции restapi и ssl как указано в примере:

restapi:
  # секция заполняется как и раньше для кластера с etcd
  listen: 0.0.0.0:8008
  connect_address: srv-1-96:8008
  allowlist: []
  allowlist_include_members: true
  pkcs12_config_path: /pg_ssl/intermediate/server.p12.cfg
  crlpath: /pg_ssl/crl
  crlfile: /pg_ssl/crl/intermediate.crl
  authentication:
    username: patroniyml
    password: $enc$....
pangolin_dcs:
  # параметры описанные выше, self_addr и пр.

  # параметры для rest api pangolin_dcs
  restapi:
    listen: 0.0.0.0:8009
    connect_address: srv-0-128:8009
    allowlist: []
    #allowlist_include_members: true
    ciphers: DEFAULT:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1
    verify_client: optional

    cafile: /pg_ssl/root.crt
    capath: /pg_ssl/root_dir
    certfile: /pg_ssl/patroni_server.crt
    keyfile: /pg_ssl/patroni_server.key
    crlpath: /pg_ssl/crl
    crlfile: /pg_ssl/crl/intermediate.crl
    # параметры для аутентификации на Pangolin DCS через pangolin-manager-ctl
    authentication:
      username: pangolindcs
      password: $enc$....

  # параметры для команд к Pangolin DCS через pangolin-manager-ctl и pangolin-dcs-ctl
  ctl:
    retry_timeout: 10 # тайм-аут на выполнение запроса к Pangolin DCS

Настройка авторизации внутри DCS при включенном SSL и pem-сертификатах#

Выполните настройку авторизации внутри DCS:

  1. Добавьте пользователя root:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/users/root -d '{"password":"<Пароль root>"}'
    
  2. Добавьте «обычного» пользователя:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/users/test_user -d '{"password":"<Пароль пользователя>"}'
    
  3. Добавьте роль с правами на чтение и запись:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/roles/test_role -d '{"permissions": {"kv": {"read": ["/service/clustername/*"], "write": ["/service/clustername/*"]}}}'
    
  4. Назначьте роль «обычному» пользователю:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/users/test_user  -d '{"grant":["test_role"]}'
    
  5. Проверьте статус авторизации (вкл/выкл) — пользователя root:

    curl -iS -XGET --cert /pg_ssl/client.crt --key /pg_ssl/client.key -u root:<Пароль root> https://<server_name>:<port>/v2/auth/enable
    
  6. Включите авторизацию:

    curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/enable
    

При включенной авторизации все запросы на изменение/просмотр ключей будут доступны только тому пользователю, у которого есть права на это.

Настройка параметров доступа#

В связи с добавлением утилит безопасности (setup_kms_credentials, pg_auth_password, pangolin-certs-rotate) в основной пакет Pangolin Manager, на узле арбитра необходима установка файла лицензии. Утилита pangolin-auth-reencrypt копируется из дистрибутива Pangolin, на узле арбитра производится настройка аналогично узлам с DBMS — создание пользователя безопасности kmadmin_pg и настройка каталогов с утилитами. Ниже приведены каталоги с настроенными правами доступа:

/etc/postgres - drwxrwx--x   2 postgres   kmadmin_pg
/opt/pangolin-common - drwx--x---   3 postgres kmadmin_pg
/opt/pangolin_license - drwxr-x---   2 postgres kmadmin_pg
/opt/pangolin-manager-2.1.0 - drwx---r-x------   5 postgres postgres
/opt/pangolin-manager-2.1.0/bin - drwx-----x  3 postgres postgres
/opt/pangolin-manager-2.1.0/lib - drwx---r-x  4 postgres postgres
/opt/pangolin-manager-2.1.0/lib/plugins - drwx---r-x 2 postgres postgres

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

На узле Арбитра находится служба pangolin-manager, работающая в упрощенном режиме и принимающая только запросы, связанные с DCS-модулем. Конфигурационный файл postgres.yml в таком случае выглядит так (без секции postgresql и других значений в секции tags):

scope: clustername
name: srv-0-141

restapi:
# обычное заполнение секции

pangolin_dcs:
self_addr: srv-0-141:2480
partner_addrs: ['srv-0-134:2480', 'srv-0-137:2480']
data_dir: /home/postgres/raft_data_dir
heartbeat_interval: 1000
election_timeout: 5000

bootstrap:
dcs:
# обычное заполнение секции

tags:
nofailover: true  # так как здесь нет pangolin, на этот узел нельзя совершить failover
nosync: true  # так как этот узел не может стать репликой

Пример файла конфигурации службы pangolin-manager.service:

[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target

[Service]
Type=simple
User=postgres
Group=postgres

# Read in configuration file if it exists, otherwise proceed

Environment="PG_LICENSE_PATH=/opt/pangolin_license"
Environment="PG_LD_LIBRARY_PATH=/opt/pangolin-dbms/lib"
Environment="PG_PLUGINS_PATH=/opt/pangolin-dbms/lib"
Environment="PATRONI_PLUGINS_PATH=/opt/pangolin-manager/lib/postgresql_se_libs"
Environment="LD_LIBRARY_PATH=/opt/pangolin-manager/lib/postgresql_se_libs"
Environment="PYTHONPATH=/opt/pangolin-manager/lib/python3/site-packages:/opt/pangolin-manager/lib64/python3/site-packages:/opt/pangolin-manager/lib/python3.6/site-packages:/opt/pangolin-manager/lib64/python3.6/site-packages"
LimitNOFILE=65536

# Pre-commands to start watchdog device
# Uncomment if watchdog is part of your patroni setup
PermissionsStartOnly=true
ExecReload=/bin/kill -HUP $MAINPID

WorkingDirectory=/opt/pangolin-manager
ExecStart=/opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
Restart=on-failure
KillMode=process

# Disable restart limits
StartLimitInterval=0

[Install]

CLI-интерфейс для взаимодействия с DCS-кластером#

Для взаимодействия с DCS-кластером используйте утилиту pangolin-dcs-ctl. Описание команд с примерами использования представлено ниже.

Внимание

Команды, изменяющие состояние DCS-кластера (изменение ключа, удаление ключа, удаление всех ключей, восстановление из резервной копии, добавление узлы, удаление узла), доступны только после аутентификации по логину-паролю, которые указаны в секции pangolin_dcs: ctl: в конфигурационном файле postgres.yml. При включенном засекречивании пароль хранится в засекреченном виде. При выполнении команд в интерактивном режиме предлагается ввести пароль и затем пароль проверяется на соответствие с паролем из конфигурационного файла.

Справка для утилиты pangolin-dcs-ctl#

$ pangolin-dcs-ctl --help
Использование: pangolin-dcs-ctl.bin [ОПЦИИ] КОМАНДЫ [АРГУМЕНТЫ]...

Опции:
  -c, --config-file TEXT                   Файл конфигурации
  -k, --insecure                           Разрешить соединения с SSL-сайтами без сертификатов
  -u, --user TEXT                          Имя пользователя[:пароль] для аутентификации (подсказка, если пароль не введен)
  --password TEXT                          Пароль для аутентификации (если эта опция используется, опция '--user' не должна включать пароль)
  --plugin-log-level [DEBUG5|LOG|WARNING]  Уровень журнала PKCS12
  --help                                   Показать это сообщение и выйти.

Команды:
  auth        Команды для аутентификации
  del         Удаляет указанный ключ или список ключей
  endpoint    Команды для проверки состояния кластера
  get         Получает ключ или список ключей
  member      Команды для членов кластера
  put         Помещает указанный ключ в хранилище
  role        Команды для ролей
  snapshot    Команды для создания резервных копий
  user        Команды для пользователей

Команды для настройки аутентификации#

Справка#

$ pangolin-dcs-ctl auth --help
Использование: pangolin-dcs-ctl.bin auth [OPTIONS] COMMAND [ARGS]...

  Команды для аутентификации

Опции:
  --help Показать это сообщение и выйти.

Команды:
  disable Отключает аутентификацию
  enable  Включает аутентификацию
  status  Возвращает статус аутентификации

Примеры#

# Получить статус аутентификации.
$ pangolin-dcs-ctl auth status
Authentication Status: false

# Включить аутентификацию. Ошибка: перед включением аутентификации требуется создать пользователя root.
$ pangolin-dcs-ctl auth enable
Error: 400 Bad Request

# Создать пользователя root.
$ pangolin-dcs-ctl user add root
Password of root:
Type password of root again for confirmation:
User root created

# Включить аутентификацию.
$ pangolin-dcs-ctl auth enable
Authentication Enabled

# Выключить аутентификацию без предоставления реквизитов доступа (имя пользователя и пароль).
$ pangolin-dcs-ctl auth disable
Error: Unauthorized

# Выключить аутентификацию с предоставлением реквизитов доступа от пользователя без административных прав.
$ pangolin-dcs-ctl -u user0:pass123 auth disable
Error: 403 Forbidden

# Выключить аутентификацию с предоставлением реквизитов доступа от пользователя с административными правами.
$ pangolin-dcs-ctl -u root:pass123 auth disable
Authentication Disabled

Команды для настройки пользователей#

Справка#

$ pangolin-dcs-ctl user --help
Использование: pangolin-dcs-ctl.bin user [ОПЦИИ] КОМАНДЫ [АРГУМЕНТЫ]...

  Команды для пользователей

Опции:
  --help Показать это сообщение и выйти.

Команды:
  add         Добавляет нового пользователя (USER=<имя пользователя или user:password>)
  delete      Удаляет пользователя
  get         Получает подробную информацию о пользователе
  grant-role  Предоставляет роль пользователю
  list        Перечисляет всех пользователей
  passwd      Изменяет пароль пользователя
  revoke-role Отзывает роль у пользователя
Справка для команды add (добавление нового пользователя)#
$ pangolin-dcs-ctl user add --help
Использование: pangolin-dcs-ctl.bin user add [ОПЦИИ] ПОЛЬЗОВАТЕЛЬ

  Добавляет нового пользователя (USER=<имя пользователя или user:password>)

Опции:
  --interactive            Читать пароль из stdin вместо интерактивного терминала
  --new-user-password TEXT Ввод пароля из флага командной строки
  --help                   Показать это сообщение и выйти.
Справка для команды delete (удаление пользователя)#
$ pangolin-dcs-ctl user delete --help
Использование: pangolin-dcs-ctl.bin user delete [ОПЦИИ] ПОЛЬЗОВАТЕЛЬ

  Удаляет пользователя

Опции:
  --help Показать это сообщение и выйти.
Справка для команды get (получение подробной информации о пользователе)#
$ pangolin-dcs-ctl user get --help
Использование: pangolin-dcs-ctl.bin user get [ОПЦИИ] ПОЛЬЗОВАТЕЛЬ

  Получает подробную информацию о пользователе

Опции:
  --help Показать это сообщение и выйти.
Справка для команды grant-role (назначение роли пользователю)#
$ pangolin-dcs-ctl user grant-role --help
Использование: pangolin-dcs-ctl.bin user grant-role [ОПЦИИ] РОЛЬ ПОЛЬЗОВАТЕЛЯ

  Назначение роль пользователю

Опции:
  --help Показать это сообщение и выйти.
Справка для команды list (вывод списка всех пользователей)#
$ pangolin-dcs-ctl user list --help
Использование: pangolin-dcs-ctl.bin user list [ОПЦИИ]

  Выводит список всех пользователей

Опции:
  --help Показать это сообщение и выйти.
Справка для команды passwd (изменение пароля пользователя)#

$ pangolin-dcs-ctl user passwd --help
Использование: pangolin-dcs-ctl.bin user passwd [ОПЦИИ] ПОЛЬЗОВАТЕЛЬ

  Изменение пароля пользователя

Опции:
  --interactive Считывать пароль из stdin вместо интерактивного терминала
  --help        Показать это сообщение и выйти.
Справка для команды revoke-role (отзыв роли у пользователя)#
$ pangolin-dcs-ctl user revoke-role --help
Использование: pangolin-dcs-ctl.bin user revoke-role [ОПЦИИ] РОЛЬ ПОЛЬЗОВАТЕЛЯ

  Отзывает роль у пользователя

Опции:
  --help Показать это сообщение и выйти.

Примеры#

# Получить список всех пользователей.
$ pangolin-dcs-ctl -u root:pass123 user list
root
user0

# Получить информацию о пользователе user0.
$ pangolin-dcs-ctl -u root:pass123 user get user0
User user0
Roles: role0

# Создать пользователя user1 с интерактивным вводом пароля (по умолчанию).
$ pangolin-dcs-ctl -u root:pass123 user add user1
Password of user1:
Type password of user1 again for confirmation:
User user1 created

# Создать пользователя user2 с вводом пароля из стандартного потока ввода (необходимо передать опцию '--interactive').
$ pangolin-dcs-ctl -u root:pass123 user add user2 --interactive < ./passfile
User user2 created

# Создать пользователя user3 с вводом пароля через опцию '--new-user-password'.
$ pangolin-dcs-ctl -u root:pass123 user add user3 --new-user-password=pass123
User user3 created

# Создать пользователя user4 с вводом пароля через аргумент 'user'.
$ pangolin-dcs-ctl -u root:pass123 user add user4:pass123
User user4 created

# Удалить пользователя user4.
$ pangolin-dcs-ctl -u root:pass123 user delete user4
User user4 deleted

# Удалить пользователя root. Ошибка: запрещено удалять пользователя root при включенной аутентификации.
$ pangolin-dcs-ctl -u root:pass123 user delete root
Error: 403 Forbidden

# Изменить пароль пользователя user3 путем интерактивного ввода (по умолчанию).
$ pangolin-dcs-ctl -u root:pass123 user passwd user3
Password of user3:
Type password of user3 again for confirmation:
Password updated

# Изменить пароль пользователя user3 путем ввода пароля из стандартного потока ввода (необходимо передать опцию '--interactive').
$ echo -n "pass123" | pangolin-dcs-ctl -u root:pass123 user passwd user3 --interactive
Password updated

# Назначить роль role1 пользователю user0.
$ pangolin-dcs-ctl -u root:pass123 user grant-role user0 role1
Role role1 is granted to user user0

# Получить информацию о пользователе user0.
$ pangolin-dcs-ctl -u root:pass123 user get user0
User user0
Roles: role0 role1

# Отозвать роль role1 у пользователя user0.
$ pangolin-dcs-ctl -u root:pass123 user revoke-role user0 role1
Role role1 is revoked from user user0

# Получить информацию о пользователе user0.
$ pangolin-dcs-ctl -u root:pass123 user get user0
User user0
Roles: role0

Команды для настройки ролей#

Справка#

$ pangolin-dcs-ctl role --help
Использование: pangolin-dcs-ctl.bin role [ОПЦИИ] КОМАНДЫ [АРГУМЕНТЫ]...

  Команды для ролей

Опции:
  --help Показать это сообщение и выйти.

Команды:
  add                Добавляет новую роль
  delete             Удаляет роль
  get                Получает подробную информацию о роли
  grant-permission   Предоставляет ключ для роли
  list               Перечисляет все роли
  revoke-permission  Отзывает ключ у роли
Справка для команды add (добавление новой роли)#
$ pangolin-dcs-ctl role add --help
Использование: pangolin-dcs-ctl.bin role add [ОПЦИИ] РОЛЬ

  Добавляет новую роль

Опции:
  --help Показать это сообщение и выйти.
Справка для команды delete (удаление роли)#
$ pangolin-dcs-ctl role delete --help
Использование: pangolin-dcs-ctl.bin role delete [ОПЦИИ] РОЛЬ

  Удаляет роль

Опции:
  --help Показать это сообщение и выйти.
Справка для команды get (получение подробной информации о роли)#
$ pangolin-dcs-ctl role get --help
Использование: pangolin-dcs-ctl.bin role get [OPTIONS] ROLE

  Получает подробную информацию о роли

Опции:
  --help Показать это сообщение и выйти.
Справка для команды grant-permission (выдача роли ключа)#
$ pangolin-dcs-ctl role grant-permission --help
Использование: pangolin-dcs-ctl.bin role grant-permission [ОПЦИИ] РОЛЬ {read|write|readwrite} [КЛЮЧИ]...

  Выдает роли ключ

Параметры:
  --prefix Предоставить префиксное разрешение
  --help   Показать это сообщение и выйти.
Справка для команды list (вывод списка всех ролей)#
$ pangolin-dcs-ctl role list --help
Использование: pangolin-dcs-ctl.bin role list [ОПЦИИ]

  Выводит список всех роли

Опции:
  --help Показать это сообщение и выйти.
Справка для команды revoke-permission (отзыв ключа у роли)#
$ pangolin-dcs-ctl role revoke-permission --help
Использование: pangolin-dcs-ctl.bin role revoke-permission [ОПЦИИ] РОЛЬ {read|write|readwrite} КЛЮЧ

  Отзывает ключ у роли

Опции:
  --prefix Отозвать префиксное разрешение
  --help   Показать это сообщение и выйти.

Примеры#

# Получить список всех ролей.
$ pangolin-dcs-ctl -u root:pass123 role list
role0
role1
root

# Получить информацию о ролях role0 и role1.
$ pangolin-dcs-ctl -u root:pass123 role get role0
Role role0
KV Read:
KV Write:

$ pangolin-dcs-ctl -u root:pass123 role get role1
Role role1
KV Read:
KV Write:

# Создать роль role2.
$ pangolin-dcs-ctl -u root:pass123 role add role2
Role role2 created

# Удалить роль role2.
$ pangolin-dcs-ctl -u root:pass123 role delete role2
Role role2 deleted

# Удалить роль role0. Ошибка: запрещено удалять роль, назначенную пользователю (user0).
$ pangolin-dcs-ctl -u root:pass123 role delete role0
Error: 403 Forbidden

# Создать ключ /foo от имени пользователя user0. Ошибка: у пользователя user0 нет прав на доступ к ключу /foo.
# Внимание:
# Все ключи в KV-хранилище Pangolin DCS начинаются с префикса /service/clustername,
# где /service - путь, с которого Pangolin DCS хранит всю информацию о кластере, clustername - имя кластера.
# При манипуляциях с ключами префикс /service/clustername добавляется автоматически, поэтому указывать его необязательно.
$ pangolin-dcs-ctl -u user0:pass123 put /foo value0
Error: 403 Forbidden

# Назначить роли role0 право на чтение и запись ключа /foo.
# При настройке прав доступа необходимо указывать полный путь до ключа.
$ pangolin-dcs-ctl -u root:pass123 role grant-permission role0 readwrite /service/clustername/foo
Role role0 updated

# Получить информацию о роли role0.
$ pangolin-dcs-ctl -u root:pass123 role get role0
Role role0
KV Read:
        /service/clustername/foo
KV Write:
        /service/clustername/foo

# Создать ключ /foo от имени пользователя user0.
$ pangolin-dcs-ctl -u user0:pass123 put /foo value0
OK

# Получить значение ключа /foo от имени пользователя user0.
# На первой строке выводится полный путь до ключа, на следующей - его значение.
$ pangolin-dcs-ctl -u user0:pass123 get /foo
/service/clustername/foo
value0

# Создать ключ /foo/bar от имени пользователя user0. Ошибка: у пользователя user0 нет прав на доступ к ключу /foo/bar.
$ pangolin-dcs-ctl -u user0:pass123 put /foo/bar value1
Error: 403 Forbidden

# Назначить роли role1 право на чтение и запись ключей, начиная с префикса /foo/.
# При настройке прав доступа необходимо указывать полный путь до ключа.
$ pangolin-dcs-ctl -u root:pass123 role grant-permission role1 readwrite /service/clustername/foo --prefix
Role role1 updated

# Получить информацию о роли role1.
$ pangolin-dcs-ctl -u root:pass123 role get role1
Role role1
KV Read:
        /service/clustername/foo/*
KV Write:
        /service/clustername/foo/*

# Назначить роль role1 пользователю user0.
$ pangolin-dcs-ctl -u root:pass123 user grant-role user0 role1
Role role1 is granted to user user0

# Получить информацию о пользователе user0.
$ pangolin-dcs-ctl -u root:pass123 user get user0
User user0
Roles: role0 role1

# Создать ключ /foo/bar от имени пользователя user0.
$ pangolin-dcs-ctl -u user0:pass123 put /foo/bar value1
OK

# Получить значение ключа /foo/bar от имени пользователя user0.
$ pangolin-dcs-ctl -u user0:pass123 get /foo/bar
/service/clustername/foo/bar
value1

# Отозвать роль role1 у пользователя user0.
$ pangolin-dcs-ctl -u root:pass123 user revoke-role user0 role1
Role role1 is revoked from user user0

# Получить информацию о пользователе user0.
$ pangolin-dcs-ctl -u root:pass123 user get user0
User user0
Roles: role0

# Получить значение ключа /foo/bar от имени пользователя user0. Ошибка: у пользователя user0 нет прав на доступ к ключу /foo/bar.
$ pangolin-dcs-ctl -u user0:pass123 get /foo/bar
Error: 403 Forbidden

Команды для операций с KV-хранилищем#

Справка#

Справка для команды get (получение ключа или списка ключей, соответствующих префиксу)#
$ pangolin-dcs-ctl get --help
Использование: pangolin-dcs-ctl.bin get [ОПЦИИ] КЛЮЧ

  Получает ключ или список ключей, соответствующих префиксу

Опции:
  --count-only       Получить только count
  -keys-only         Получить только ключи
  --prefix           Получить ключи с соответствующим префиксом
  --print-value-only Записывать только значения
  --help             Показать это сообщение и выйти.
Справка для команды put (помещение заданного ключа в хранилище)#
$ pangolin-dcs-ctl put --help
Использование: pangolin-dcs-ctl.bin put [ОПЦИИ] КЛЮЧ ЗНАЧЕНИЕ

  Помещает заданный ключ в хранилище

Опции:
  --help Показать это сообщение и выйти.
Справка для команды del (удаляет указанного ключ или списка ключей, соответствующих префиксу)#
$ pangolin-dcs-ctl del --help
Использование: pangolin-dcs-ctl.bin del [OPTIONS] KEY

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

Опции:
  --prefix Удаляет ключи с соответствующим префиксом.
  --help   Показать это сообщение и выйти.

Команды мониторинга#

Справка#


$ pangolin-dcs-ctl endpoint --help
Использование: pangolin-dcs-ctl.bin endpoint [ОПЦИИ] КОМАНДЫ [АРГУМЕНТТЫ]...

  Команды для проверки состояния кластера

Опции:
  --help Показать это сообщение и выйти.

Команды:
  health Проверяет состояние здоровья конечных точек, указанных в `--endpoints`...
  status Выводит статус конечных точек, указанных во флаге `--endpoints`.
Справка для команды status (вывод статуса конечных точек, указанных во флаге –endpoints)#

$ pangolin-dcs-ctl endpoint status --help
Использование: pangolin-dcs-ctl.bin endpoint status [ОПЦИИ]

  Выводит статус конечных точек, указанных во флаге `--endpoints`.

Опции:
  --endpoints TEXT URL-адреса Pangolin DCS, разделенные запятыми.
  --help           Показать это сообщение и выйти.
Справка для команды health (проверка работоспособности конечных точек, указанных во флаге –endpoints)#
$ pangolin-dcs-ctl endpoint health --help
Использование: pangolin-dcs-ctl.bin endpoint health [ОПЦИИ]

  Проверяет работоспособность конечных точек, указанных во флаге `--endpoints`.

Опции:
  --endpoints TEXT URL-адреса Pangolin DCS, разделенные запятыми.
  --help           Показать это сообщение и выйти.

Примеры#

# Получить статус текущего узла.
$ pangolin-dcs-ctl endpoint status
0.3.10,srv-0-154:2481,leader,srv-0-154:2481,3,connected,connected,connected,0,78,748590,748590,3,3,748591,748591,748591,3,748590,748590,748590,748590,8645

# Получить статус узлов, перечисленных в опции '--endpoints'.
$ pangolin-dcs-ctl endpoint status --endpoints='srv-2-8:8009,srv-0-154:8009,srv-0-148:8009,srv-0-159:8009'
0.3.10,srv-2-8:2481,follower,srv-0-154:2481,3,connected,connected,connected,0,20,748623,748623,3,0,0,748623,8757
0.3.10,srv-0-154:2481,leader,srv-0-154:2481,3,connected,connected,connected,0,18,748623,748623,3,3,748624,748624,748624,3,748623,748623,748623,748623,8753
0.3.10,srv-0-148:2481,follower,srv-0-154:2481,3,connected,connected,connected,0,17,748623,748623,3,0,0,748623,8751
0.3.10,srv-0-159:2481,follower,srv-0-154:2481,3,connected,connected,connected,0,17,748623,748623,3,0,0,748623,8748

# Получить состояние здоровья текущего узла.
$ pangolin-dcs-ctl endpoint health
srv-0-154:2481 is healthy

# Получить состояние здоровья узлов, перечисленных в опции '--endpoints'.
$ pangolin-dcs-ctl endpoint health --endpoints='srv-2-8:8009,srv-0-154:8009,srv-0-148:8009,srv-0-159:8009'
srv-2-8:2481 is healthy
srv-0-154:2481 is healthy
srv-0-148:2481 is healthy
srv-0-159:2481 is healthy

Команды для управления участниками DCS-кластера#

Справка#


$ pangolin-dcs-ctl member --help
Использование: pangolin-dcs-ctl.bin member [ОПЦИИ] КОМАНДЫ [АРГУМЕНТЫ]...

  Команды для управления участниками кластера

Опции:
  --help Показать это сообщение и выйти.

Команды:
  add     Добавляет участника в кластер
  list    Перечисляет всех участников кластера
  remove  Удаляет участника из кластера
Справка для команды add (добавление участника в кластер)#
$ pangolin-dcs-ctl member add --help
Использование: pangolin-dcs-ctl.bin member add [ОПЦИИ]

  Добавляет участника в кластер

Опции:
  --peer-urls TEXT URL-адреса пиров для нового участника, разделенные запятыми.
  --help           Показать это сообщение и выйти.
Справка для команды list (вывод списка всех участников кластера)#
$ pangolin-dcs-ctl member list --help
Использование: pangolin-dcs-ctl.bin member list [ОПЦИИ]

  Выводит список всех участников кластера

Опции:
  --help Показать это сообщение и выйти.
Справка для команды remove (удаление участника из кластера)#
$ pangolin-dcs-ctl member remove --help
Использование: pangolin-dcs-ctl.bin member remove [ОПЦИИ] URL

  Удаляет участника из кластера

Опции:
  --help Показать это сообщение и выйти.

Примеры#

# Получить список участников DCS-кластера (лидер srv-0-154:2481).
$ pangolin-dcs-ctl -u root:pass123 member list
srv-0-148:2481, connected, False
srv-0-159:2481, connected, False
srv-0-154:2481, connected, True

# Добавить участника в DCS-кластер.
$ pangolin-dcs-ctl -u root:pass123 member add --peer-urls=srv-2-8:2481
Member srv-2-8:2481 added to cluster

# Получить список участников DCS-кластера.
$ pangolin-dcs-ctl -u root:pass123 member list
srv-2-8:2481, connected, False
srv-0-148:2481, connected, False
srv-0-159:2481, connected, False
srv-0-154:2481, connected, True

# Подключиться по SSH к узлу srv-0-148 и запустить процедуру перевыборов, чтобы стать лидером.
$ pangolin-dcs-ctl -u root:pass123 member promote
A member announces its candidacy in the election

# Получить список участников кластера DCS (лидер srv-0-148:2481).
pangolin-dcs-ctl -u root:pass123 member list
srv-2-8:2481, connected, False
srv-0-154:2481, connected, False
srv-0-159:2481, connected, False
srv-0-148:2481, connected, True

# Удалить из DCS-кластера узел, являющийся лидером. Ошибка: запрещено исключать лидера из состава участников кластера.
$ pangolin-dcs-ctl -u root:pass123 member remove srv-0-148:2481
Error: 500 Internal Server Error

# Удалить из DCS-кластера узел, не являющийся лидером.
$ pangolin-dcs-ctl -u root:pass123 member remove srv-2-8:2481
Member srv-2-8:2481 removed from cluster

# Получить список участников DCS-кластера.
$ pangolin-dcs-ctl -u root:pass123 member list
srv-0-154:2481, connected, False
srv-0-159:2481, connected, False
srv-0-148:2481, connected, True

Команды для резервного копирования#

Справка#

$ pangolin-dcs-ctl snapshot --help
Использование: pangolin-dcs-ctl.bin snapshot [ОПЦИИ] КОМАНДЫ [АРГУМЕНТЫ]...

  Команды для резервного копирования

Опции:
  --help Показать это сообщение и выйти.

Команды:
  save Сохраняет снимок бэкенда узла DCS в заданный файл
Справка команды save (сохранение снимка бэкенда узла DCS в заданном файле)#
$ pangolin-dcs-ctl snapshot save --help
Использование: pangolin-dcs-ctl.bin snapshot save [ОПЦИИ] ИМЯ ФАЙЛА

  Сохраняет снимок бэкенда узла DCS в заданном файле.

Опции:
  --endpoints TEXT URL Pangolin DCS
  --help           Показать это сообщение и выйти.

Примеры#

# Выгрузить содержимое KV-хранилища текущего участника DCS-кластера в файл ./snap_1.dump.
$ pangolin-dcs-ctl -u root:pass123 snapshot save ./snap_1.dump
Snapshot saved at ./snap_1.dump

$ ls -l ./snap_1.dump
-rw------- 1 postgres postgres 4721 Mar 26 17:18 ./snap_1.dump

# Выгрузить содержимое KV-хранилища участника с URL srv-0-148:8009 в файл ./snap_2.dump.
$ pangolin-dcs-ctl -u root:pass123 snapshot save ./snap_2.dump --endpoints=srv-0-148:8009
Snapshot saved at ./snap_2.dump

$ ls -l ./snap_2.dump
-rw------- 1 postgres postgres 4728 Mar 26 17:20 ./snap_2.dump

Ошибки и предупреждения DCS#

Ошибки DCS#

Ошибки модуля pangolin_dcs#

В таблице ниже приведены возможные ошибки модуля, которые возникают в лог-файле.

N

Сообщение в логе

Расшифровка сообщения

1

ERROR: DCS:  error request denied for set/delete/expire

Не удалось изменить/удалить ключ в DCS

2

ERROR: DCS:  error SystemError for set/delete/expire

Не удалось изменить/удалить ключ в DCS

3

ERROR: DCS:  error missing leader for set/delete/expire

Не удалось изменить/удалить ключ в DCS по причине отсутствия лидера

4

ERROR: DCS:  timeout exceeded for set/delete/expire

Не дождались ответа от DCS при попытке изменить/удалить ключ

5

ERROR: DCS:  ret was: RET_CODE

Не дождались ответа от DCS при попытке изменить/удалить ключ, получили код возврата RET_CODE

6

ERROR: DCS:  set/delete/expire error in retry for key KEY

Не удалось изменить/удалить ключ KEY в DCS

7

ERROR: DCS:  could not delete key KEY, key not found

Не удалось удалить ключ KEY в DCS, такого ключа не существует

8

EXCEPTION: DCS:  Exception happened in RAFT

Во время работы DCS произошел exception, подробности в traceback

9

ERROR: DCS (init):  logfile is not accessible: ERROR_MSG

Не удалось сделать запись в лог-файл, подробная ошибка в ERROR_MSG. Проверьте доступ до файла и папки, указанного в параметре logfile в секции pangolin_dcs

10

ERROR: Could not parse dcs log rotation period from config: log_rotation_period='PERIOD'

Не удалось применить значение параметра log_rotarion_period. Проверьте заполнение секции pangolin_dcs в конфигурационном файле

11

ERROR: Dcs log rotation period must be greater than 'loop_wait' seconds and be at minimum of 10 seconds

установлено слишком маленькое значение для параметра log_rotation_period, оно должно быть больше параметра loop_wait в секундах и также должно быть больше 10 секунд

12

ERROR: DCS:  Bad value in the "pangolin_dcs.verify_client": PARAM_VALUE

Установлено неверное значение параметра verify_client в секции pangolin_dcs

13

ERROR: DCS:  could not get Raft cluster data from DCS. Error: ERROR_MSG

Не удалось получить информацию об узлах из DCS. Точная ошибка будет указана в ERROR_MSG

14

ERROR: DCS:  could not acquire leader lock. Error: ERROR_MSG

Не удалось изменить ключ leader в DCS. Точная ошибка будет указана в ERROR_MSG

15

EXCEPTION: DCS:  could not acquire leader lock. Exception: ERROR_MSG

Не удалось изменить ключ leader в DCS. Точная ошибка будет указана в ERROR_MSG

16

ERROR: DCS:  could not set '/failover' key in DCS. Error: ERROR_MSG

Не удалось изменить ключ failover в DCS. Точная ошибка будет указана в ERROR_MSG

17

EXCEPTION: DCS:  could not set '/failover' key in DCS. Exception: ERROR_MSG

Не удалось изменить ключ failover в DCS. Точная ошибка будет указана в ERROR_MSG

18

ERROR: DCS:  could not set '/config' key in DCS. Error: ERROR_MSG

Не удалось изменить ключ config в DCS. Точная ошибка будет указана в ERROR_MSG

19

EXCEPTION: DCS:  could not set '/config' key in DCS. Exception: ERROR_MSG

Не удалось изменить ключ config в DCS. Точная ошибка будет указана в ERROR_MSG

20

ERROR: DCS:  could not set '/member' key in DCS. Error: ERROR_MSG

Не удалось изменить ключ member в DCS. Точная ошибка будет указана в ERROR_MSG

21

EXCEPTION: DCS:  could not set '/member' key in DCS. Exception: ERROR_MSG

Не удалось изменить ключ member в DCS. Точная ошибка будет указана в ERROR_MSG

22

ERROR: DCS:  could not set '/initialize' key in DCS. Error: ERROR_MSG

Не удалось изменить ключ initialize в DCS. Точная ошибка будет указана в ERROR_MSG

23

EXCEPTION: DCS:  could not set '/initialize' key in DCS. Exception: ERROR_MSG

Не удалось изменить ключ initialize в DCS. Точная ошибка будет указана в ERROR_MSG

24

ERROR: DCS:  could not delete cluster from DCS. Error: ERROR_MSG

Не удалось очистить ключи в DCS. Точная ошибка будет указана в ERROR_MSG

25

EXCEPTION: DCS:  could not delete cluster from DCS. Exception: ERROR_MSG

Не удалось очистить ключи в DCS. Точная ошибка будет указана в ERROR_MSG

Ошибки API Pangolin DCS#

В таблице ниже приведены возможные ошибки API компонента Pangolin DCS.

N

Сообщение в логе

Расшифровка сообщения

1

ERROR: DCS:  User name and password are not provided

В API запросе к DCS не переданы имя пользователя и пароль для проверки доступа

2

ERROR: DCS:  User USERNAME is not found

В API запросе к DCS передано несуществующее имя пользователя

3

ERROR: DCS:  User name USERNAME or password is incorrect

Не удалось авторизоваться в DCS по переданным имени пользователя и паролю в API запросе

4

ERROR: DCS:  User USERNAME does not have administrative privileges

У пользователя USERNAME недостаточно прав чтобы выполнить API запрос

5

ERROR: DCS:  Could not check user USERNAME on having administrative privileges

Не удалось проверить пользователя USERNAME на наличие прав для выполнения запроса

6

ERROR: DCS:  User USERNAME does not have privileges PRIVILEGES for a key KEY

У пользователя USERNAME нет прав PRIVILEGES чтобы иметь доступ к ключу KEY

7

ERROR: DCS:  Could not check a user USERNAME on having privileges PRIVILEGES for a key KEY

Не удалось проверить пользователя USERNAME на наличие прав PRIVILEGES для доступа к ключу KEY

8

ERROR: DCS:  timeout to handle request exceeded

API запрос к DCS завершился по тайм-ауту

9

ERROR: DCS:  Parameter 'ttl' must be positive

Переданный в запросе параметр TTL должен быть положительный

10

ERROR: DCS:  KEY key is forbidden to be deleted manually

Ключ KEY запрещен к изменению через API запрос

11

ERROR: DCS:  Could not enable authentication

Не удалось включить авторизацию в DCS

12

ERROR: DCS:  Could not disable authentication

Не удалось выключить авторизацию в DCS

13

ERROR: DCS:  Could not get user details, since a user USERNAME is not found

Не удалось получить информацию о пользователе USERNAME, такого пользователя в DCS нет

14

ERROR: DCS:  Could not create/update user USERNAME: no request body

В запросе на создание или изменения пользователя USERNAME не было передано тело запроса

15

ERROR: DCS:  Could not create/update a user USERNAME: password required

Не удалось создать/изменить пользователя USERNAME, в запросе не был передан пароль

16

ERROR: DCS:  Could not create/update a user USERNAME: input parameters are wrong

Не удалось создать/изменить пользователя USERNAME, не верно переданы параметры пользователя. Например, есть аргумент roles, но в нем нет списка строк, либо передан аргумент grant, но в нем нет списка строк, либо передан аргумент revoke, но в нем нет списка строк, либо передан аргумент password, но он не является строкой

17

ERROR: DCS:  Could not create/update a user USERNAME: input parameters are conflicted

Не удалось создать/изменить пользователя USERNAME, были переданы одновременно аргументы roles, grant и revoke. можно передавать одновременно только roles и grant или roles и revoke

18

ERROR: DCS:  Could not create/update a user USERNAME

Не удалось создать/изменить пользователя USERNAME

19

ERROR: DCS:  Post-create/update check for a user USERNAME is failed: user is not found

Созданный/измененный пользователь USERNAME не был найден в DCS после внесения изменений

20

ERROR: DCS:  Could not delete a user USERNAME

Не удалось удалить пользователя USERNAME

21

ERROR: DCS:  Could not get role details, since a role ROLENAME is not found

Не удалось получить данные о роли ROLENAME, такой роли нет в DCS

22

ERROR: DCS:  Could not create/update role ROLENAME: no request body

В запросе на создание или изменения роли ROLENAME не было передано тело запроса

23

ERROR: DCS:  Could not create/update a role ROLENAME: input parameters are wrong

Не удалось создать/изменить роль ROLENAME, не верно переданы параметры роли. Например, не передан ни аргумент permissions ни аргумент grant или revoke, либо передан аргумент read или write внутри аргумента permissions, в котором нет списка строк, либо передан аргумент read или write внутри аргумента grant, в котором нет списка строк, либо передан аргумент read или write внутри аргумента revoke, в котором нет списка строк

24

ERROR: DCS:  Could not create/update a role ROLENAME: input parameters are conflicted

Не удалось создать/изменить роль ROLENAME, были переданы одновременно аргументы grant и revoke

25

ERROR: DCS:  Could not create/update a role ROLENAME

Не удалось создать/изменить роль ROLENAME

26

ERROR: DCS:  Post-create/update check for a role ROLENAME is failed: role is not found

Созданная/измененная роль ROLENAME не была найдена в DCS после внесения изменений

27

ERROR: DCS:  Could not delete a role ROLENAME

Не удалось удалить роль ROLENAME

28

ERROR: DCS:  No 'peerURLs' in request body to add a member

В запросе на добавление членов кластера не передан параметр peerURLs

29

ERROR: DCS:  Peer URL ADDR has invalid format, it must not start with http

В запросе на добавление членов кластера параметр адреса ADDR имеет неверный формат, адрес не может начинаться с http

30

ERROR: DCS:  Some members already exist in the cluster: ADDRS

В запросе на добавление членов кластера переданы адреса ADDRS уже имеющихся в кластере узлов

31

ERROR: DCS:  Could not add a member ADDR in the cluster

Не удалось добавить нового члена кластера с адресом ADDR

32

ERROR: DCS:  A member ADDR does not exist in the cluster

Не удалось удалить члена кластера с адресом ADDR, такого узла в кластере нет

33

ERROR: DCS:  Could not delete a member ADDR from the cluster

Не удалось удалить узел из кластера с адресом ADDR

34

EXCEPTION: DCS:  Failed to read a full dump file from PATH_TO_DUMP_FILE

Не удалось прочитать дамп из файла PATH_TO_DUMP_FILE

35

ERROR: DCS:  'peerURLs' in request body must be a list

Неверно передан параметр peerUrls в запросе на добавление члена кластера. Параметр peerUrls должен быть списком строк адресов

36

ERROR: DCS:  Peer URL 'ADDR' has invalid format, could not determine host and port

Параметр адреса ADDR в запросе на добавление члена кластера имеет неверный формат, адрес должен быть в формате host:port

37

ERROR: DCS:  Peer URL 'ADDR' has invalid format, port must be an integer in range 0 < port <= 65535

Параметр адреса ADDR в запросе на добавление члена кластера имеет неверный формат, адрес должен быть в формате host:port, где port должен быть целым числом больше 0 и меньше 65535

38

ERROR: DCS: Member 'ADDR' is the DCS leader and cannot be deleted

Узел с адресом ADDR является текущим DCS лидером и его нельзя удалить

Ошибки соединения между узлами#

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

N

Сообщение в логе

Расшифровка сообщения

1

ERROR: RAFT:  (client side): could not initialize SSL configuration

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

2

ERROR: RAFT:  (client side): SSL connection closed by server during handshake

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

3

ERROR: RAFT:  (client side): could not complete SSL handshake after N attempts: host=HOST port=PORT

Не удалось установить выполнить SSL handshake с другим узлом по адресу HOST:PORT после нескольких попыток. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле

4

ERROR: RAFT:  (client side): could not establish session to host=HOST port=PORT

Не удалось установить первичное соединение с другим узлом по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле

5

ERROR: RAFT:  failed to process connection with host=HOST port=PORT

Не удалось установить соединение с другим узлом по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры ссл соединения в конфигурационном файле

6

ERROR: RAFT:  process connection timed out with host=HOST port=PORT

Попытка установить соединение с другим узлом по адресу HOST:PORT превысила тайм-аут. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле

7

ERROR: RAFT:  failed to process connection with host=HOST port=PORT: ERROR

Не удалось установить соединение с другим узлом по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле

8

ERROR: RAFT:  could not send data to host=HOST port=PORT

Не удалось отправить данные другому узлу по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле

9

ERROR: RAFT:  could not receive data from host=HOST port=PORT

Не удалось получить никакие данные от другого узла по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле

10

ERROR: RAFT:  could not parse message from host=HOST port=PORT

Не удалось выполнить разбор сообщения, полученного от другого узла по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле

11

ERROR: RAFT (server side): failed to get serial number from PKSC#12 file PATH_TO_FILE

Не удалось получить серийный номер сертификата из файла PKCS#12 по пути PATH_TO_FILE. Проверьте сертификат и параметры SSL в конфигурационном файле

12

ERROR: RAFT (server side): failed to get serial number from certificate PATH_TO_FILE

Не удалось получить серийный номер сертификата из файла по пути PATH_TO_FILE. Проверьте сертификат и параметры SSL в конфигурационном файле

13

ERROR: RAFT (server side): certificate is not specified

Не указаны параметры pkcs12_config_path или certfile в конфигурационном файле в секции DCS

14

ERROR: RAFT (server side): failed to get mtime for PATH_TO_FILE, since it's neither directory nor file

Не удалось получить время последней модификации файла по пути PATH_TO_FILE, так как по указанному пути нет папки или файла

15

ERROR: RAFT (server side): could not initialize SSL configuration using PKCS#12 file

Не удалось проинициализировать SSL соединение, используя PKCS#12 сертификат. Проверьте сертификат и параметры SSL в конфигурационном файле

16

ERROR: RAFT (server side): could not initialize SSL configuration using PEM file

Не удалось проинициализировать SSL соединение, используя PEM сертификат по пути. Проверьте сертификат и параметры SSL в конфигурационном файле

Ошибки сериализации дампа#

В таблице ниже приведены возможные ошибки сериализации дампа.

N

Сообщение в логе

Расшифровка сообщения

1

EXCEPTION: RAFT:  got error while checking for serializing

Не удалось получить статус дочернего процесса, осуществляющего запись дампа на диск

2

EXCEPTION: RAFT:  could not perform serializing to PATH_TO_DUMP_FILE

Произошла ошибка при записи дампа на диск в файл по пути PATH_TO_DUMP_FILE. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и скорость ответа диска

3

EXCEPTION: RAFT:  failed to open file for transmission

Не удалось открыть файл дампа на диске для чтения. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение

4

EXCEPTION: RAFT:  error reading transmission file

Произошла ошибка при чтении файла дампа с диска. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение

5

EXCEPTION: RAFT:  failed to open file for incoming transition

Не удалось создать/открыть временный файл для записи по пути PATH_TO_DUMP_FILE.1.tmp. Проверьте доступность пути PATH_TO_DUMP_FILE.1.tmp на запись и чтение

6

EXCEPTION: RAFT:  failed to write incoming transition data

Не удалось записать данные в ранее открытый временный файл по пути PATH_TO_DUMP_FILE.1.tmp. Проверьте доступность пути PATH_TO_DUMP_FILE.1.tmp на запись и чтение

7

EXCEPTION: RAFT:  failed to rename temporary incoming transition file

Не удалось переместить данные из временного файла PATH_TO_DUMP_FILE.1.tmp в основной файл дампа PATH_TO_DUMP_FILE. Проверьте доступность путей PATH_TO_DUMP_FILE и PATH_TO_DUMP_FILE.1.tmp на запись и чтение

Ошибки изменения конфигурационного файла#

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

N

Сообщение в логе

Расшифровка сообщения

1

EXCEPTION: RAFT:  could not validate raft config after reload, not applying params

Параметры в секции pangolin_dcs не соответствуют требованиям (конкретная ошибка будет указана в трейсе)

Ошибки журнала операций#

В таблице ниже приведены возможные ошибки журнала операций.

N

Сообщение в логе

Расшифровка сообщения

1

EXCEPTION: RAFT:  got error while checking for journal storing

Не удалось получить статус дочернего процесса, осуществляющего запись журнала операций на диск. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение

2

EXCEPTION: RAFT:  Exception while trying to write journal to PATH_TO_JOURNAL_FILE

Не удалось выполнить запись в файл журнала операций на диске по пути PATH_TO_JOURNAL_FILE. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение

3

EXCEPTION: RAFT:  got error while checking for journal storing

Не удалось получить статус дочернего процесса, осуществляющего чтение журнала операций с диска. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение

4

ERROR: RAFT:  could not get result from reading journal file PATH_TO_JOURNAL_FILE

Не удалось обработать прочитанные данные из файла журнала операций по пути PATH_TO_JOURNAL_FILE. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение

5

EXCEPTION: RAFT:  Exception while trying to read journal from PATH_TO_JOURNAL_FILE

Не удалось выполнить чтение из файла журнала операций на диске по пути PATH_TO_JOURNAL_FILE. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение

6

EXCEPTION: RAFT:  got error while checking for meta reading PATH_TO_META_FILE

Не удалось получить статус дочернего процесса, осуществляющего чтение файла с мета-данными журнала операций по пути PATH_TO_META_FILE. Проверьте доступность пути PATH_TO_META_FILE на запись и чтение

7

ERROR: RAFT:  could not get read data from queue for file PATH_TO_META_FILE

Не удалось получить данные от дочернего процесса, прочитавшего файл с мета-данными по пути PATH_TO_META_FILE. Проверьте доступность пути PATH_TO_META_FILE на запись и чтение

8

EXCEPTION: RAFT:  got error while reading file PATH_TO_META_FILE

Не удалось прочитать файл с мета-данными по пути PATH_TO_META_FILE. Проверьте доступность пути PATH_TO_META_FILE на запись и чтение

9

EXCEPTION: RAFT:  got error while checking for meta storing for PATH_TO_META_FILE

Не удалось получить статус дочернего процесса, осуществляющего запись в файл с мета-данными журнала операций по пути PATH_TO_META_FILE. Проверьте доступность пути PATH_TO_META_FILE на запись и чтение

10

EXCEPTION: RAFT:  Exception while trying to write to PATH_TO_META_FILE

Не удалось выполнить запись мета-данных в файл по пути PATH_TO_META_FILE или его временную версию PATH_TO_META_FILE.tmp. Проверьте доступность путям PATH_TO_META_FILE и PATH_TO_META_FILE.tmp на запись и чтение

Ошибки основного модуля RAFT#

В таблице ниже приведены возможные ошибки основного модуля RAFT.

N

Сообщение в логе

Расшифровка сообщения

1

EXCEPTION: RAFT:  could not initialize file journal. Using in-memory journal

Не удалось проинициализировать файл для записи журнала операций. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение. Записи журнала хранятся в памяти

2

EXCEPTION: RAFT:  failed to perform initialization

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

3

ERROR: RAFT:  Failed to check access to disc. Keeping all journal data in memory

Не удалось проверить доступность файла для записи журнала операций. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение. Записи журнала хранятся в памяти

4

EXCEPTION: RAFT:  got error on __doApplyCommand

Ошибка при применении операции

5

EXCEPTION: RAFT:  failed to check access to disc. Keeping dump in memory

Не удалось проверить доступность файла дампа для записи дампа. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение

6

ERROR: RAFT:  failed to load full dump

Не удалось прочитать дамп из файла. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение

7

EXCEPTION: RAFT:  failed to load full dump

Не удалось прочитать дамп из файла. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение

Предупреждения DCS#

Предупреждения API Pangolin DCS#

В таблице ниже приведены возможные предупреждения API компонента Pangolin DCS.

N

Сообщение в логе

Расшифровка сообщения

1

WARNING: RAFT:  writing to disc successfully after previous failure. Changing to file journal

Последняя попытка записи журнала на диск была успешна, производится переключения на файловый журнал операций

Предупреждения основного модуля RAFT#

В таблице ниже приведены возможные предупреждения основного модуля RAFT.

N

Сообщение в логе

Расшифровка сообщения

1

WARNING: RAFT:  did not gain access to disc. Keeping all journal data in memory

Не удалось записать в журнал операций на диске, последние операции хранятся в памяти. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и скорость ответа диска

2

WARNING: RAFT:  demoting from raft leader because cannot write keys to disc

Выполняется понижение роли с лидера до ведомого в DCS кластере, так как не удается записывать операции на диск. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска

3

WARNING: RAFT:  demoting from raft leader because cannot write keys to disc

Выполняется понижение роли с лидера до ведомого в DCS кластере, так как не удается записывать операции на диск. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска

4

WARNING: RAFT:  check cycle for journaling to disc ended, journaling operation started but not ended

Был начат, но не завершен дочерний процесс записи журнала операций на диск. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска

5

WARNING: RAFT:  writing to log did not end after timeout of NUM_SECONDSs

Не удалось завершить запись последних операций на диск за NUM_SECONDS секунд. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска

6

WARNING: RAFT:  changing to in-memory journal. old journal file was PATH_TO_JOURNAL_FILE

Переключение на хранение операций в памяти. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска

7

WARNING: RAFT:  did not gain access to disc. Keeping dump in memory

Не удалось записать в файл дампа на диске, дамп содержится в памяти. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и чтение и скорость ответа диска

8

WARNING: RAFT:  dumping to disc successfully after previous failure. Changing to dump in file

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

9

WARNING: RAFT:  check cycle for serializing to disc ended, serializing operation started but not ended

Был начат, но не завершен дочерний процесс записи дампа на диск. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и чтение и скорость ответа диска

10

WARNING: RAFT:  check cycle for serializing to disc ended, serializing operation did not start

Дочерний процесс записи дампа на диск по какой-то причине не стартовал. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и чтение и скорость ответа диска

11

WARNING: RAFT:  failed to store full dump. Switch to in-memory dump

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

12

WARNING: RAFT:  could not serialize dump after NUM_SECONDSs. Switch to in-memory dump

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

13

WARNING: Could not rotate raft log, file does not exist

Не удалось выполнить ротацию лог файла DCS, файла не существует

14

WARNING: "initial_role" parameter in pangolin_dcs section is invalid, ignoring it

Параметр initial_role в секции pangolin_dcs выставлен неверно. Он может только иметь значения master или replica

15

WARNING: DCS (init):  raft log rotation by size will be disabled, which is not recommended. Consider configuring 'log_max_size' parameter

Установлено значение 0 параметру log_max_size, поэтому ротация лог файла DCS по размеру будет выключена, что не рекомендуется из-за теоретической возможности разрастания файла до большого размера в случае большого числа ошибок

16

WARNING: DCS (init):  raft Log rotation by size will occur at 8192 bytes, since the value is set less than the minimum possible

Установлено значение меньше 8192 параметра log_max_size, поэтому ротация лог файла DCS по размеру будет происходить при достижении размера в 8192 байта