Установка
Требования к серверам#
- OS Linux с версией ядра не ниже 5
- SELinux должен быть отключен (работа с включенным SELinux не проверялась)
- ПО, осуществляющее функциональность сетевых экранов (
firewalld,ufw, …) должно быть отключено - установленное ПО docker версии не ниже 26
- пользователь, с правами выполнения команд
docker - доступ в репозиторий артефактов Altuera
cr.repo.altuera.ru
| роль сервера | типовые требования к оборудованию |
|---|---|
service | 4 vCPU, 4 GB RAM, свободных 20 GB HDD |
analyzer | 8 vCPU, 4 GB RAM, свободных 40 GB HDD |
balancer | 4 vCPU, 4 GB RAM, свободных 20 GB HDD |
worker | 8 vCPU, 8 GB RAM, свободных 40 GB HDD (от 5000 IOPS) |
Для отказоустойчивой инсталляции (более одной service ноды или более одного manager) также требуется распределенное отказоустойчивое хранилище данных.
Все серверы должны иметь доступ к docker репозиторию
cr.repo.altuera.ru(доступ запрашивается у аккаунт менеджера Altuera. Если это не возможно, то необходимо вручную (используя командуdocker load) загрузить образы на ВСЕ серверы
Требования к настройке БД Postgres#
Параметры настройки БД для платформы SmartCPD:
- Отдельная БД
- Пользователь-владелец этой БД, со схемой по-умолчанию
public - Пользователь для
grafanaсо схемой по-умолчаниюgrafana, имеющий права на все объекты данной схемы
Пример скрипта инициализации БД для SmartCPD:
-- create smartcpd user and database
CREATE USER $DB_SMARTCPD_USER WITH PASSWORD '$DB_SMARTCPD_PASSWORD';
CREATE DATABASE $DB_SMARTCPD_NAME OWNER $DB_SMARTCPD_USER;
-- default schema for smartcpd user
ALTER ROLE $DB_SMARTCPD_USER SET search_path TO public;
-- create grafana user and schema (owned by grafana)
CREATE USER $DB_GRAFANA_USER WITH PASSWORD '$DB_GRAFANA_PASSWORD';
-- switch to DB to create schema
\c $DB_SMARTCPD_NAME
CREATE SCHEMA grafana AUTHORIZATION $DB_GRAFANA_USER;
-- enforce access for grafana user
GRANT ALL ON SCHEMA grafana TO $DB_GRAFANA_USER;
ALTER ROLE $DB_GRAFANA_USER SET search_path TO grafana;Чеклист для установки#
Эти данные необходимо собрать к моменту начала установки продукта.
| Параметр | Значение | Комментарий |
|---|---|---|
| ИНН | Не может быть изменен в дальнейшем, на него будет выписана лицензия | |
| email администратора | Может быть изменен через портал, пользователь по-умолчанию | |
| пароль администратора | Может быть изменен через портал | |
| доменное имя (адрес) для веб портала | если подключение без внешнего балансировщика | |
| файл TLS сертификата сервера | формат PEM, должен включать все intermediateCA | |
| файл ключа TLS сертификата сервера | формат PEM | |
| хост или ip адрес сервера Postgres | ||
| порт сервера Postgres | ||
| имя базы данных на сервере Postgres | ||
| логин основного пользователя | пользователя с ролью owner указанной выше БД | |
| пароль основного пользователя | ||
логин пользователя для grafana | ||
пароль пользователя для grafana | ||
| путь к директории node_records | по-умолчанию /opt/scpd/node_records | |
| путь к директории node_results | по-умолчанию /opt/scpd/node_results | |
| путь к директории metrics_data | по-умолчанию /opt/shared_data/metrics_data | |
| путь к директории models_data | по-умолчанию /opt/shared_data/models_data | |
| часовой пояс | по-умолчанию Europe/Moscow | |
| срок хранения статистических метрик в месяцах | по-умолчанию 6 | |
| срок хранения статистики SmartCPD в месяцах | по-умолчанию 6 | |
логин и пароль к репозиторию cr.repo.altuera.ru | (если есть доступ) запросить у аккаунт менеджера | |
| лицензионный файл | запросить у аккаунт менеджера | |
| облачные файлы моделей | доступ запросить у аккаунт менеджера Альтуэра |
Облачные модели определения автоответчиков и роботов необходимо загрузить из облака Altuera по адресу: https://scpd.altuera.ru:5000/. В директории smartcpd_models необходимо скачать модели Dejavu и LSTM. Для успешной работы детекции роботов эти модели необходимо регулярно обновлять.
Установка и запуск SmartCPD#
Должна выполняться пользователем, имеющим права на выполнение команд docker.
Установка должна происходить на сервере, которому назначена роль service.
- выполнить настройку docker
- инициализировать docker swarm кластер
- выполнить настройки
serviceноды - добавить серверу роль
service:docker node update --label-add scpd.node.role.service=true <node_name>
node_nameможно узнать из вывода командыdocker node ls
- скопировать файлы установки нужной версии релиза из репозитория
https://raw.repo.altuera.ru/_/smartcpd/prod/release/ - разместить файлы
setup/compose.tmplиsetup/setup.shна сервере с рольюservice, сюда же положить файлы сертификата и ключа сертификата сервера (при необходимости)
Рекомендуется сделать это в сетевой директории (например /opt/shared_data/setup), доступной со всех
manager, чтобы сохранить возможность управления инсталляцией при выходе из строя одного из manager-серверов.
скрипт
setup/download-images.shпозволяет скачать нужные образы в локальную директорию, для последующей ручной загрузки черезdocker load. Перед запуском скрипта, возможно, потребуется авторизация в репозитории:docker login cr.repo.altuera.ru
- назначить права выполнения файлу
setup.sh:chmod +x ./setup.sh - залогиниться в репозиторий (если есть доступ)
cr.repo.altuera.ruкомандойdocker login cr.repo.altuera.ru
Если доступа к репозиторию нет, то импортировать все образы командой
docker load
- запустить исполняемый файл:
./setup.sh
- указать необходимые параметры настройки в процессе установки
- настройки будут сохранены в файле
setup.envи могут быть переиспользованы при повторном запуске скрипта (для переконфигурации) - дождаться окончания установки
Окончание установки - когда появляется сообщение
overall progress: waiting for new tasks. После этого выполнение команды нужно остановитьCtrl+C. Это нормально, потому что пока не все сервисы могут запуститься из-за отсутствия нод с другими ролями.
Загрузка необходимых для работы файлов#
- Открыть в браузере веб интерфейс портала:
- если портал установлен за внешним балансировщиком/reverse-proxy, то настроенному там адресу
- если портал установлен с поддержкой https, то по указанному адресу при установке
- Залогиниться, используя логин и пароль администратора, указанные при установке.
- Загрузить файл лицензии в разделе
Глобальные настройки - Загрузить файлы облачных моделей в разделе
Глобальные настройки
Добавление остальных нод#
После загрузки необходимых файлов необходимо добавить в решение оставшиеся серверы и назначить им соответствующие роли.
Добавление серверов с ролью service#
Решение не требует наличия более 2-х нод с ролью service.
На добавляемом сервере:
- выполнить настройку docker
- выполнить настройки
serviceноды - добавить сервер в swarm кластер
На manager сервере:
Установить новому серверу роль service: docker node update --label-add scpd.node.role.service=true <node_name>
Добавление серверов с ролью analyzer#
Решение не требует наличия более 2-х нод с ролью analyzer, в большинстве случаем достаточно одного сервера
На добавляемом сервере:
- выполнить настройку docker
- добавить сервер в swarm кластер
На manager сервере:
Установить новому серверу роль analyzer: docker node update --label-add scpd.node.role.analyzer=true <node_name>
Добавление серверов с ролью balancer#
Решение не требует наличия более 2-х нод с ролью analyzer, для отказоустойчивой работы требуется 2 таких ноды.
На добавляемом сервере:
- выполнить настройку docker
- добавить сервер в swarm кластер
На manager сервере:
Установить новому серверу роль balancer: docker node update --label-add scpd.node.role.balancer=true <node_name>
Добавление серверов с ролью worker#
Можно добавлять любое количество серверов с этой ролью.
На добавляемом сервере:
- выполнить настройку docker
- выполнить настройки
workerноды - добавить сервер в swarm кластер
На manager сервере:
Установить новому серверу роль worker: docker node update --label-add scpd.node.role.worker=true <node_name>
Контроль запуска всех сервисов#
На manager ноде выполнить команду docker stack services smartcpd
Убедиться, что в столбце REPLICAS отображается корректное число запущенных сервисов: значения до и после / совпадают.
Настройка отказоустойчивости кластера#
При необходимости выполнить настройку отказоусточивости swarm кластера
Настройка подключения к существующей VoIP инфраструктуре#
В портале в разделе Настройки компании указать необходимые параметры подключения.
SmartCPD готов к работе!
Дополнительные материалы#
Индивидуальные настройки нод для ролей#
Настройки service ноды#
На сервере с ролью service должны быть созданы следующие директории:
metrics_data путь по-умолчанию
/opt/shared_data/metrics_data. В этой директории хранятся собранные статистические метрики. При наличии более одного сервера с рольюserviceэта директория должна быть расположена в отказоустойчивом сетевом хранилище, и быть доступна по одинаковому пути на всех серверах с рольюservice. Даже если сервер один, отказоустойчивое расположение рекомендуется, в противном случае необходимо настроить регулярное резервное копирование.models_data путь по-умолчанию
/opt/shared_data/models_data. В этой директории хранятся: файлы лицензий, облачные и локальные модели для определения роботов/автоответчиков. При наличии более одного сервера с рольюserviceэта директория должна быть расположена в отказоустойчивом сетевом хранилище, и быть доступна по одинаковому пути на всех серверах с рольюservice. Даже если сервер один, отказоустойчивое расположение рекомендуется, в противном случае необходимо настроить регулярное резервное копирование.
Настройки worker ноды#
На сервере с ролью service должны быть созданы следующие директории:
node_records путь по-умолчанию
/opt/scpd/node_records. На всех серверах этой роли пути к директории должны быть одинаковыми. Резервное копирование не требуется.node_results путь по-умолчанию
/opt/scpd/node_records. На всех серверах этой роли пути к директории должны быть одинаковыми. Резервное копирование не требуется.
Настройка docker для SmartCPD#
На всех серверах, необходимо выполнить одинаковую настройку docker daemon для работы в режиме swarm.
Настройка сервиса docker#
Выполняются на каждом хосте.
Настройки записываются в файл /etc/docker/daemon.json и требуют перезапуск docker после его изменения. Если файл отсутствует, его необходимо создать.
Настройка директории хранения данных Docker#
По-умолчанию docker хранит даннные (образы, тома, слои контейнеров, логи) в директории /var/lib/docker, которая находится на основном разделе /.
Если основной раздел имеет достаточный размер (20 GB свободного места), то этот параметр можно не менять.
Если места на основном разделе не достаточно, или хочется избежать возможного отказа сервера из-за переполнения основного раздела, то директорию docker необходимо перенести на другой раздел ОС.
Для этого в файле настройки /etc/docker/daemon.json указываем необходимую директорию на другом разделе:
{
"data-root": "/opt/lib/docker"
}Настройка сетей docker#
Все серверы одного docker swarm кластера должны иметь одинаковые сетевые настройки.
Также важно, чтобы сетевой пул docker не пересекался с сетями в локальной сети.
Для этого выделяем подсеть приватных ip адресов, например 172.27.0.0/16 и разделяем её на 2 сегмента:
172.27.0.0/17- для локальных сетей docker172.27.128.0/17- для сетей docker swarm
Подсеть для локальных сетей docker используем в конфигурационном файле /etc/docker/daemon.json:
{
"default-address-pools": [ { "base" : "172.27.0.0/17", "size" : 24 } ],
"userland-proxy": false
}параметр
"userland-proxy": falseнастоятельно рекомендуется добавить в файл конфигурации, чтобы избежать ненужного потребления памяти.
Пример файла с минимальными настройками#
{
"data-root": "/opt/lib/docker",
"default-address-pools": [ { "base" : "172.27.0.0/17", "size" : 24 } ],
"userland-proxy": false
}Режим docker Swarm#
Все команды должны выполняться пользователем, имеющим права для взаимодействия с docker. Обычно для этого достаточно добавить пользователя в группу docker.
Инициализация Docker Swarm#
На одном сервере (который будет иметь роль service) выполнить инициализацию режима swarm:
Подставить сеть, выделенную для режима docker swarm
docker swarm init \
--default-addr-pool 172.27.128.0/17 \
--default-addr-pool-mask-length 24После инициализации, данный сервер получает роль manager в кластере swarm.
Все операции по управлению кластером могут совершаться только на серверах с ролью manager.
Посмотреть результат (список нод кластера): docker node ls
Добавление сервера в swarm кластер#
На manager сервере выполнить команду: docker swarm join-token worker
Результатом выполнения будет вывод команды для присоединения сервера к кластеру.
Эту команду необходимо выполнить на целевом сервере, который должен быть подключен к кластеру, например:
docker swarm join --token SWMTKN-1-01thbgajtlnlkb0efdz4ux2kqd0qienhzlbuwdmtfiwi47z60k-9nk3ya17qvb9qs079thsxnj2a 10.201.10.11:2377Результат добавления можно посмотреть на manager ноде командой docker node ls.
Настройка отказоусточивости swarm кластера#
Docker swarm кластер работает, пока в активном состоянии находится N/2+1 его серверов с ролью manager. Поэтому для отказоустойчивого решения необходимо иметь:
- минимум 3 сервера с ролью
manager(отказ одного из них не приведет к остановке кластера) - 5 серверов - максимальное рекомендованное количество (бОльшее число существенно увеличит нагрузку на серверы с ролью
manager)
Также рекомендуется устанавливать роль manager наименее нагруженным серверам, поэтому в решении SmartCPD рекомендуется назначать эту роль следующим серверам:
- при установке решения на 2 сервера (нет отказоусточивости) - только
serviceноде - при установке решения на 3 сервера - всем серверам
- в остальных случаях: (выбрать 3 или 5 менеджеров со следующим приоритетом)
serviceноды (всеserviceноды должны бытьmanager)balancerнодыanalizerноды
- не рекомендуется назначать
workerноды менеджерами кластера, как наиболее нагруженные
Для добавления (повышения) роли ноды до менеджера, на любом из менеджеров выполнить команду: docker node promote <NODE-ID or NODE-HOSTNAME>
Для снятия (понижения) роли ноды: docker node demote <NODE-ID or NODE-HOSTNAME>
Результат можно посмотреть на manager ноде командой docker node ls.
Справочник базовых команд по управлению docker swarm.#
Полная документация по Docker Swarm.
docker node lsпосмотреть список серверов кластераdocker node inspect --format '{{ json .Spec.Labels }}' <NODE-ID or NODE-HOSTNAME>посмотреть установленныеlabeldocker node update --label-add label=value <NODE-ID or NODE-HOSTNAME>установитьlabeldocker node update --label-rm label <NODE-ID or NODE-HOSTNAME>удалитьlabeldocker stack services smartcpdпосмотреть все запущенные сервисы стека smartcpddocker service ps --no-trunc smartcpd_<service_name>посмотреть статус сервисаdocker service logs smartcpd_<service_name>посмотреть логи сервиса (все запущенные экземпляры)- флаг
-fсмотреть обновление в реальном времени - флаг
--since 5mза последние 5 минут
- флаг