Настройка
Настройка Pangolin DCS осуществляется параметрами в конфигурационном файле postgres.yml в секции pangolin_dcs.
- Описание параметров конфигурационного файла
- Примеры конфигурационных файлов
- Пример настройки авторизации внутри DCS при включенном SSL и pem-сертификатах
- Настройка параметров доступа к каталогам
- Пример настройки службы
Описание параметров конфигурационного файла
Обязательные параметры
Параметр | Описание |
|---|---|
| Адрес текущего узла в формате |
| Список адресов остальных узлов в формате |
| Путь к директории для хранения журнала операций и текущих значений ключей |
Необязательные параметры
Параметр | Описание | Значение по умолчанию |
|---|---|---|
| Максимальный размер в байтах для файла с журналом операций | 10 Мбайт |
| Время тайм-аута (в секундах), по истечении которого операция записи/чтения журнала считается неуспешной | Равен параметру |
| Число максимально содержащихся в памяти последних записей журнала |
|
| Выполнение перечитывания журнала операций при перезапуске службы |
|
| Путь к директории для хранения дампа | Берется из параметра |
| Интервал создания дампа, в секундах |
|
| Время тайм-аута (в секундах), по истечении которого операция записи/чтения дампа считается неуспешной | Равен параметру |
| Путь к файлу с логом от |
|
| Максимальный размер в байтах для файла с логом | 20 Мбайт |
| Интервал ротации файла с логом |
|
| Частота, с которой мастер DCS-кластера сообщает остальным узлам о своей доступности (в миллисекундах) | 100 миллисекунд |
| Таймаут ожидания heartbeat от мастера перед инициацией узлом нового голосования (в миллисекундах) | 400 миллисекунд |
| Серверный сертификат Pangolin DCS для установления SSL-подключений | Отсутствует |
| Закрытый ключ Pangolin DCS, соответствующий серверному сертификату | Отсутствует |
| Пароль для рассекречивания закрытого ключа (если защищен паролем) | Отсутствует |
| Корневой сертификат УЦ (CA) | Отсутствует |
| Путь к директории, содержащей файлы с доверенными сертификатами УЦ (CA) | Отсутствует |
| Путь к файлу со списком отозванных сертификатов (CRL) | Отсутствует |
| Путь к директории, содержащей файлы со списком отозванных сертификатов (CRL) | Отсутствует |
| Путь к файлу в формате JSON, который содержит данные для запроса сертификата из SecMan или парольную фразу для доступа к контейнеру PKCS#12 и путь к контейнеру | Отсутствует |
| Определяет, требуется ли запрашивать и проверять клиентский сертификат DCS | Возможные значения:
|
| Определяет, требуется ли запрашивать и проверять серверный сертификат DCS |
|
| На серверах с установленным OpenSSL 1.1.0 и выше позволяет переключиться с протокола TLSv1.3 на TLSv1.2 |
|
Примеры конфигурационных файлов
Ниже приведен пример конфигурационного файла для компонента Pangolin Manager, где <server_ip_1>, <server_ip_2>, <server_ip_3> образуют DCS-кластер.
pangolin_dcs:
self_addr: <server_ip_1>:2481
partner_addrs: <server_ip_2>:2481,<server_ip_3>: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
Пример конфигурации для защиты REST интерфейса
Ниже приведен пример конфигурации для защиты REST API от неавторизированного доступа.
pangolin_dcs:
# параметры для rest api pangolin_dcs
restapi:
listen: 0.0.0.0:8009
connect_address: <server_ip_1>: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-сертификатах
При активированной авторизации все запросы на изменение, либо просмотр ключей будут доступны только пользователю, который имеет необходимые права. Ниже приведен пример создания суперпользователя, пользователя, роли и включения авторизации:
-
Добавьте пользователя
root:curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://<server_name>:<port>/v2/auth/users/root -d '{"password":"<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":"<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:<password_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
Настройка параметров доступа к каталогам
Для функционирования Pangolin Manager в режиме DCS на узле арбитра необходима установка файла лицензии /opt/pangolin-license.
Утилиты безопасности (setup_kms_credentials, pg_auth_password, pangolin-certs-rotate) из пакета Pangolin Manager и утилиты pangolin-auth-reencrypt также могут потребовать создания пользователя безопасности 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-3.1.1 - drwx---r-x------ 5 postgres postgres
/opt/pangolin-manager-3.1.1/bin - drwx-----x 3 postgres postgres
/opt/pangolin-manager-3.1.1/lib - drwx---r-x 4 postgres postgres
/opt/pangolin-manager-3.1.1/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]