Управление кластером в промышленной среде с ограниченными привилегиями¶
В данном разделе приведена информация по установке кластера Picodata в промышленной среде, в которой действуют ранее настроенные политики безопасности. Информация дополняет инструкцию по использованию роли picodata-ansible.
Общие сведения¶
В крупных организациях роли системного администратора (Администратора ОС) и Администратора БД разделены с целью обеспечения информационной безопасности. В этом случае роль позволяет выполнить первоначальную настройку серверов с учетной записью Администратора ОС и последующую инсталляцию кластера Администратором БД.
Независимо от варианта инсталляции кластера процессы инстансов на
серверах могут быть запущены под сервисной учетной записью (см.
параметры user
и group
).
Требования для установки кластера¶
Для удобства администрирования кластера корневые директории желательно
(но не обязательно) располагать в отдельном разделе (/opt
, /data
,
/app
).
На серверах кластера должны быть выполнены действия:
- установлен пакет
picodata
необходимой версии (его можно установить на шаге "Первоначальная настройка серверов") - должна присутствовать утилита
setfacl
(обычно находится в пакетеacl
) - создана учетная записи для Администратора ОС (с полными
sudo-полномочиями без запроса пароля), например
sysadm
- создана учетная записи для Администратора БД, например
dbadm
- создана учетная записи для пользователя, указанного в параметре
user
, напримерpicodata
. Администратор БД должен иметь возможность переключения на эту учетную запись без запроса пароля (sudo -su picodata
)
Параметры создания учетной записи, указанной в параметре user
:
create_home=yes
shell=/sbin/nologin
Для примера, настройка правил sudo для возможности переключения на
учетную запись picodata
из под пользователя dbadm
:
Cmnd_Alias SHELL = /bin/sh, /bin/bash"
dbadm ALL = (picodata) NOPASSWD: SHELL
В инвентарном файле:
- определить директории:
conf_dir
,data_dir
,run_dir
,log_dir
,share_dir
- выставить переменные:
user: picodata group: picodata rootless: true
Настройки для Systemd¶
Рекомендуем использовать именно этот вариант для установки кластера.
Первоначальная настройка серверов¶
Выполняется под учетной записью Администратора ОС, например sysadm
.
Первоначальная настройка серверов состоит из следующих шагов:
- при отсутствии на серверах пакета
picodata
подключите репозиторий Picodata и установите из него пакетpicodata
последней доступной версии; если отсутствует доступ в интернет, то в переменнойpicodata_package_path
можно указать путь до пакета Picodata для установки на серверах, при этом пакет должен находиться на станции управления Ansible - создайте директории для работы
picodata
- создайте службу systemd для
supervisord
(при выборе системы управления процессами Supervisord) - при выводе журналов в файлы, создайте logrotate-файл для их подрезки
Здесь и далее в примерах плейбук picodata.yml
взят из руководства по
роли Ansible.
---
- name: Deploy picodata cluster
hosts: all
become: true
tasks:
- name: Import picodata-ansible role
ansible.builtin.import_role:
name: picodata-ansible
Выполните следующую команду для подготовки серверов:
ansible-playbook -i <inventory> picodata.yml -t deploy_become -u sysadm -k
Инсталляция кластера¶
Выполняется под учетной записью Администратора БД, например dbadm
.
Установка кластера выполняется командой:
ansible-playbook -i <inventory> picodata.yml -u dbadm --become-user=picodata -k
При этом задачи, требующие повышенных привилегий, будут пропущены.
Рекомендация
Используйте доступ к серверам по ssh-ключу вместо пароля.
Управление кластером без повышения привилегий¶
Администратор БД может работать с процессами инстансов при переключении
на пользователя, указанного в параметре user
После переключения на пользователя user
для работы systemctl
выставите переменную окружения XDG_RUNTIME_DIR
командой:
export XDG_RUNTIME_DIR=/run/user/$(id -u)
Примеры команд для управления процессами инстансов на серверах кластера, которые может выполнять Администратор БД (без sudo):
systemctl --user --all status test@*
systemctl --user restart test@default-1000
systemctl --user -s HUP kill test@router-1001
systemctl --user --all stop test@*
Где:
cluster_name
=test
default-1000
,router-1001
— названия инстансов кластера
Удаление кластера¶
Удаление кластера выполняется в обратном порядке: сначала под учетной
записью Администратора БД (например dbadm
) остановите кластер и
удалите данные, затем, при необходимости, под Администратором ОС удалите
системные файлы и директории.
Для удаления кластера выполните команду:
ansible-playbook -i <inventory> picodata.yml -t remove -u dbadm --become-user=picodata -k
Очистка серверов от системных файлов кластера¶
Выполняется под учетной записью Администратора ОС, например sysadm
.
Для очистки серверов выполните команду:
ansible-playbook -i <inventory> picodata.yml -t remove_become -u sysadm -k
При этом будут удалены все корневые директории, которые были созданы для кластера.
Настройки для Supervisord¶
На серверах:
- установлен пакет
supervisor
В инвентарном файле:
- при необходимости определить директории:
supervisord_dir
- выставить значение переменной
init_system
вsupervisord
Первоначальная настройка серверов, инсталляция и удаление кластера
проводятся теми же командами, как и для supervisord
Работа с кластером через Supervisord¶
Примеры команд для управления процессами инстансов на серверах кластера, которые может выполнять Администратор БД:
supervisorctl -c /data/picodata/supervisord/test.conf status
supervisorctl -c /data/picodata/supervisord/test.conf restart default-1000
supervisorctl -c /data/picodata/supervisord/test.conf signal HUP router-1001
supervisorctl -c /data/picodata/supervisord/test.conf stop all
Где:
supervisor_dir
=/data/picodata/supervisord
cluster_name
=test
default-1000
,router-1001
— названия инстансов
Для удобства администратотра можно установить псевдоним (alias) в shell-оболочке:
picosuper='supervisorctl -c /data/picodata/supervisord/test.conf'
и в дальнейшем использовать его при вызове команд:
picosuper status
picosuper restart default-1000
picosuper signal HUP router-1001
picosuper stop all