Управление кластером в промышленной среде с ограниченными привилегиями¶
В данном разделе приведена информация по установке кластера 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) в командной оболочке:
picosuper='supervisorctl -c /data/picodata/supervisord/test.conf'
и в дальнейшем использовать его при вызове команд:
picosuper status
picosuper restart default-1000
picosuper signal HUP router-1001
picosuper stop all