Перейти к основному содержимому

Администрирование 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Сообщение в логеРасшифровка сообщения
1ERROR: DCS: error request denied for set/delete/expireНе удалось изменить/удалить ключ в DCS
2ERROR: DCS: error SystemError for set/delete/expireНе удалось изменить/удалить ключ в DCS
3ERROR: DCS: error missing leader for set/delete/expireНе удалось изменить/удалить ключ в DCS по причине отсутствия лидера
4ERROR: DCS: timeout exceeded for set/delete/expireНе дождались ответа от DCS при попытке изменить/удалить ключ
5ERROR: DCS: ret was: RET_CODEНе дождались ответа от DCS при попытке изменить/удалить ключ, получили код возврата RET_CODE
6ERROR: DCS: set/delete/expire error in retry for key KEYНе удалось изменить/удалить ключ KEY в DCS
7ERROR: DCS: could not delete key KEY, key not foundНе удалось удалить ключ KEY в DCS, такого ключа не существует
8EXCEPTION: DCS: Exception happened in RAFTВо время работы DCS произошел exception, подробности в traceback
9ERROR: DCS (init): logfile is not accessible: ERROR_MSGНе удалось сделать запись в лог-файл, подробная ошибка в ERROR_MSG. Проверьте доступ до файла и папки, указанного в параметре logfile в секции pangolin_dcs
10ERROR: Could not parse dcs log rotation period from config: log_rotation_period='PERIOD'Не удалось применить значение параметра log_rotarion_period. Проверьте заполнение секции pangolin_dcs в конфигурационном файле
11ERROR: Dcs log rotation period must be greater than 'loop_wait' seconds and be at minimum of 10 secondsустановлено слишком маленькое значение для параметра log_rotation_period, оно должно быть больше параметра loop_wait в секундах и также должно быть больше 10 секунд
12ERROR: DCS: Bad value in the "pangolin_dcs.verify_client": PARAM_VALUEУстановлено неверное значение параметра verify_client в секции pangolin_dcs
13ERROR: DCS: could not get Raft cluster data from DCS. Error: ERROR_MSGНе удалось получить информацию об узлах из DCS. Точная ошибка будет указана в ERROR_MSG
14ERROR: DCS: could not acquire leader lock. Error: ERROR_MSGНе удалось изменить ключ leader в DCS. Точная ошибка будет указана в ERROR_MSG
15EXCEPTION: DCS: could not acquire leader lock. Exception: ERROR_MSGНе удалось изменить ключ leader в DCS. Точная ошибка будет указана в ERROR_MSG
16ERROR: DCS: could not set '/failover' key in DCS. Error: ERROR_MSGНе удалось изменить ключ failover в DCS. Точная ошибка будет указана в ERROR_MSG
17EXCEPTION: DCS: could not set '/failover' key in DCS. Exception: ERROR_MSGНе удалось изменить ключ failover в DCS. Точная ошибка будет указана в ERROR_MSG
18ERROR: DCS: could not set '/config' key in DCS. Error: ERROR_MSGНе удалось изменить ключ config в DCS. Точная ошибка будет указана в ERROR_MSG
19EXCEPTION: DCS: could not set '/config' key in DCS. Exception: ERROR_MSGНе удалось изменить ключ config в DCS. Точная ошибка будет указана в ERROR_MSG
20ERROR: DCS: could not set '/member' key in DCS. Error: ERROR_MSGНе удалось изменить ключ member в DCS. Точная ошибка будет указана в ERROR_MSG
21EXCEPTION: DCS: could not set '/member' key in DCS. Exception: ERROR_MSGНе удалось изменить ключ member в DCS. Точная ошибка будет указана в ERROR_MSG
22ERROR: DCS: could not set '/initialize' key in DCS. Error: ERROR_MSGНе удалось изменить ключ initialize в DCS. Точная ошибка будет указана в ERROR_MSG
23EXCEPTION: DCS: could not set '/initialize' key in DCS. Exception: ERROR_MSGНе удалось изменить ключ initialize в DCS. Точная ошибка будет указана в ERROR_MSG
24ERROR: DCS: could not delete cluster from DCS. Error: ERROR_MSGНе удалось очистить ключи в DCS. Точная ошибка будет указана в ERROR_MSG
25EXCEPTION: DCS: could not delete cluster from DCS. Exception: ERROR_MSGНе удалось очистить ключи в DCS. Точная ошибка будет указана в ERROR_MSG

Ошибки API Pangolin DCS

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

NСообщение в логеРасшифровка сообщения
1ERROR: DCS: User name and password are not providedВ API запросе к DCS не переданы имя пользователя и пароль для проверки доступа
2ERROR: DCS: User USERNAME is not foundВ API запросе к DCS передано несуществующее имя пользователя
3ERROR: DCS: User name USERNAME or password is incorrectНе удалось авторизоваться в DCS по переданным имени пользователя и паролю в API запросе
4ERROR: DCS: User USERNAME does not have administrative privilegesУ пользователя USERNAME недостаточно прав чтобы выполнить API запрос
5ERROR: DCS: Could not check user USERNAME on having administrative privilegesНе удалось проверить пользователя USERNAME на наличие прав для выполнения запроса
6ERROR: DCS: User USERNAME does not have privileges PRIVILEGES for a key KEYУ пользователя USERNAME нет прав PRIVILEGES чтобы иметь доступ к ключу KEY
7ERROR: DCS: Could not check a user USERNAME on having privileges PRIVILEGES for a key KEYНе удалось проверить пользователя USERNAME на наличие прав PRIVILEGES для доступа к ключу KEY
8ERROR: DCS: timeout to handle request exceededAPI запрос к DCS завершился по тайм-ауту
9ERROR: DCS: Parameter 'ttl' must be positiveПереданный в запросе параметр TTL должен быть положительный
10ERROR: DCS: KEY key is forbidden to be deleted manuallyКлюч KEY запрещен к изменению через API запрос
11ERROR: DCS: Could not enable authenticationНе удалось включить авторизацию в DCS
12ERROR: DCS: Could not disable authenticationНе удалось выключить авторизацию в DCS
13ERROR: DCS: Could not get user details, since a user USERNAME is not foundНе удалось получить информацию о пользователе USERNAME, такого пользователя в DCS нет
14ERROR: DCS: Could not create/update user USERNAME: no request bodyВ запросе на создание или изменения пользователя USERNAME не было передано тело запроса
15ERROR: DCS: Could not create/update a user USERNAME: password requiredНе удалось создать/изменить пользователя USERNAME, в запросе не был передан пароль
16ERROR: DCS: Could not create/update a user USERNAME: input parameters are wrongНе удалось создать/изменить пользователя USERNAME, не верно переданы параметры пользователя. Например, есть аргумент roles, но в нем нет списка строк, либо передан аргумент grant, но в нем нет списка строк, либо передан аргумент revoke, но в нем нет списка строк, либо передан аргумент password, но он не является строкой
17ERROR: DCS: Could not create/update a user USERNAME: input parameters are conflictedНе удалось создать/изменить пользователя USERNAME, были переданы одновременно аргументы roles, grant и revoke. можно передавать одновременно только roles и grant или roles и revoke
18ERROR: DCS: Could not create/update a user USERNAMEНе удалось создать/изменить пользователя USERNAME
19ERROR: DCS: Post-create/update check for a user USERNAME is failed: user is not foundСозданный/измененный пользователь USERNAME не был найден в DCS после внесения изменений
20ERROR: DCS: Could not delete a user USERNAMEНе удалось удалить пользователя USERNAME
21ERROR: DCS: Could not get role details, since a role ROLENAME is not foundНе удалось получить данные о роли ROLENAME, такой роли нет в DCS
22ERROR: DCS: Could not create/update role ROLENAME: no request bodyВ запросе на создание или изменения роли ROLENAME не было передано тело запроса
23ERROR: 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, в котором нет списка строк
24ERROR: DCS: Could not create/update a role ROLENAME: input parameters are conflictedНе удалось создать/изменить роль ROLENAME, были переданы одновременно аргументы grant и revoke
25ERROR: DCS: Could not create/update a role ROLENAMEНе удалось создать/изменить роль ROLENAME
26ERROR: DCS: Post-create/update check for a role ROLENAME is failed: role is not foundСозданная/измененная роль ROLENAME не была найдена в DCS после внесения изменений
27ERROR: DCS: Could not delete a role ROLENAMEНе удалось удалить роль ROLENAME
28ERROR: DCS: No 'peerURLs' in request body to add a memberВ запросе на добавление членов кластера не передан параметр peerURLs
29ERROR: DCS: Peer URL ADDR has invalid format, it must not start with httpВ запросе на добавление членов кластера параметр адреса ADDR имеет неверный формат, адрес не может начинаться с http
30ERROR: DCS: Some members already exist in the cluster: ADDRSВ запросе на добавление членов кластера переданы адреса ADDRS уже имеющихся в кластере узлов
31ERROR: DCS: Could not add a member ADDR in the clusterНе удалось добавить нового члена кластера с адресом ADDR
32ERROR: DCS: A member ADDR does not exist in the clusterНе удалось удалить члена кластера с адресом ADDR, такого узла в кластере нет
33ERROR: DCS: Could not delete a member ADDR from the clusterНе удалось удалить узел из кластера с адресом ADDR
34EXCEPTION: DCS: Failed to read a full dump file from PATH_TO_DUMP_FILEНе удалось прочитать дамп из файла PATH_TO_DUMP_FILE
35ERROR: DCS: 'peerURLs' in request body must be a listНеверно передан параметр peerUrls в запросе на добавление члена кластера. Параметр peerUrls должен быть списком строк адресов
36ERROR: DCS: Peer URL 'ADDR' has invalid format, could not determine host and portПараметр адреса ADDR в запросе на добавление члена кластера имеет неверный формат, адрес должен быть в формате host:port
37ERROR: DCS: Peer URL 'ADDR' has invalid format, port must be an integer in range 0 < port <= 65535Параметр адреса ADDR в запросе на добавление члена кластера имеет неверный формат, адрес должен быть в формате host:port, где port должен быть целым числом больше 0 и меньше 65535
38ERROR: DCS: Member 'ADDR' is the DCS leader and cannot be deletedУзел с адресом ADDR является текущим DCS лидером и его нельзя удалить

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

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

NСообщение в логеРасшифровка сообщения
1ERROR: RAFT: (client side): could not initialize SSL configurationНе удалось проинициализировать SSL соединение. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле
2ERROR: RAFT: (client side): SSL connection closed by server during handshakeСоединение с другим узлом было прервано во время попытки установить SSL handshake. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле
3ERROR: RAFT: (client side): could not complete SSL handshake after N attempts: host=HOST port=PORTНе удалось установить выполнить SSL handshake с другим узлом по адресу HOST:PORT после нескольких попыток. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле
4ERROR: RAFT: (client side): could not establish session to host=HOST port=PORTНе удалось установить первичное соединение с другим узлом по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле
5ERROR: RAFT: failed to process connection with host=HOST port=PORTНе удалось установить соединение с другим узлом по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры ссл соединения в конфигурационном файле
6ERROR: RAFT: process connection timed out with host=HOST port=PORTПопытка установить соединение с другим узлом по адресу HOST:PORT превысила тайм-аут. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле
7ERROR: RAFT: failed to process connection with host=HOST port=PORT: ERRORНе удалось установить соединение с другим узлом по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле
8ERROR: RAFT: could not send data to host=HOST port=PORTНе удалось отправить данные другому узлу по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле
9ERROR: RAFT: could not receive data from host=HOST port=PORTНе удалось получить никакие данные от другого узла по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле
10ERROR: RAFT: could not parse message from host=HOST port=PORTНе удалось выполнить разбор сообщения, полученного от другого узла по адресу HOST:PORT. Проверьте доступность соединения между узлами и параметры SSL соединения в конфигурационном файле
11ERROR: RAFT (server side): failed to get serial number from PKSC#12 file PATH_TO_FILEНе удалось получить серийный номер сертификата из файла PKCS#12 по пути PATH_TO_FILE. Проверьте сертификат и параметры SSL в конфигурационном файле
12ERROR: RAFT (server side): failed to get serial number from certificate PATH_TO_FILEНе удалось получить серийный номер сертификата из файла по пути PATH_TO_FILE. Проверьте сертификат и параметры SSL в конфигурационном файле
13ERROR: RAFT (server side): certificate is not specifiedНе указаны параметры pkcs12_config_path или certfile в конфигурационном файле в секции DCS
14ERROR: RAFT (server side): failed to get mtime for PATH_TO_FILE, since it's neither directory nor fileНе удалось получить время последней модификации файла по пути PATH_TO_FILE, так как по указанному пути нет папки или файла
15ERROR: RAFT (server side): could not initialize SSL configuration using PKCS#12 fileНе удалось проинициализировать SSL соединение, используя PKCS#12 сертификат. Проверьте сертификат и параметры SSL в конфигурационном файле
16ERROR: RAFT (server side): could not initialize SSL configuration using PEM fileНе удалось проинициализировать SSL соединение, используя PEM сертификат по пути. Проверьте сертификат и параметры SSL в конфигурационном файле

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

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

NСообщение в логеРасшифровка сообщения
1EXCEPTION: RAFT: got error while checking for serializingНе удалось получить статус дочернего процесса, осуществляющего запись дампа на диск
2EXCEPTION: RAFT: could not perform serializing to PATH_TO_DUMP_FILEПроизошла ошибка при записи дампа на диск в файл по пути PATH_TO_DUMP_FILE. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и скорость ответа диска
3EXCEPTION: RAFT: failed to open file for transmissionНе удалось открыть файл дампа на диске для чтения. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение
4EXCEPTION: RAFT: error reading transmission fileПроизошла ошибка при чтении файла дампа с диска. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение
5EXCEPTION: RAFT: failed to open file for incoming transitionНе удалось создать/открыть временный файл для записи по пути PATH_TO_DUMP_FILE.1.tmp. Проверьте доступность пути PATH_TO_DUMP_FILE.1.tmp на запись и чтение
6EXCEPTION: RAFT: failed to write incoming transition dataНе удалось записать данные в ранее открытый временный файл по пути PATH_TO_DUMP_FILE.1.tmp. Проверьте доступность пути PATH_TO_DUMP_FILE.1.tmp на запись и чтение
7EXCEPTION: 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Сообщение в логеРасшифровка сообщения
1EXCEPTION: RAFT: could not validate raft config after reload, not applying paramsПараметры в секции pangolin_dcs не соответствуют требованиям (конкретная ошибка будет указана в трейсе)

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

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

NСообщение в логеРасшифровка сообщения
1EXCEPTION: RAFT: got error while checking for journal storingНе удалось получить статус дочернего процесса, осуществляющего запись журнала операций на диск. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение
2EXCEPTION: RAFT: Exception while trying to write journal to PATH_TO_JOURNAL_FILEНе удалось выполнить запись в файл журнала операций на диске по пути PATH_TO_JOURNAL_FILE. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение
3EXCEPTION: RAFT: got error while checking for journal storingНе удалось получить статус дочернего процесса, осуществляющего чтение журнала операций с диска. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение
4ERROR: RAFT: could not get result from reading journal file PATH_TO_JOURNAL_FILEНе удалось обработать прочитанные данные из файла журнала операций по пути PATH_TO_JOURNAL_FILE. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение
5EXCEPTION: RAFT: Exception while trying to read journal from PATH_TO_JOURNAL_FILEНе удалось выполнить чтение из файла журнала операций на диске по пути PATH_TO_JOURNAL_FILE. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение
6EXCEPTION: RAFT: got error while checking for meta reading PATH_TO_META_FILEНе удалось получить статус дочернего процесса, осуществляющего чтение файла с мета-данными журнала операций по пути PATH_TO_META_FILE. Проверьте доступность пути PATH_TO_META_FILE на запись и чтение
7ERROR: RAFT: could not get read data from queue for file PATH_TO_META_FILEНе удалось получить данные от дочернего процесса, прочитавшего файл с мета-данными по пути PATH_TO_META_FILE. Проверьте доступность пути PATH_TO_META_FILE на запись и чтение
8EXCEPTION: RAFT: got error while reading file PATH_TO_META_FILEНе удалось прочитать файл с мета-данными по пути PATH_TO_META_FILE. Проверьте доступность пути PATH_TO_META_FILE на запись и чтение
9EXCEPTION: RAFT: got error while checking for meta storing for PATH_TO_META_FILEНе удалось получить статус дочернего процесса, осуществляющего запись в файл с мета-данными журнала операций по пути PATH_TO_META_FILE. Проверьте доступность пути PATH_TO_META_FILE на запись и чтение
10EXCEPTION: 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Сообщение в логеРасшифровка сообщения
1EXCEPTION: RAFT: could not initialize file journal. Using in-memory journalНе удалось проинициализировать файл для записи журнала операций. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение. Записи журнала хранятся в памяти
2EXCEPTION: RAFT: failed to perform initializationНе удалось проинициализировать соединения с другими узлами на старте этого узла. Проверьте соединение между узлами
3ERROR: RAFT: Failed to check access to disc. Keeping all journal data in memoryНе удалось проверить доступность файла для записи журнала операций. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение. Записи журнала хранятся в памяти
4EXCEPTION: RAFT: got error on __doApplyCommandОшибка при применении операции
5EXCEPTION: RAFT: failed to check access to disc. Keeping dump in memoryНе удалось проверить доступность файла дампа для записи дампа. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение
6ERROR: RAFT: failed to load full dumpНе удалось прочитать дамп из файла. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение
7EXCEPTION: RAFT: failed to load full dumpНе удалось прочитать дамп из файла. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение

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

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

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

NСообщение в логеРасшифровка сообщения
1WARNING: RAFT: writing to disc successfully after previous failure. Changing to file journalПоследняя попытка записи журнала на диск была успешна, производится переключения на файловый журнал операций

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

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

NСообщение в логеРасшифровка сообщения
1WARNING: RAFT: did not gain access to disc. Keeping all journal data in memoryНе удалось записать в журнал операций на диске, последние операции хранятся в памяти. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и скорость ответа диска
2WARNING: RAFT: demoting from raft leader because cannot write keys to discВыполняется понижение роли с лидера до ведомого в DCS кластере, так как не удается записывать операции на диск. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска
3WARNING: RAFT: demoting from raft leader because cannot write keys to discВыполняется понижение роли с лидера до ведомого в DCS кластере, так как не удается записывать операции на диск. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска
4WARNING: RAFT: check cycle for journaling to disc ended, journaling operation started but not endedБыл начат, но не завершен дочерний процесс записи журнала операций на диск. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска
5WARNING: RAFT: writing to log did not end after timeout of NUM_SECONDSsНе удалось завершить запись последних операций на диск за NUM_SECONDS секунд. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска
6WARNING: RAFT: changing to in-memory journal. old journal file was PATH_TO_JOURNAL_FILEПереключение на хранение операций в памяти. Проверьте доступность пути PATH_TO_JOURNAL_FILE на запись и чтение и чтение и скорость ответа диска
7WARNING: RAFT: did not gain access to disc. Keeping dump in memoryНе удалось записать в файл дампа на диске, дамп содержится в памяти. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и чтение и скорость ответа диска
8WARNING: RAFT: dumping to disc successfully after previous failure. Changing to dump in fileПоследняя попытка записи дампа на диск была успешна, производится переключения на файловый дамп. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и чтение и скорость ответа диска
9WARNING: RAFT: check cycle for serializing to disc ended, serializing operation started but not endedБыл начат, но не завершен дочерний процесс записи дампа на диск. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и чтение и скорость ответа диска
10WARNING: RAFT: check cycle for serializing to disc ended, serializing operation did not startДочерний процесс записи дампа на диск по какой-то причине не стартовал. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и чтение и скорость ответа диска
11WARNING: RAFT: failed to store full dump. Switch to in-memory dumpНе удалось запись дам на диск, дамп будет храниться в памяти. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и чтение и скорость ответа диска
12WARNING: RAFT: could not serialize dump after NUM_SECONDSs. Switch to in-memory dumpНе удалось завершить запись дампа на диск за NUM_SECONDS секунд, дамп будет храниться в памяти. Проверьте доступность пути PATH_TO_DUMP_FILE на запись и чтение и чтение и скорость ответа диска
13WARNING: Could not rotate raft log, file does not existНе удалось выполнить ротацию лог файла DCS, файла не существует
14WARNING: "initial_role" parameter in pangolin_dcs section is invalid, ignoring itПараметр initial_role в секции pangolin_dcs выставлен неверно. Он может только иметь значения master или replica
15WARNING: 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 по размеру будет выключена, что не рекомендуется из-за теоретической возможности разрастания файла до большого размера в случае большого числа ошибок
16WARNING: 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 байта