Установка

Требования к серверам#

  • OS Linux с версией ядра не ниже 5
  • SELinux должен быть отключен (работа с включенным SELinux не проверялась)
  • ПО, осуществляющее функциональность сетевых экранов (firewalld, ufw, …) должно быть отключено
  • установленное ПО docker версии не ниже 26
  • пользователь, с правами выполнения команд docker
  • доступ в репозиторий артефактов Altuera cr.repo.altuera.ru
роль сервератиповые требования к оборудованию
service4 vCPU, 4 GB RAM, свободных 20 GB HDD
analyzer8 vCPU, 4 GB RAM, свободных 40 GB HDD
balancer4 vCPU, 4 GB RAM, свободных 20 GB HDD
worker8 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.

  1. выполнить настройку docker
  2. инициализировать docker swarm кластер
  3. выполнить настройки service ноды
  4. добавить серверу роль service: docker node update --label-add scpd.node.role.service=true <node_name>

node_name можно узнать из вывода команды docker node ls

  1. скопировать файлы установки нужной версии релиза из репозитория https://raw.repo.altuera.ru/_/smartcpd/prod/release/
  2. разместить файлы 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

  1. назначить права выполнения файлу setup.sh: chmod +x ./setup.sh
  2. залогиниться в репозиторий (если есть доступ) cr.repo.altuera.ru командой docker login cr.repo.altuera.ru

Если доступа к репозиторию нет, то импортировать все образы командой docker load

  1. запустить исполняемый файл: ./setup.sh
  • указать необходимые параметры настройки в процессе установки
  • настройки будут сохранены в файле setup.env и могут быть переиспользованы при повторном запуске скрипта (для переконфигурации)
  • дождаться окончания установки

Окончание установки - когда появляется сообщение overall progress: waiting for new tasks. После этого выполнение команды нужно остановить Ctrl+C. Это нормально, потому что пока не все сервисы могут запуститься из-за отсутствия нод с другими ролями.

Загрузка необходимых для работы файлов#

  1. Открыть в браузере веб интерфейс портала:
  • если портал установлен за внешним балансировщиком/reverse-proxy, то настроенному там адресу
  • если портал установлен с поддержкой https, то по указанному адресу при установке
  1. Залогиниться, используя логин и пароль администратора, указанные при установке.
  2. Загрузить файл лицензии в разделе Глобальные настройки
  3. Загрузить файлы облачных моделей в разделе Глобальные настройки

Добавление остальных нод#

После загрузки необходимых файлов необходимо добавить в решение оставшиеся серверы и назначить им соответствующие роли.

Добавление серверов с ролью service#

Решение не требует наличия более 2-х нод с ролью service.

На добавляемом сервере:

  1. выполнить настройку docker
  2. выполнить настройки service ноды
  3. добавить сервер в swarm кластер

На manager сервере:

Установить новому серверу роль service: docker node update --label-add scpd.node.role.service=true <node_name>

Добавление серверов с ролью analyzer#

Решение не требует наличия более 2-х нод с ролью analyzer, в большинстве случаем достаточно одного сервера

На добавляемом сервере:

  1. выполнить настройку docker
  2. добавить сервер в swarm кластер

На manager сервере:

Установить новому серверу роль analyzer: docker node update --label-add scpd.node.role.analyzer=true <node_name>

Добавление серверов с ролью balancer#

Решение не требует наличия более 2-х нод с ролью analyzer, для отказоустойчивой работы требуется 2 таких ноды.

На добавляемом сервере:

  1. выполнить настройку docker
  2. добавить сервер в swarm кластер

На manager сервере:

Установить новому серверу роль balancer: docker node update --label-add scpd.node.role.balancer=true <node_name>

Добавление серверов с ролью worker#

Можно добавлять любое количество серверов с этой ролью.

На добавляемом сервере:

  1. выполнить настройку docker
  2. выполнить настройки worker ноды
  3. добавить сервер в 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 - для локальных сетей docker
  • 172.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> посмотреть установленные label
  • docker node update --label-add label=value <NODE-ID or NODE-HOSTNAME> установить label
  • docker node update --label-rm label <NODE-ID or NODE-HOSTNAME> удалить label
  • docker stack services smartcpd посмотреть все запущенные сервисы стека smartcpd
  • docker service ps --no-trunc smartcpd_<service_name> посмотреть статус сервиса
  • docker service logs smartcpd_<service_name> посмотреть логи сервиса (все запущенные экземпляры)
    • флаг -f смотреть обновление в реальном времени
    • флаг --since 5m за последние 5 минут

Дата формирования