Администрирование Pangolin DCS
Pangolin DCS — это модуль распределенного хранилища конфигурации внутри компонента Pangolin Manager, который реализует Raft-алгоритм.
Raft-алгоритм решения консенсуса в кластере надежных вычислений
Основы алгоритма
Raft используется поверх кластера однообразных слабо связных узлов, на каждом из которых работает машина состояний. Raft-алгоритм обеспечивает надежную доставку сигналов на все узлы в заданном порядке. Благодаря чему обеспечивается переход всех машин состояний по одним и тем же последовательностям состояний, и каждый узел гарантированно приходит в согласие с другими узлами.
В Raft-кластере каждый из серверов в каждый момент времени находится в одном из трех состояний:
- leader (мастер) – сервер обрабатывает все клиентские запросы, является источником истины всех данных в логе, поддерживает лог ведомых серверов;
- follower (реплика) – пассивный сервер, который только «слушает» новые записи в лог от мастера и перенаправляет все входящие запросы от клиентов на мастера;
- candidate (кандидат) – специальное состояние сервера, возможное только в момент выборов нового мастера (голосования).
Управление кластером четко разделено на две фазы:
- выборы мастера (голосование);
- репликация (передача данных протокола).
Выборы мастера
Raft предполагает, что на кластере всегда существует явно выделенный мастер. Только мастер отправляет новые записи на другие узлы (реплики) кластера. Остальные узлы следуют за мастером и не взаимодействуют между собой (за исключением фазы голосования). Если внешний клиент подключается к кластеру через обычный узел, то все его запросы перенаправляются мастеру и только оттуда приходят на остальные узлы.
Если узел долго не получает сообщений от мастера, то он переходит в состояние кандидата и посылает другим узлам запрос на голосование. Другие узлы голосуют за того кандидата, от которого они получили первый запрос. Если кандидат получает сообщение от мастера, то он снимает свою кандидатуру и возвращается в обычное состояние. Если кандидат получает большинство голосов, то он становится мастером. Если он не получил большинства (это случай, когда на кластере возникли сразу несколько кандидатов и голоса разделились), то кандидат ждет случайное время и инициирует новую процедуру голосования.
Процедура голосования повторяется, пока не будет выбран мастер. Как только мастер определен, все узлы узнают о нем и начинается процесс репликации данных протокола.
Репликация протокола
Мастер полностью отвечает за правильную репликацию протоколов. Он отправляет всем узлам кластера запрос на добавление новой записи и считает транзакцию успешной только после того, как большинство узлов подтвердили, что данные были применены и результат сохранен на постоянный носитель.
Установка Pangolin DCS
Pangolin DCS является частью Pangolin Manager. Развертывание Pangolin DCS происходит поэтапно:
-
Включение параметра
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
и настройка каталогов с утилитами. -
Настройка параметров 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:
-
Добавьте пользователя
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>"}'
-
Добавьте «обычного» пользователя:
curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/users/test_user -d '{"password":"<Пароль пользователя>"}'
-
Добавьте роль с правами на чтение и запись:
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/*"]}}}'
-
Назначьте роль «обычному» пользователю:
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"]}'
-
Проверьте статус авторизации (вкл/выкл) — пользователя
root
:curl -iS -XGET --cert /pg_ssl/client.crt --key /pg_ssl/client.key -u root:<Пароль root> https://<server_name>:<port>/v2/auth/enable
-
Включите авторизацию:
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 байта |