Перейти к содержанию

Управление кластером в промышленной среде с ограниченными привилегиями

В данном разделе приведена информация по установке кластера 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