Исходные данные

Исходные данные

В данном разделе использованы специфичные для данного продукта термины, ознакомиться с ними можно здесь.

Техническое задание:

Требуется интеграция программного коммутатора 5 класса ECSS-10 (SSW) на 2-х физических серверах с поддержкой SIP со следующими параметрами на нагрузку группы серверов:

  • Максимальное количество абонентов 15000 (MUL — Max user limit);
  • Максимальное количество одновременных соединений 2000 (MCL — Max call limit);
  • Требуется полный резерв системы ecss (все ноды резервируется на втором сервере);
  • Количество сетевых интерфейсов ethernet — 4.

По техническому заданию требуется определить аппаратную платформу.

Актуальная информация с требованиями к серверам, которые должны использоваться для работы комплекса ECSS-10.

Требования к серверам SSWСерия Light+Серия MidiСерия HeavyСерия Супер HeavyСерия Top (1)
1Характеристики системы




1.1Максимальное количество абонентов5000100002000040000-
1.2Максимальная нагрузка одновременных соединений class 5800150030006000-
1.3Максимальная нагрузка одновременных соединений class 42400450090002000080000
2Характеристики сервера




2.1МаркаHP (Lenovo)HP (Lenovo)HP (Lenovo)HP (Lenovo)HP /Lenovo /Depo
2.2СерияDL20 Gen10/DL 360 Gen10 (SR530)DL360 Gen10 (SR530/SR630)DL360 Gen10 (SR630)DL360 Gen10 (SR630)DL360 Gen10 /SR650 V2 /Storm 3450
2.3ПроцессорIntel Xeon 4214Intel Xeon 5220Intel Xeon 6240Intel Xeon 8268Intel Xeon 8380
2.4Количество процессоров11222
2.5Оперативная память16 Gb24 Gb32 Gb64 Gb1024 Gb
2.6HDDОт 3X500 SATA (от 7200 rpm)От 3x300 Gb SAS (от 10000 rpm)От 3x600 Gb SAS (от 10000 rpm) 2x150Gb SSDОт 6x800 Gb SSD, 2x300Gb M.2 SSDОт 6x1.2 Tb SSD, 2x300Gb M.2 SSD
2.7RAIDno raid boardHW Raid, от 1Gb cache+batteryHW Raid, от 1Gb cache+batteryHW Raid, от 2Gb Flash cache, поддержка RAID-5HW Raid, от 2Gb Flash cache, поддержка RAID-5
3Дополнительные комплектующие сервера (в базовый комплект не входят)




3.1Лицензия на удалённое управлениепо желанию++++
3.2Резервный источник питанияпо желанию++++
3.3Организация хранилища записей разговоровДополнительные HDD, объединенные в RAID-5Лицензия на HW Raid с поддержкой RAID-5,
дополнительные HDD для хранения записей
Лицензия на HW Raid с поддержкой RAID-5,
дополнительные HDD для хранения записей
Лицензия на HW Raid с поддержкой RAID-5,
дополнительные HDD для хранения записей
Лицензия на HW Raid с поддержкой RAID-5,
дополнительные HDD для хранения записей

Полоса пропускания СПД

Требуемая полоса пропускания СПД  не менее 1000Mb/s

Минимальные требования при установке ECSS-10 на виртуальные машины*

Требования к серверам SSWУровень Light (2)(3)Уровень Light+Уровень MidiУровень HeavyУровень Супер HeavyУровень Top (1)
1Характеристики системы





1.1Максимальное количество абонентов10005000100002000040000-
1.2Максимальная нагрузка одновременных соединений class 5250800150030006000-
1.3Максимальная нагрузка одновременных соединений class 41000450090002000080000-
2Характеристики сервера





2.4Количество ядер/потоков (vCore)12С/24T18С/36T36С/72T48С/96T80С/160T и более
2.5Частота процессораот 2.4 Ghzот 3 Ghzот 3Ghzот 3.6 Ghzот 3.4 Ghzот 3.2 Ghz
2.6Оперативная память8 Gb16 Gb24 Gb32 Gbот 64 Gbот 512 Gb
2.7HDDОт 50 GB, 75 IOPSОт 500 GB SATA (от 7200 rpm, от 75 IOPS)От 500 Gb SAS (от 10000 rpm, 170 IOPS)От 500 Gb SAS (от 10000 rpm, 170 IOPS) и 150Gb SSDот 800 Gb SSD и 300Gb M.2 SSDОт 1.2 Tb SSD и 300Gb M.2 SSD

C - core, они же ядра

T - thread = поток, vCore

(1) — серия Top на текущий момент рассчитана для реализации контроллера транковых шлюзов (работа по 4 классу).
(2) — уровень Light применяется только для расчета виртуальных машин, для физических серверов минимальная рекомендуемая конфигурация — Light+.
(3) — уровень Light является минимальным рекомендуемым. При запросе расчета ВМ для малого числа абонентов (до 1000: 100, 200...) используем его.

*Если на системе планируется использование таких сервисов как КЦ, запись разговоров, видео-вызовы, то необходимо согласовать требования с технической поддержкой

Устройство

Требуемый ресурс

Серия аппаратного продукта

MCL

MUL

Сервер 1

2000

15000

Heavy

Сервер 2   Heavy

После определения по требованиям проекта составляем предварительную сетевую карту.

Пример разнесения составляющих по адресному пространству для одной ноды:


Имя сервера (хоста)

Роль

Интерфейс

Адрес

Адрес вашего проекта

Порт

Статические адреса программного коммутатора

ecss1

Интерфейс управления сервером (порт 2000 ssh)

net.10

10.0.10.51/24


2000

ecss2

Интерфейс управления сервером (порт 2000 ssh)

net.10

10.0.10.52/24


2000

ecss1

Адрес ядра (ecss-core)

net.20

10.0.20.51/24
5000
ecss2Адрес ядра (ecss-core)net.2010.0.20.52/24
5000

ecss1, ecss2

Адрес шлюза

net.10

10.0.10.1
-

ecss1, ecss2

Адреса DNS-серверов

net.10

10.0.10.1, 8.8.8.8
-
ecss1, ecss2Адреса NTP-серверовnet.1010.136.16.211, 10.136.16.212
123

Виртуальные адреса программного коммутатора

ecss1Виртуальный адрес программного адаптера хоста ecss1net.20:SIP110.0.20.31/24
-
ecss2Виртуальный адрес программного адаптера хоста ecss2net.20:SIP210.0.20.32/24
-
ecss1Запасной виртуальный адрес программного адаптера хоста ecss2 на хосте ecss1net.20:SIP210.0.20.32/24
-
ecss2Запасной виртуальный адрес программного адаптера хоста ecss1 на хосте ecss2net.20:SIP110.0.20.31/24
-



Включение в сеть

Топологию включения сервера в сеть для обеспечения резервирования рекомендуется делать с использованием 2-х коммутаторов.




Рисунок 2 — Схема организации связи

Вариант 1. Схема active-backup

Коммутаторы связаны между собой в erps-кольцо.

Все 4 физических сетевых интерфейса каждого сервера объединяются в 1 агрегированный линк (bond). Агрегация портов сервера настраивается в режиме active-backup, т.е. в работе всегда находится только 1 сетевой интерфейс. Сетевые интерфейсы каждого сервера попарно включены в коммутаторы, на которых агрегация портов (port-channel) также настраивается в режиме active-backup. Например, eth0 и eth1 каждого сервера включаются в первый коммутатор (port-channel 1 и 2), а eth2 и eth3 (port-channel 3 и 4) — во второй.


Вариант 2. Схема LACP

Коммутаторы связаны между собой в стек. Стек должен логически работать как один коммутатор, способный обеспечивать агрегацию портов в режиме LACP между разными физическими коммутаторами. Пример — коммутаторы MES-3124 со специализированной прошивкой.

Все 4 физических сетевых интерфейса также объединяются в 1 агрегированный линк (bond). Агрегация портов сервера настраивается в режиме 802.3ad. Создаются агрегированные группы сетевых карт с одинаковой скоростью и дуплексом. При таком объединении передача задействует все каналы в активной агрегации согласно стандарту IEEE 802.3ad. Выбор того, через какой интерфейс необходимо отправлять пакет, определяется политикой. По умолчанию это XOR-политика, можно использовать «xmit_hash» политику. Подробнее — в разделе Приложение Е. Netplan.

Требования:

  • Поддержка Ethtool в драйвере для получения информации о скорости и дуплексе на каждом сетевом интерфейсе;
  • Поддержка на коммутаторе стандарта IEEE 802.3ad;

Сетевые интерфейсы сервера также попарно включены в коммутаторы, на которых агрегация портов (port-channel) тоже настраивается в режиме LACP. Например, eth0 и eth1 каждого сервера включаются в первый коммутатор (port-channel 1 и 2), а eth2 и eth3 (port-channel 3 и 4) — во второй. 

Последовательность установки SSW ECSS10 в кластере из двух серверов

Установка SSW ECSS10 состоит из 2-х основных частей :

  • Подготовительной  -  Установка ОС Ubuntu 22.04, обновлений пакетов OC Ubuntu , "оптимизация" OC, установка дополнительных пакетов программ, подготовка сетевых интерфейсов,  /etc/hosts, ssh-keygen

  • Установка приложений Eltex ECSS10

Подготовительный этап

В этом разделе приведено описание инсталляции операционной системы, а также необходимых и дополнительных пакетов. Система ECSS-10 версии 3.18 работает под управлением ОС  Ubuntu 22.04.

Предварительные требования

  • Установочный загрузочный носитель с дистрибутивом операционной системы;
  • Подготовленный сервер с обновленным BIOS, ILO (если есть), подключенная сеть для доступа в сеть Интернет;
  • Выставленный первый приоритет загрузки с установочного носителя — USB Flash или CD/DVD в BIOS;
  • Достаточный объем дискового пространства и памяти в соответствии с проектом.

Установка ОС

Для установки ОС необходимо выполнить следующее:

  • После загрузки с установочного носителя выбрать "Install Ubuntu Server".
  • Выбрать язык системы и раскладку клавиатуры.
  • Настроить сетевой интерфейс для подключения к сети Интернет:

  • Создать партиции на диске в соответствии с таблицей 1
  • Настроить имена сервера и пользователя
  • Установить OpenSSH server
  • Перезагрузить успешно установленную ОС

Выбираем язык интерфейса

Продолжить без обновления

Выбираем раскладку клавиатуры

Выбираем переключатель раскладок Рус/Eng

Выбираем стандартную установку Ubuntu Сервер


Выбираем Eht: интерфейс для установки Ubuntu (должен будет иметь доступ в интернет)

Установить IP-адрес для доступа в интернет(DHCP использовать нельзя)

Прокси-сервер не используем(если в вашем проекте применяется то укажите)

Значение по умолчанию 

Создаем партиции на диске , используем  LVM

По умолчанию созданы две партиции /boot и / ,  /boot оставляем  , а / - удаляем. Вначале  размонтировать

Затем удалить.

Подтвердить

Оставить только /boot

Создать партиции в соответствии с размерностью указанной в таблице ниже

 root размер 30 Гб , точка монтирования /

 mnesia размер 30 Гб, точка монтирования /var/lib/ecss

 log размер 20 Гб, точка монтирования /var/log

mysql, размер 30G, точка монтирования - /var/lib/mysql

 ecss_log, размер 20 Гб , точка монтирования  /var/log/ecss

ecss_db, размер 100 Гб , точка монтирования -  /var/lib/ecss-mysql

home, размер 10 Гб, точка монтирования  -  /home

glusterfs - для кластера / для одного хоста  - restfs , размер - все оставшееся место на диске, точка монтирования - /var/lib/ecss/glusterfs - для кластера , и   /var/lib/ecss/restfs - для одного сервера

полученная  конфигурация

Подтвердить

Создать пользователя  и имя хоста, в ECSS10 рекомендуемое имя хоста  ecss1/ecss2 (используется при интеграции лицензий ), имя пользователя (в  примере abf / пароль на ваше усмотрение  )

При установки выбираем Free установку:

При инсталляции Ubuntu Linux,  ставим openSSH,  для  удаленного управления

Подтвердить

Ждем появления сообщения - Перезагрузить сейчас

Извлекаем инсталляционный диск/флешку  и  Enter

 Ubuntu Linux Server  установлен




Таблица 1 — Вариант размещения информации в файловой системе на физических носителях для серверов

1Загрузочный раздел операционной системы (создается автоматически)bootraid 1:hdd1,hdd2boot/bootext41 GbПервичный
2Корневой раздел операционной системыrootraid 1:hdd1,hdd2root/ext430 GbЛогический
3Информация локальных баз данныхmnesiaraid 1:hdd1, hdd2mnesia/var/lib/ecssext410 GbЛогический
4Распределенная БД для хранения медиаресурсовglusterfsraid 1:hdd1, hdd2 или hdd3glusterfs/var/lib/ecss/glusterfs*ext4Max GbЛогический
5Журналы функционирования подсистем ОСlograid 1:hdd1,hdd2 или hdd3log/var/logext420 GbЛогический
6Журналы функционирования подсистем ECSSecss_lograid 1:hdd1,hdd2 или hdd3ecss_log/var/log/ecssext420 GbЛогический
7Базы данныхecss_dbraid 1:hdd1,hdd2 или hdd3ecss_db/srv/ecss/ecss-postgres-bdr-ssw/ext4100–400 Gb**Логический
8Файлы пользователяhomeraid 1:hdd1,hdd2 или hdd3home/homeext410 GbЛогический


* Если сервер не будет работать в кластере, то вместо glusterfs создается раздел /var/lib/ecss/restfs.

** Рекомендуемое значение для серий Light, Light+, Midi — 100 Gb. Рекомендуемое значение для серии Heavy — 200 Gb,  Super Heavy — 400 Gb.

Для работы системы необходимо как минимум 256 Gb свободного пространства.

На серверах системы необходимо настроить параметр "hostname".

На всех серверах системы желательно указать одинаковое имя пользователя (любое, кроме ssw). Лицензия ECSS-10 привязывается к ключу eToken/ruToken и к имени компьютера (hostname). Системный пользователь ssw создается при инсталляции пакета ecss-user.

При установке системы в кластере, рекомендуемое значение для первого сервера — ecss1, для второго — ecss2.

Настройка сети

Согласно параметрам, заданным в техническом задании (далее ТЗ), выполните сетевые настройки. В данном примере считается, что уже установлена необходимая операционная система. 

Рекомендуется разделять трафик, используемый в разных целях. Например, трафик управления и трафик VoIP. Для этого создаются 2 или более vlan. При небольшой нагрузке для простоты можно обойтись и одним vlan, но это может в будущем доставлять неудобства при снятии дампов трафика и его анализе. В соответствии с техническим заданием на vlan настраиваются IP-адреса самого хоста, шлюзы, DNS и маршрутизация в другие сети.

В данном примере согласно ТЗ будем использовать адреса (в скобках — различия для ecss2):

  • 10.0.10.51(52)/24 — для управления, vlan 10;
  • 10.0.20.51(52)/24 — core, vlan 20;
  • 10.0.20.31(32)/24 — виртуальные (vrrp) для VoIP;
  • 10.0.10.1 — шлюз и dns для доступа во внешнюю сеть;
  • 10.0.20.1 — шлюз в подсеть 10.0.3.0/24;
  • 10.136.16.211, 10.136.16.212 — адреса NTP-серверов, доступ до которых осуществляется через шлюз 10.0.10.1.

Внутри серверной платформы существует адресная структура и используются внутренние адреса для взаимодействия между подсистемами (нодами) в кластере. Например, внутренний адрес для кластера на одном сервере 10.0.20.51, при этом ядро (ecss-core) взаимодействует с сервером обработки мультимедиа-данных (ecss-media-server). Их взаимодействие происходит с использованием одного и того же адреса, но у каждой программной части свой транспортный порт: ecss-core — 5000, ecss-msr — 5040.

Для всех нод кластера определяется единый адрес для обращения к базе данных, например, адрес 10.0.10.10. Таким образом, выполняется условие единообразия, при котором все ноды кластера имеют полностью одинаковые данные о текущем состоянии динамических составляющих программного коммутатора (например, история вызовов).

Сначала настраиваются сетевые интерфейсы.
В Ubuntu 22 для их настройки используется утилита netplan:

sudo nano /etc/netplan/ecss_netplan.yaml

В конфигурациях для каждого хоста в первую очередь мы объявляем секцию ethernets, в которой описываются существующие в системе ethernet-интерфейсы, используемые в дальнейшем. Для каждого интерфейса необходимо отключить использование динамического распределения адресов (DHCP). 

Следующим разделом описываются агрегированные каналы — bonds. В зависимости от выбранного варианта включения в сеть настраивается режим резерва 1:1 (active - backup) или LACP (802.3ad).

Далее настраиваются vlan, на которых опционально определяются шлюзы для связи с внешним миром и адреса DNS-серверов, а также непосредственно IP-адреса для каждого интерфейса.

ВАЖНО

Обратите внимание, что во время редактирования netplan необходимо соблюдать правила разметки YAML:

  • Обязательное наличие двух пробелов перед каждой строкой (кроме network);
  • Каждая подсекция дополнительно сдвигается на 2 пробела:

→  Секция                                                                  |network

→  Подсекция                                                            |_'_'bonds:

→  Подсекция описания секции bonds                   |_'_'_'_'bonded_one:

→  и т.д.                                                                      |_'_'_'_'...

  • Перед знаком ":" нет пробела, после — один пробел;
  • Перед знаком "-" количество пробелов такое, как будто начинается новый подраздел, после — один пробел.

Пример netplan для режима active-backup

Netplan для интерфейсов сервера ecss1 (/etc/netplan/ecss_netplan.yaml)Netplan для интерфейсов сервера ecss2 (/etc/netplan/ecss_netplan.yaml)


# Netplan для хоста ecss1 программного коммутатора
# Обратите внимание на обязательное наличие минимум двух пробелов в каждой строке и секции (кроме строки секции network)

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    eth0: # Название интерфейса
      dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
    eth1:
      dhcp4: no
    eth2:
      dhcp4: no
    eth3:
      dhcp4: no

  bonds: # Раздел описания связанных (bonding) интерфейсов
    bond1: # Название bonding-интерфейса 
      interfaces: # Секция определения связанного интерфейса
		- eth0
		- eth1
		- eth2
		- eth3
      parameters: # Раздел определения параметров связанного интерфейса
        primary-reselect-policy: failure # позволяет избежать лишних переключений
        gratuitous-arp: 5 # Способствует более быстрому переключению
        all-slaves-active: true # принимать входящие кадры на backup интерфейсах
        up-delay: 1000 # сделать задержку в одну секунду
        mode:  active-backup # Режим резервирования, один  активным, а остальные в резерве
        mii-monitor-interval: 100 # интервал мониторинга интерфейса(мс)
        primary: eth0 # Секция определения основного интерфейса
      optional: false # Определение, является ли интерфейс обязательным при старте
  
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: bond1
        addresses: [10.0.10.51/24]
        gateway4: 10.0.10.1 # Адрес шлюза
        nameservers:
          addresses: [10.0.10.1, 8.8.8.8] # Адреса серверов DNS
        routes: # Маршрутизация в подсеть к NTP
          - to: 10.136.16.0/24
            via: 10.0.10.1 # Адрес шлюза в данную подсеть
            on-link: true # Определяет, что указанные маршруты непосредственно связаны с интерфейсом
    net.20: # Интерфейс для VoIP
        id: 20
        link: bond1
        addresses: [10.0.20.51/24]
        routes:
          - to: 10.0.3.0/24
            via: 10.0.20.1
            on-link: true          


# Netplan для хоста ecss2 программного коммутатора
# Обратите внимание на обязательное наличие минимум двух пробелов в каждой строке и секции (кроме строки секции network)

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    eth0: # Название интерфейса
      dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
    eth1:
      dhcp4: no
    eth2:
      dhcp4: no
    eth3:
      dhcp4: no

  bonds: # Раздел описания связанных (bonding) интерфейсов
    bond1: # Название bonding-интерфейса 
      interfaces: # Секция определения связанного интерфейса
		- eth0
		- eth1
		- eth2
		- eth3
      parameters: # Раздел определения параметров связанного интерфейса
        primary-reselect-policy: failure # позволяет избежать лишних переключений
        gratuitous-arp: 5 # Способствует более быстрому переключению
        all-slaves-active: true # принимать входящие кадры на backup интерфейсах
        up-delay: 1000 # сделать задержку в одну секунду
        mode:  active-backup # Режим резервирования, один  активным, а остальные в резерве
        mii-monitor-interval: 100 # интервал мониторинга интерфейса(мс)
        primary: eth0 # Секция определения основного интерфейса
      optional: false # Определение, является ли интерфейс обязательным при старте
  
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: bond1
        addresses: [10.0.10.52/24]
        gateway4: 10.0.10.1 # Адрес шлюза
        nameservers:
          addresses: [10.0.10.1, 8.8.8.8] # Адреса серверов DNS
        routes: # Маршрутизация в подсеть к NTP
          - to: 10.136.16.0/24
            via: 10.0.10.1 # Адрес шлюза в данную подсеть
            on-link: true # Определяет, что указанные маршруты непосредственно связаны с интерфейсом
    net.20: # Интерфейс для VoIP
        id: 20
        link: bond1
        addresses: [10.0.20.52/24]
        routes:
          - to: 10.0.3.0/24
            via: 10.0.20.1
            on-link: true          


Следующие настройки bonds обязательны для сервера ECSS, чтобы схема работала верно:

mode: active-backup - задаёт режим работы, когда один из линков выбирается активным, а остальные остаются в резерве;
primary-reselect-policy: failure - указывает, что выбирать новый активный линк следует только тогда, когда текущий активный линк переходит в состоянии аварии. Это позволяет избежать лишних переключений;
gratuitous-arp: 5 - при смене активного линка в сторону коммутатора отправляются пять запросов gratuitous ARP, чтобы обновить на нём таблицу коммутации. Способствует более быстрому переключению;
all-slaves-active: true - заставляет принимать входящие кадры на backup интерфейсах. Таким образом балансировка трафика на MESе не мешает работе. Данные в сторону сервера идут со всех линков, а сервер отправляет данные только с active линка;
mii-monitor-interval: 100 - активирует мониторинг линков через интерфейс MII и указывает интервал опроса в 100мс;
up-delay: 1000 - указывает считать поднявшийся интерфейс доступным для работы не сразу, а сделать задержку в одну секунду после того, как интерфейс поднялся. Необходимо для того, чтобы избежать лишних переключений в случае, когда порт "прыгает" несколько раз из состояния "включено" в состояние "выключено" и обратно.

Пример netplan для режима 802.3ad

Netplan для интерфейсов сервера ecss1 (/etc/netplan/ecss_netplan.yaml)Netplan для интерфейсов сервера ecss2 (/etc/netplan/ecss_netplan.yaml)


# Netplan для хоста ecss1 программного коммутатора
# Обратите внимание на обязательное наличие минимум двух пробелов в каждой строке и секции (кроме строки секции network)

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    eth0: # Название интерфейса
      dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
    eth1:
      dhcp4: no
    eth2:
      dhcp4: no
    eth3:
      dhcp4: no

  bonds: # Раздел описания связанных (bonding) интерфейсов
    bond1: # Название bonding-интерфейса 
      interfaces: # Секция определения связанного интерфейса
		- eth0
		- eth1
		- eth2
		- eth3
      parameters: # Раздел определения параметров связанного интерфейса
        mode: 802.3ad # Режим LACP
        mii-monitor-interval: 100 # интервал мониторинга интерфейса(мс)
        primary: eth0 # Секция определения основного интерфейса
      optional: false # Определение, является ли интерфейс обязательным при старте
  
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: bond1
        addresses: [10.0.10.51/24]
        gateway4: 10.0.10.1 # Адрес шлюза
        nameservers:
          addresses: [10.0.10.1, 8.8.8.8] # Адреса серверов DNS
        routes: # Маршрутизация в подсеть к NTP
          - to: 10.136.16.0/24
            via: 10.0.10.1 # Адрес шлюза в данную подсеть
            on-link: true # Определяет, что указанные маршруты непосредственно связаны с интерфейсом
    net.20: # Интерфейс для VoIP
        id: 20
        link: bond1
        addresses: [10.0.20.51/24]
        routes:
          - to: 10.0.3.0/24
            via: 10.0.20.1
            on-link: true          

# Netplan для хоста ecss2 программного коммутатора
# Обратите внимание на обязательное наличие минимум двух пробелов в каждой строке и секции (кроме строки секции network)

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    eth0: # Название интерфейса
      dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
    eth1:
      dhcp4: no
    eth2:
      dhcp4: no
    eth3:
      dhcp4: no

  bonds: # Раздел описания связанных (bonding) интерфейсов
    bond1: # Название bonding-интерфейса 
      interfaces: # Секция определения связанного интерфейса
		- eth0
		- eth1
		- eth2
		- eth3
      parameters: # Раздел определения параметров связанного интерфейса
        mode: 802.3ad # Режим LACP
        mii-monitor-interval: 100 # интервал мониторинга интерфейса(мс)
        primary: eth0 # Секция определения основного интерфейса
      optional: false # Определение, является ли интерфейс обязательным при старте
  
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: bond1
        addresses: [10.0.10.52/24]
        gateway4: 10.0.10.1 # Адрес шлюза
        nameservers:
          addresses: [10.0.10.1, 8.8.8.8] # Адреса серверов DNS
        routes: # Маршрутизация в подсеть к NTP
          - to: 10.136.16.0/24
            via: 10.0.10.1 # Адрес шлюза в данную подсеть
            on-link: true # Определяет, что указанные маршруты непосредственно связаны с интерфейсом
    net.20: # Интерфейс для VoIP
        id: 20
        link: bond1
        addresses: [10.0.20.52/24]
        routes:
          - to: 10.0.3.0/24
            via: 10.0.20.1
            on-link: true  

Так же рекомендуется проверить отсутствие в каталоге /etc/netplan/ еще каких либо файлов, если  другие файлы присутствуют , то их нужно переместить в другой каталог или удалить, в противном случае возможна некорректная настройка сетевых интерфейсов и некорректная работа SSW. 

Применим установленные параметры командой:

на обоих хостах

sudo netplan apply
BASH

Просмотреть получившиеся настройки можно при помощи команд ifconfig или ip a.

На серверах системы необходимо настроить параметр "hostname".

На всех серверах системы желательно указать одинаковое имя пользователя (любое, кроме ssw). Лицензия ECSS-10 привязывается к ключу eToken/ruToken и к имени компьютера (hostname), поэтому необходимо использовать стандартные значения. Системный пользователь ssw создается при инсталляции пакета ecss-user.

При установке системы в кластере значение для первого сервера — ecss1, для второго — ecss2.
Другие имена хостов возможны только при согласовании проекта, это потребуется для генерации лицензий. 

Указать имя хоста: ecss1 / ecss2 в файле /etc/hostname:

на обоих хостах

sudo nano /etc/hostname 
CODE

Настройка /etc/hosts

После настройки netplan необходимо указать, что внутренний адрес 10.0.10.Х принадлежит соответствующему серверу ecssX. Для этого настраиваем /etc/hosts:

Настройка hosts для ecss1 (/etc/hosts)Настройка hosts для ecss2 (/etc/hosts)
127.0.0.1   localhost # Адрес локальной петли, используется некоторыми сервисами ecss
10.0.10.51  ecss1 # Адрес хоста
10.0.10.52  ecss2 # Внутренний адрес другого хоста

127.0.0.1 localhost # Адрес локальной петли, используется некоторыми сервисами ecss
10.0.10.52 ecss2 # Адрес хоста
10.0.10.51 ecss1 # Внутренний адрес другого сервера 

Теперь, если вызвать утилиту ping на ecssX, можно обратиться к соседнему серверу.

Обращение к ecss2 с ecss1Обращение к ecss1 с ecss2
ping ecss2
PING ecss2 (10.0.10.52) 56(84) bytes of data.
64 bytes from ecss2 (10.0.10.52): icmp_seq=1 ttl=64 time=0.047 ms
ping ecss1
PING ecss1 (10.0.10.51) 56(84) bytes of data.
64 bytes from ecss1 (10.0.10.51): icmp_seq=1 ttl=64 time=0.032 ms

Далее следует организовать доступ между серверами через ssh по rsa-ключам  - без использования пароля.

Генерируем rsa-ключ следующий командой (выполняем команду без sudo, чтобы ключ сгенерировался для текущего пользователя), при выполнении команды будут заданы три вопроса, можно использовать значение по умолчанию, нажав три раза Enter:

на обоих хостах

ssh-keygen
BASH

на ecss1

ssh-copy-id ecss2
BASH

Таким же образом  на хосте ecss2.

на ecss2

ssh-copy-id ecss1
BASH

проврете подключение между серверами,  со стороны сервера ecss1 - ssh ecss2 соединение должно быть установлено без запроса пароля . Аналогичным образом со стороны сервера ecss2 - ssh ecss1

"Оптимизация" Операционной Системы

Выставить параметры ОС в режим производительности

Используем  утилиту cpufrequtils.

на обоих хостах

sudo apt install -y cpufrequtils
BASH

по умолчанию после инсталляции Ubuntu использует режим "ondemand" - "по запросу" (производительность CPU по запросу приложений, экономит электроэнергию , но ниже производительность):

на обоих хостах

cat /etc/init.d/cpufrequtils | grep GOVERNOR=
CODE

в выходном сообщении системы , режим работы по умолчанию после инсталляции - "ondemand" :

GOVERNOR="ondemand"

Установить режим - результативность/производительность  -  в файле /etc/init.d/cpufrequtils значение "ondemand" заменить на "performance"

на обоих хостах

sudo sed -i 's/GOVERNOR="ondemand"/GOVERNOR="performance"/g' /etc/init.d/cpufrequtils
BASH

Перезапустить утилиту:

на обоих хостах

sudo /etc/init.d/cpufrequtils restart 
BASH

Затем выполнить команду:

на обоих хостах

sudo systemctl daemon-reload
BASH

Отключить SWAP

Ubuntu сервер SSW работает в реальном масштабе времени , поэтому все необходимые данные должны находится в оперативной памяти, использование  файла подкачки (swap-файл - /swap. img) может привести к увеличению времени обработки вызовов приложения SSW ECSS10 , что недопустимо. Swap - отключаем. 
Выполнить последовательно три команды:

Отключение Swap:

на обоих хостах

sudo swapoff -a
BASH

Удалить файл swap.img.

на обоих хостах

sudo rm /swap.img
BASH

Закомментировать строку - /swap.img none swap sw 0 0 -   в файле /etc/fstab -

привести ее к виду # /swap.img none swap sw 0 0

либо удалить эту строчку (/swap.img none swap sw 0 0)

на обоих хостах

sudo nano /etc/fstab
BASH
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/731728e2-4d6b-499a-afea-9362fd6726b2 / ext4 defaults 0 1
# /swap.img none swap sw 0 0

Для проверки выполните команду  free -h:

на обоих хостах

free -h
BASH

Размер Swap равен 0 - то есть он выключен

free -h
              total        used        free      shared  buff/cache   available
Mem:           3,9G        110M        3,2G        820K        535M        3,5G
Swap:            0B          0B          0B

Установка часового пояса

При инсталляции Ubuntu-22 не предлагается установить часовой пояс(по умолчанию устанавливается время UTC). Его нужно установить вручную (для корректной работы системы тарификации , работ по расписанию и т.д. ), например:

на обоих хостах

sudo timedatectl set-timezone Asia/Novosibirsk
BASH

В случае выноса компонентов системы на разные серверы/ВМ (ecss-node/ecss-msr) необходимо указывать единый часовой пояс, для всех компонентов системы.

Улучшение работы высоконагруженных серверов

Улучшить работу высоконагруженных серверов можно увеличив лимит открытых файлов.

Для установки лимита открытых файлов необходимо:

Проверить текущий лимит командой:

на обоих хостах

ulimit -a
CODE

результат :

eltex@ecss1:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15515
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15515
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Данного лимита ( open files  1024 ) недостаточно для нормальной работы высоконагруженных серверов.

Установить лимит открытых файл для каждого пользователя:

на обоих хостах

sudo sed -i  '55i\*                soft    nproc           65536\n*                hard    nproc           131072\n*                soft    nofile          65536\n*                hard    nofile          131072\nroot             -       memlock         unlimited' /etc/security/limits.conf
CODE

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - a user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#        - NOTE: group and wildcard limits are not applied to root.
#          To apply a limit to the root user, <domain> must be
#          the literal username root.
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4
*                soft    nproc           65536
*                hard    nproc           131072
*                soft    nofile          65536
*                hard    nofile          131072
root             -       memlock         unlimited

# End of file

ВАЖНО

Установку пакетов требуется делать НЕ из-под пользователя ssw.

Обновление программного обеспечения операционной системы

Для установки системы ECSS-10 необходимо добавить репозиторий ELTEX.

на обоих хостах

sudo sh -c "echo 'deb [arch=amd64] http://archive.eltex.org/ssw/jammy/3.18 stable main extras external' > /etc/apt/sources.list.d/eltex-ecss10-stable.list"
BASH

Далее необходимо выполнить импорт ключа командой:

на обоих хостах

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 33CB2B750F8BB6A5
BASH

Для обновления ОС необходимо выполнить команды:

на обоих хостах

sudo apt update
CODE

Если вы видите такое сообщение системы:

W: http://archive.eltex.org/ssw/jammy/3.18/dists/unstable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

Выполните следующую команду:

на обоих хостах

sudo cp /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d
CODE

на обоих хостах

sudo apt upgrade
BASH

Установка и настройка программного обеспечения

установка пакетов deb

  ┌ версия ПО ECSS. Сейчас в заявке на сертификацию она заявлена как 3. 
  | Мы её менять не будем до следующей сертификации или
  │ выпуска принципиально новой версии системы.
  │
  │     ┌ версия System Release. Общая версия для всех компонент входящих в конкретный релиз. 
  |     | Меняем её централизовано, когда
  │     │ принимаем решение о выпуске нового релиза. Релизы между собой обычно не совместимы.
┌─┴┐ ┌──┴─┐
ECSS.SysRel.SubMaj.SubMin
            └──┬─┘ └──┬─┘
               │      └ версия Subsystem minor. Минорную версию подсистемы устанавливает разработчик подсистемы. 
               |        Минорную версию
               │        меняем при добавлении патча. Как правило, минорные версии в рамках одной мажорной версии 
               │        совместимы между собой и отличаются в рамках конкретных патчей.
               │
               └ версия Subsystem major. Мажорная версия устанавливается разработчиком подсистемы. 
                 Мажорную версию подсистемы необходимо менять при внесении в подсистему существенных изменений.


Утилита установки пакетов APT анализирует версию пакета слева направо, то есть мы имеем пакет 14.14.7.7 , 
в репозитории находятся пакеты
14.14.7.8
14.14.7.9
14.14.8.1
14.14.20 -14.14.28
то при выполнении команды sudo apt install имя пакета → будет автоматически проверен и установлен пакет 14.14.28 , так как он самый последний, анализ будет выполнен по 3-й позиции  (major), анализ по 4-й (minor) выполнен не будет (аналогичным образом будет выполнятся команда sudo apt upgrade).

В случае если для конкретной ситуации требуется перейти с версии 14.14.7.7 на версию 14.14.7.9 , стандартная команда → sudo apt upgrade , нам не поможет, так как будет выбран самый новый пакет, в данной ситуации нам необходимо в явном виде указать какую версию пакета мы хотим установить, в данном примере мы должны выбрать команду → sudo apt install имя пакета=14.14.7.9 . Обычно это необходимо для тестирования определенного патча, для стандартных обновлений достаточно выбора привычной команды установки /обновления пакета

Установите все предложенные пакеты:

на обоих хостах

sudo apt install -y ntp ntpdate tcpdump vlan dnsmasq aptitude atop ethtool htop iotop mc minicom mtr-tiny nmap pptpd pv screen ssh tftpd vim sngrep tshark cpanminus gnuplot libgraph-easy-perl debconf-utils
BASH

Также установите пакеты для системы с резервированием:

на обоих хостах

sudo apt install -y ifenslave keepalived attr
BASH

Список обязательного сервисного программного обеспечения:

sudo apt install -y ntp tcpdump vlan dnsmasq
BASH
ntpNTP-сервер
tcpdumpсниффер пакетов
vlanуправление VLAN
dnsmasqлегковесный DNS/DHCP-сервер

Список рекомендуемого диагностического и вспомогательного программного обеспечения:

sudo apt install -y aptitude atop ethtool htop mc screen ssh tftpd sngrep tshark gnuplot libgraph-easy-perl debconf-utils iotop ncdu
BASH
aptitudeустановка программ из репозиториев, рекомендуется использовать вместо программы apt/apt-get
atopмониторинг загрузки хоста с функцией периодического сохранения информации в файлы
ethtoolпросмотр статистики сетевых интерфейсов
htopмониторинг процессов
mcфайловый менеджер
screenмультиплексор терминалов
sshсервер и клиент SSH
tftpdTFTP-сервер
sngrepтрассировка sip
tsharkконсольный аналог wireshark
gnuplotвывод графиков статистики
libgraph-easy-perlPerl-модуль для преобразования или рендеринга графиков (в ASCII, HTML, SVG или через Graphviz)
debconf-utilsнабор утилит для работы с базой debconf
iotopинструмент для мониторинга использования ввода-вывода (IO) на диске в реальном времени в Linux
ncduутилита для поиска больших директорий в системе Linux

Данное программное обеспечение не требуется для работы системы ECSS-10, однако может упростить сервисное обслуживание системы и её отдельных компонентов со стороны инженеров эксплуатации и техподдержки.

Список обязательных пакетов для схем с резервированием:

sudo apt install -y ifenslave-2.6 keepalived attr
BASH
ifenslave-2.6управление BOND-интерфейсами
keepalivedсервис мониторинга серверов/служб в кластере
attrсервис управления атрибутами файловых систем

Список дополнительных пакетов для схем с резервированием:

sudo apt install -y bridge-utils ethtool
BASH
bridge-utilsуправление bridge-интерфейсами
ethtoolуправление и мониторинг сетевых интерфейсов

Перед началом установки пакетов ecss , нужно убедится в соответствии полосы пропускания СПД необходимым требованиям.
Для этого выполнить команду  sudo ethtool  <имя интерфейса> для всех физических интерфейсов.

sudo ethtool net.20
Settings for net.20:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Supported pause frame use: No
    Supports auto-negotiation: Yes
    Supported FEC modes: Not reported
    Advertised link modes:  10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Advertised pause frame use: No
    Advertised auto-negotiation: Yes
    Advertised FEC modes: Not reported
    Speed: 1000Mb/s
    Duplex: Full
    Auto-negotiation: on
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    MDI-X: off (auto)
    Link detected: yes

Проверить значение  следующих параметров:
Advertised auto-negotiation: Yes
Speed: 1000Mb/s  (не менее)
Duplex: Full

Инсталляция обязательных пакетов ECSS

Установка пакета ecss-dns-env

Выполнить следующую команду:

на обоих хостах

sudo apt install -y ecss-dns-env
CODE

Настройщик предложит выбрать разделы для настройки по вопросам ниже. Нужно выбрать broker. (для примера 10.0.10.51 и 10.0.10.52 )

Вопрос ecss-dns-envОтветы для ecss1Ответы для ecss2
[Primary broker] Введите адрес ([Primary broker] Enter ip)10.0.10.51 (необходимо ввести)10.0.10.51 (необходимо ввести)
[Secondary broker] Введите адрес ([Secondary broker] Enter ip)10.0.10.52 (необходимо ввести)10.0.10.52 (необходимо ввести)

ВАЖНО

В случае последующей коррекции IP-адресов следует использовать команду: 

sudo dpkg-reconfigure ecss-dns-env
BASH

Установка Postgres


Примечание

Перед установкой ecss-postgres-bdr-ssw в системе, в apt sources, должен быть добавлен docker для этого выполнить следующие команды:

на обоих хостах

sudo install -m 0755 -d /etc/apt/keyrings
CODE

на всех хостах

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
CODE

на всех хостах

sudo chmod a+r /etc/apt/keyrings/docker.asc
CODE

на всех хостах

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
CODE

на всех хостах - Выполнить обновление :

sudo apt update && sudo apt upgrade
BASH

Установка пакета ecss-postgres-bdr-ssw

Выполняется последовательно, первым устанавливается на сервере который работает в режиме "Master"

ecss1

sudo apt install -y ecss-postgres-bdr-ssw
BASH

При конфигурации пакета ecss-postgres-bdr-ssw будут заданы вопросы:

Вопросы ecss-postgres-bdr-sswОтветы для ecss1 (Master)
Текущий IP-адрес сетевого интерфейса.Выбрать из списка IP-адрес для работы с Postgres
Установка в кластере?Yes (значение по умолчанию)
Является ли этот узел мастером?Yes  (необходимо выбрать)


ecss2

sudo apt install -y ecss-postgres-bdr-ssw
BASH

При конфигурации пакета ecss-postgres-bdr-ssw будут заданы вопросы:

Вопросы ecss-postgres-bdr-sswОтветы для ecss2 (Slave)
Текущий IP-адрес сетевого интерфейса.Выбрать из списка IP-адрес для работы с Postgres
Установка в кластере?Yes (значение по умолчанию)
Является ли этот узел мастером?No (значение по умолчанию)
IP-адрес, используемый для подключения к кластеру:Указать IP-адрес Master (ecss1)


Проверить корректность настройки репликации 

Во время установки в директорию /srv/ecss/ecss-postgres-bdr-ssw устанавливаются скрипт postgresbdr_ssw.sh

Для проверки репликации выполнить следующие команды:

Для проверки репликации выполнить команду на обоих хостах:

cd /srv/ecss/ecss-postgres-bdr-ssw
BASH

Для проверки репликации выполнить команду на обоих хостах:

sudo ./postgresbdr_ssw.sh check
BASH


Вывод на хостах должен быль одинаковый:


ecss1

sudo ./postgresbdr_ssw.sh check
Enter master ip please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press enter with empty password
Просто щелкайте Enter не вводя пароль
q - выход из просмотра таблицы (если необходимо)
таблица нод на мастере по ecss_storekeeper_db
таблица нод на слейве по ecss_storekeeper_db
таблица коннекций на мастер по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(2 rows)

таблица коннекций на слейве по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(2 rows)

ecss2

sudo ./postgresbdr_ssw.sh check
Enter master ip please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press enter with empty password
Просто щелкайте Enter не вводя пароль
q - выход из просмотра таблицы (если необходимо)
таблица нод на мастере по ecss_storekeeper_db
таблица нод на слейве по ecss_storekeeper_db
таблица коннекций на мастер по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(2 rows)

таблица коннекций на слейве по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(2 rows)

нет доступа до slave

sudo ./postgresbdr_ssw.sh check
[sudo] password for abf: 
Sorry, try again.
[sudo] password for abf: 
Enter master ip please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press enter with empty password
Просто щелкайте Enter не вводя пароль
q - выход из просмотра таблицы (если необходимо)
таблица нод на мастере по ecss_storekeeper_db
     node_sysid      |                                    node_local_dsn                                     | node_init_from_dsn 
---------------------+---------------------------------------------------------------------------------------+--------------------
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 | 
(1 row)

таблица нод на слейве по ecss_storekeeper_db
psql: error: connection to server at "10.0.10.52", port 5439 failed: Connection refused
    Is the server running on that host and accepting TCP/IP connections?
таблица коннекций на мастер по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(1 row)

таблица коннекций на слейве по ecss_storekeeper_db
psql: error: connection to server at "10.0.10.52", port 5439 failed: Connection refused
    Is the server running on that host and accepting TCP/IP connections?

ошибка несоответствия коннекций

sudo ./postgresbdr_ssw.sh check
Enter master ip please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press enter with empty password
Просто щелкайте Enter не вводя пароль
q - выход из просмотра таблицы (если необходимо)
таблица нод на мастере по ecss_storekeeper_db
     node_sysid      |                                    node_local_dsn                                     | node_init_from_dsn 
---------------------+---------------------------------------------------------------------------------------+--------------------
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 | 
(1 row)

таблица нод на слейве по ecss_storekeeper_db
таблица коннекций на мастер по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(1 row)

таблица коннекций на слейве по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(3 rows)


Установка ecss-node

Установка обязательного пакета ecss-node включает в себя установку и первоначальную настройку основных подсистем.

В системе уже должен быть установлен пакет ecss-postgres-bdr-ssw

Для установки пакета ecss-node выполните команду:

первоначально на ecss1 по окончанию установки пакета на ecss2

sudo apt install -y ecss-node
BASH

Во время установки пакета создается пользователь ssw, от имени которого запускаются все сервисы ecss*. Создаются необходимые каталоги, выполняется настройка DNS, идет настройка SSL-сертификатов.

При установки так же будет установлен пакет ecss-user

Установка на сервере ecss1

Во время установки будет предложено настроить параметры, необходимые для формирования конфигурационных файлов, примеры ответов следует ниже.

Вопросы ecss-userОтветы для ecss1Пример
Хотите ли вы использовать стандартные настройки?Yes (значение по умолчанию)

 
Вопросы ecss-nodeОтветы для ecss1Пример

Идентификатор ECSS-узла в формате DNS (Настройка имени кластера): (любое уникальное имя, в примере abf.test)

abf.test (необходимо ввести)

Формат ECSS_ID
Начинается и заканчивается обязательно латинской буквой или цифрой, в теле же могут использоваться точки и тире. 

[A-Za-z0-9][A-Za-z0-9.-][A-Za-z0-9]

Хотите ли вы использовать стандартные настройки?No (необходимо выбрать)

Выберите пункты, которые хотите настроить:ntp + cookie  (необходимо выбрать)

Внешние NTP серверы через пробел:ntp.ubuntu.com  (значение по умолчанию)

NTP: Вы хотите использовать настройки для кластера?Yes (значение по умолчанию)

NTP: Установка Startum для кластера:7 (значение по умолчанию)

NTP укажите локальне серверы для синхронизации через пробел: (в примере ecss2 - 10.0.10.52)10.0.10.52  (необходимо ввести)

NTP: Вы хотите определить сети вручную, у которых должен быть доступ до ntp?Yes (значение по умолчанию)

NTP: Сети у которых должен быть доступ до ntp через пробел: (в примере 10.0.10.0|255.255.255.0 10.0.20.0|255.255.255.0)10.0.10.0|255.255.255.0 10.0.20.0|255.255.255.0 (необходимо ввести)

Cookie для ноды core: (указать уникальный cookie для core , в примере ecss-core-example )

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

 

ecss-core-example (необходимо ввести)

Cookie для ноды ds: (указать уникальный cookie для ds , в примере ecss-ds-example )

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-ds-example (необходимо ввести)

Cookie для ноды mediator: (указать уникальный cookie для mediator , в примере ecss-mediator-example )

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-mediator-example  (необходимо ввести)

Cookie для ноды pa-sip: (указать уникальный cookie для pa-sip , в примере ecss-pa-sip-example)

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-pa-sip-example  (необходимо ввести)

Cookie для ноды mycelium: (указать уникальный cookie для mycelium , в примере ecss-mycelium-example)

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-mycelium-example (необходимо ввести)

Cookie для ноды sorm: (указать уникальный cookie для sorm , в примере ecss-sorm-example)

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-sorm-example (необходимо ввести)

 
Вопросы ecss-userОтветы для ecss1Пример
Максимальный размер несжатого дампа в байтах.8G (значение по умолчанию)

Максимальный размер сжатого дампа в байтах.2G (значение по умолчанию)

Максимальный размер, который может занять каталог /var/lib/systemd/coredump:

default (значение по умолчанию)

Минимальный объем свободного дискового пространства в байтах. 30G (значение по умолчанию)

Сохраните в безопасное место и удалите файл /etc/ecss/ssl/ecss10root.key!

Ok (значение по умолчанию)

После установки пакета ecss-node на хосте ecss1, выполните команду "sudo usermod -a -G ssw <Имя_пользователя>" на хосте ecss1.
Затем выполите установку на хосте ecss2. 
Используйте режим "Скопировать существующие сертификаты (copy) по ssh" с сервера ecss1

Установка на сервере ecss2

Во время установки будет предложено настроить параметры, необходимые для формирования конфигурационных файлов, примеры ответов следует ниже.

Вопросы ecss-userОтветы для ecss2Пример
Хотите ли вы использовать стандартные настройки?No (значение по умолчанию)

Хотите ли вы выключить ежедневное обновление apt-пакетов?Yes (значение по умолчанию)

Как вы хотите сконфигурировать сертификаты?copy (необходимо выбрать)

Вы хотите установить сертификаты в систему?Yes (значение по умолчанию)

Каким методом вы хотите скопировать сертификаты?ssh (необходимо выбрать)

Введите имя хоста для подключения:ecss1 (необходимо ввести)

Введите порт хоста для подключения:22 (значение по умолчанию)

Введите логин для подключения: (для примера eltex)eltex (необходимо ввести)


Какой метод авторизации использовать?password (необходимо выбрать)

Введите пароль для подключения:  

Введите путь до сертификатов:/etc/ecss/ssl (значение по умолчанию)

 
Вопросы ecss-nodeОтветы для ecss2Пример

Идентификатор ECSS-узла в формате DNS (Настройка имени кластера): (любое уникальное имя, в примере abf.test)

abf.test (необходимо ввести)

Формат ECSS_ID
Начинается и заканчивается обязательно латинской буквой или цифрой, в теле же могут использоваться точки и тире. 

[A-Za-z0-9][A-Za-z0-9.-][A-Za-z0-9]

Хотите ли вы использовать стандартные настройки?No (необходимо выбрать)

Выберите пункты, которые хотите настроить:ntp + cookie  (необходимо выбрать)

Внешние NTP серверы через пробел:ntp.ubuntu.com  (значение по умолчанию)

NTP: Вы хотите использовать настройки для кластера?Yes (значение по умолчанию)

NTP: Установка Startum для кластера:7 (значение по умолчанию)

NTP укажите локальне серверы для синхронизации через пробел: (в примере ecss2 - 10.0.10.51)10.0.10.51  (необходимо ввести)

NTP: Вы хотите определить сети вручную, у которых должен быть доступ до ntp?Yes (значение по умолчанию)

NTP: Сети у которых должен быть доступ до ntp через пробел: (в примере 10.0.10.0|255.255.255.0 10.0.20.0|255.255.255.0)10.0.10.0|255.255.255.0 10.0.20.0|255.255.255.0 (необходимо ввести)

Cookie для ноды core: (указать уникальный cookie для core , в примере ecss-core-example )

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-core-example (необходимо ввести)

Cookie для ноды ds: (указать уникальный cookie для ds , в примере ecss-ds-example )

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-ds-example (необходимо ввести)

Cookie для ноды mediator: (указать уникальный cookie для mediator , в примере ecss-mediator-example )

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-mediator-example  (необходимо ввести)

Cookie для ноды pa-sip: (указать уникальный cookie для pa-sip , в примере ecss-pa-sip-example)

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-pa-sip-example  (необходимо ввести)

Cookie для ноды mycelium: (указать уникальный cookie для mycelium , в примере ecss-mycelium-example)

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-mycelium-example (необходимо ввести)

Cookie для ноды sorm: (указать уникальный cookie для sorm , в примере ecss-sorm-example)

В кластерной конфигурации cooke должны быть одинаковые для нод одного типа

ecss-sorm-example (необходимо ввести)

 
Вопросы ecss-userОтветы для ecss2Пример
Максимальный размер несжатого дампа в байтах.8G (значение по умолчанию)

Максимальный размер сжатого дампа в байтах.2G (значение по умолчанию)

Максимальный размер, который может занять каталог /var/lib/systemd/coredump:

default (значение по умолчанию)

Минимальный объем свободного дискового пространства в байтах. 30G (значение по умолчанию)

Сохраните в безопасное место и удалите файл /etc/ecss/ssl/ecss10root.key!

Ok (значение по умолчанию)


Проверить статус сервисов следующей командой:

на обоих хостах

systemctl is-active ecss-core ecss-pa-sip ecss-ds ecss-mediator ecss-mycelium
CODE

В случае статуса "active" продолжаем дальше, в случае статуса "inactive" выполнить команду "sudo systemctl restart ecss-<имя пакета>"

systemctl is-active ecss-core ecss-pa-sip ecss-ds ecss-mediator ecss-mycelium
active
active
active
active
active


Конфигурация NTP

При установке по умолчанию, (Хотите ли вы использовать стандартные настройки?) конфигурация NTP не будет выполнена. При необходимости выполнить конфигурацию NTP:

Синхронизация времени на серверах

Перед настройкой NTP нужно убедиться, что в системе установлен пакет ntp.

Пример:

dpkg -l | grep ntp
ii  ntp                                   1:4.2.8p10+dfsg-5ubuntu7.3                      amd64        Network Time Protocol daemon and utility programs
ii  sntp                                  1:4.2.8p10+dfsg-5ubuntu7.3                      amd64        Network Time Protocol - sntp client

Затем рекомендуется задать значение текущей системной даты, максимально приближенное к реальному времени. Для этого можно воспользоваться утилитой для ручной синхронизации времени ntpdate.

Пример для установки времени с сервера ntp.ubuntu.com:

sudo ntpdate ntp.ubuntu.com

Команда date без параметров выводит на экран текущее системное время.

Установка и настройка NTP

Конфигурация NTP настраивается при установке пакета ecss-node.

Рассмотрим настройку NTP для кластера из 2-х серверов ecss со следующими параметрами:

ПараметрЗначение
Адреса внешних NTP-серверов
Локальная синхронизация серверов кластера между собой (orphan mode)

Да, для следующих адресов:

  • ecss1 - 192.168.1.21
  • ecss2 - 192.168.1.22
Подсети, с которых разрешено другим устройствам синхронизироваться с данным сервером
  • 192.168.1.0/24
  • 10.16.0.0/16

В ходе установки будут заданы несколько вопросов для формирования файла конфигурации. 

Ниже приведен пример ответа на вопросы:

Необходимо ввести внешние сервера через пробел (по умолчанию ntp.ubuntu.com):

Необходимо разрешить (Yes) или запретить (No) активацию режима tos orphan (режим для кластера, в котором серверы самостоятельно регулируют синхронизацию). Если система устанавливается в кластере, то серверы ECSS должны иметь одинаковое время, даже если внешние NTP-серверы недоступны. Поэтому необходимо выбрать "Yes".

Точность времени кластера по Strаtum. По умолчанию — 7:

Предлагается ввести адреса соседних серверов кластера для их синхронизации между собой. В данном примере настраиваем ecss1, поэтому вводим адрес ecss2. При настройке ecss2 соответственно вводится адрес ecss1. Если серверов несколько, необходимо перечислить их через пробел.

Далее предлагается настроить адреса подсетей, из которых другим устройствам разрешено синхронизироваться с данным сервером:

Указываются сети, которые могут иметь доступ до данного сервера, чтобы другие ноды, а также прочие устройства  могли синхронизировать время с данным сервером. Формат указания сетей: <адрес_сети|маска_сети>. Если сетей несколько, необходимо перечислить их через пробел.

После инсталляции настройки сохраняются в файле /etc/ecss/ecss-ntp.conf. Пример получившегося файла для сервера ecss1

# /etc/ntp.conf

# http://www.k-max.name/linux/ntp-server-na-linux/
# В preinst делаем резервную копию старого и устанавливаем текущий
# В postrm загружаем из резервной копии

# Смещение системных часов
driftfile       /var/lib/ntp/ntp.drift
# Логи
logfile /var/log/ntp
# Статистика синхронизации времени
statsdir /var/log/ntpstats/

# Разрешает записывать статистику:
# loopstats - статистика для петли (loopback)
# peerstats - статистика пиров
# clockstats - статистика драйвера времени
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# Активация Orphan mode — режима синхронизации времени для кластеров. Устанавливаем для него stratum (уровень точности: число от 1 до 16)
# tos orphan <stratum>
# TOS
tos orphan 7 ### INSTALLED AUTOMAT BY ECSS10


# Сервера локальной сети
# peer <ip|domain>
# LOCAL_SERVERS
peer 192.168.1.22 ### INSTALLED AUTOMAT BY ECSS10



# Интернет-сервера
# server xx.xx.xx.xx iburst
# restrict xx.xx.xx.xx
# INTERNET_SERVERS
server ntp5.stratum1.ru iburst ### INSTALLED AUTOMAT BY ECSS10
restrict ntp5.stratum1.ru ### INSTALLED AUTOMAT BY ECSS10
server 10.136.16.100 iburst ### INSTALLED AUTOMAT BY ECSS10
restrict 10.136.16.100 ### INSTALLED AUTOMAT BY ECSS10

# Ограничение доступа к конфигурируемому серверу:
# По умолчанию игнорируем все
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
restrict source notrap nomodify noquery

# Localhost без параметров — значит разрешено все. Параметры идут только на запреты.
restrict 127.0.0.1
restrict ::1

Для ecss2 файл будет аналогичным, за исключением строки пира к соседнему серверу (192.168.1.21):

peer 192.168.1.21 ### INSTALLED AUTOMAT BY ECSS10

В режиме Orphan серверы в кластере синхронизируются друг от друга, сами определяют мастера и следят, чтобы в рамках кластера часы шли синхронно.
Если появляется мастер-сервер NTP со значением stratum меньше заданного для кластера, то кластер автоматически перенастраивается на синхронизацию от него. Таким образом выполняется условие постоянного наличия единственной точки синхронизации времени.

Все зависимые устройства в системе ECSS-10 должны синхронизироваться от серверов кластера. Если используется схема без резервирования, от настройки режима для кластера можно отказаться: тогда в конфигурационном файле будет отсутствовать секция настройки локальных серверов для синхронизации между собой.

Править конфигурационный файл вручную не рекомендуется, так как при обновлении пакета ecss-node в файл запишутся прошлые настройки из базы debconf от последней реконфигурации пакета.

Правильный способ — использовать команду dpkg-reconfigure:

sudo dpkg-reconfigure ecss-node

Если в файл конфигурации все же были вручную внесены какие-либо изменения, то для применения команды dpkg-reconfigure нужно перезапустить сервис NTP:

sudo systemctl restart ntp.service

Для просмотра информации о состоянии синхронизации используется команда  ntpq –p . Если использовать дополнительный ключ –n, вместо имени сервера будет указан IP-адрес:

Пример:

sasha@ecss1:~$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ecss2           88.147.254.229   2 s   11   64  377    0.099   -1.169   0.357
+10.136.16.100   194.58.204.148   2 u   56  128  377    4.008   -2.482   0.339
*88.147.254.229  .PPS.            1 u  124  128  377   60.440    0.691   0.098

Описание параметров:

  • remote — имя удаленного NTP-сервера;
  • refid — IP-адрес сервера, с которым производит синхронизацию удаленный сервер NTP;
  • st — stratum (уровень): число от 1 до 16, отражающее точность сервера;
  • t — тип удаленного сервера:
    • u — unicast,
    • l — local,
    • m — multicast,
    • s –  symmetric (peer),
    • b — broadcst;
  • when — интервал времени (в секундах), прошедший с момента получения последнего пакета от данного сервера;
  • poll — интервал между опросами (в секундах), значение варьируется;
  • reach — состояние доступности сервера. Восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с сервером. Если последние 8 попыток синхронизации с удаленным сервером были успешны, то параметр принимает значение 377;
  • delay — вычисленная задержка ответов от сервера (RTT) в миллисекундах;
  • offset — разница между временем локального и удаленного серверов;
  • jitter — джиттер, мера статистических отклонений от значения смещения (поле offset) по нескольким успешным параметрам запрос-ответ.

Значение символов перед именами серверов

x — фальшивый источник по алгоритму пересечения;
. — исключён из списка кандидатов из-за большого расстояния;
- — удален из списка кандидатов алгоритмом кластеризации;
+ — входит в конечный список кандидатов;
# — выбран для синхронизации, но есть 6 лучших кандидатов;
* — выбран для синхронизации;
o — выбран для синхронизации, но используется PPS;
пробел — слишком большой уровень, цикл или явная ошибка;

После старта сервиса может потребоваться около 10 минут для установления синхронизации времени с базовым NTP-сервером.

Проверить состояние настроенного сервера NTP можно с помощью команды ntpdate:

sasha@ecss1:~$ sudo ntpdate -q localhost
server 127.0.0.1, stratum 2, offset -0.000032, delay 0.02573
28 Sep 15:00:57 ntpdate[19002]: adjust time server 127.0.0.1 offset -0.000032 sec

Как видно, значение stratum сервера стало равно 2.

Установка лицензии

Система ECSS-10 использует ELM-лицензирование – сервис распределения лицензий ECSS-экосистемы, состоит из ecss-license-agent и ecss-license-master .

  • ECSS License Agent - Адаптер для работы с EcssLicenseMaster (LM). Получает список хостов EcssLicenseMaster, реализует логику подключения и переподключения к LM.
    • Отвечает за получение, валидацию и дальнейшую отправку лицензий клиенту.
    • Отправляет статусы подключения и полученные лицензии клиенту.
    • Предоставляет API для отправки HTTP запросов и WS событий на LM.
  • Ecss License Master - Сервис оркестрации параметров лицензии для ECSS-узлов.
    • Отвечает за:
      • Получение лицензии для конкретного ECSS-узла (SSW / AuP) либо устройства (SMG)
      • Распределение параметров лицензии между ECSS-узлами и ECSS-сервисами
      • Контроль активности ECSS-узлов и их валидация во избежание тиражирования лицензии сверх указанных лимитов
      • Контроль изменения указанных лимитов на ECSS-узлах, и их динамическое распределение в соответствии с текущей нагрузкой.


ecss-license-agent является составной частью SSW, входит в пакет ecss-node. Отдельной конфигурации не требует.
В свою очередь Ecss License Master может быть установлен как на SSW так и на отдельно выделенный сервер. В случае если Ecss License Master уже установлен на вашем проекте, то потребуется только дополнить запись о новом компоненте в конфигурационном файле LM, и следующий пункт – установка "Установка LM" не потребуется.

Для установки пакета ecss-license-master необходимо добавить репозиторий следующей командой:

если кластер, то на обоих хостах

sudo sh -c "echo deb [arch=amd64] https://archive.eltex.org/ssw/jammy/aup/2.0 stable main extras external >> /etc/apt/sources.list.d/lm-stable.list"
CODE

Выполнить обновление из добавленного репозитория командой:

если кластер, то на обоих хостах

sudo apt update
CODE

Установить пакет LM (ecss-license-master)

если кластер, то на обоих хостах

sudo apt install ecss-license-master
CODE

При установке пакета ecss-license-master будут заданы вопросы:

ВопросыОтветыПримеры

Адрес для соединения c License Master:
License Master listen ip:

0.0.0.0  (значение по умолчанию)

Порт для соединения c License Master:
License Master listen port:
4321 (значение по умолчанию)

Выберите уровень логирования:
Log level:
info (значение по умолчанию),
возможные варианты: debug, error, info

Ключ-имя кластера резервирования:
License Master cluster key:

указать уникальное имя
ecss-lm-cluster (значение по умолчанию)

Менеджеры с одинаковыми именами
попытаются собраться в кластер и резервировать друг друга.


Данные сохраняются в файле - /etc/ecss/ecss-license-master/config.env :

ECSS_LM_HOST=0.0.0.0
ECSS_LM_PORT=4321
ECSS_LM_LOG_LEVEL=info
RELEASE_COOKIE=ecss-abf-lm-cluster


Конфигурация LM

Сервис ecss-license-master использует два конфигурационных файла: /etc/ecss/ecss-license-master/config.env и /etc/ecss/ecss-license-master/config.yaml.
В файл config.env информация сохраняется в момент установки пакета ecss-license-master
Сonfig.yaml файл  содержит основные настройки для подключения к ELM серверу, откуда брать лицензии, какие лицензии, и куда их потом передавать, все это нужно сконфигурировать вручную.

Выполнить команду:

если кластер, то на обоих хостах

sudo nano /etc/ecss/ecss-license-master/config.yaml
CODE


информация в файле после установки

elm_addresses: []
licenses: []
ecss_nodes: []
CODE

В поле elm_adresses нужно прописать список серверов ELM к которым мы хотим подключаться для получения лицензий. Первый адрес в списке используется как основной. Дополнительные строки с адресами работают как резерв.

Данные ELM сервера(ов) получить у менеджера проекта.

пример:
- "elm-1.eltex.loc:8099"
- "192.168.111.22:8099"
- "elm-3.eltex.loc:8099"

Дальше задаются сами лицензии в поле licenses.

  • idможет быть любой, главное чтоб был уникальный у каждой лицензии. Влияет только на адрес лицензии на самом LM (например 0,1,2,3).
  • kind – для SSW поддерживается только ssw.
  • typeвыбирается как elm если запрашивать данную лицензию нужно с ELM сервера. Если нужно использовать файловую лицензию SSW, то тип выбирается как ecss_license.
    • при elm типе, необходимо задать поля license_key и product_id для идентификации лицензии.
    • при ecss_license типе, задается поле license содержащее ключ статичной лицензии

Параметры license_key и product_id должны быть согласованы с данными загруженными на ELM сервере .

Значение параметров license_key, product_id или license, passport нужно получить у менеджера проекта.


Блок ecss_nodes
В нем нужно задать данные сервисов которые будут получать лицензию. В нашем случае SSW. Сервис задается тремя параметрами:

  • id – идентификатор сервиса, должен совпадать с ECSS_ID лицензируемого SSW.
  • kind – тип лицензируемого сервиса. по аналогии с блоком лицензий, для SSW поддерживается только ssw.
  • license_id – идентификатор лицензии которая будет отправляться на данный сервис. Соответствует идентификаторам лицензии из блока licenses
Два SSW с разными ECSS_ID не могут получить одну и ту же лицензию, конфигурация с таким распределением будет помечена некорректной.
Кроме того, два SSW с одинаковыми ECSS_ID не смогут одновременно получать одну и ту же лицензию с одного LM, 
поэтому крайне важно корректно устанавливать свой ECSS_ID и делать его уникальным как минимум в зоне видимости используемого LM.

Формат ECSS_ID
Начинается и заканчивается обязательно латинской буквой или цифрой, в теле же могут использоваться точки и тире. 

[A-Za-z0-9][A-Za-z0-9.-][A-Za-z0-9]

Для SSW работающего в кластере указываем только одну запись в блок ecss_nodes на кластер, индивидуально для каждого хоста указывать нельзя. Иначе будут генерироваться два запроса с одинаковым ECSS_ID что недопустимо.

Пример: файла config.yaml

elm_addresses:
 - "elm-1.eltex.loc:8099"
 - "192.168.111.22:8099"
 - "elm-3.eltex.loc:8099"
licenses:
 - id: 0
   kind: SSW
   type: elm
   license_key: "ssw1test"
   product_id: "ECSS1000001"
 - id: 1
   kind: ssw
   type: ecss_license
   license: "af615ebb92d381125ff"
ecss_nodes:
 - id: abf.test
   kind: ssw
   license_id: 0
CODE

Выполнить перезагрузку сервиса ecss-license-master.service для обновления конфигурации из файла /etc/ecss/ecss-license-master/config.yaml следующей командой:

если кластер, то на обоих хостах

sudo systemctl restart ecss-license-master.service
CODE

В случае если LM уже установлен и используется в локальной сети требуется добавить параметры нового SSW в конфигурационный файл /etc/ecss/ecss-license-master/config.yaml в блоках licenses и ecss_nodes.

Выполнить команду:

если кластер, то на обоих хостах

sudo nano /etc/ecss/ecss-license-master/config.yaml
CODE


для примера:

Было:

elm_addresses:
 - "elm-1.eltex.loc:8099"
 - "192.168.111.22:8099"
 - "elm-3.eltex.loc:8099"
licenses:
 - id: 0
   kind: SSW
   type: elm
   license_key: "ssw1test"
   product_id: "ECSS1000001"
 - id: 1
   kind: ssw
   type: ecss_license
   license: "af615ebb92d381125ff"
 - id: 2
   kind: SSW
   type: elm
   license_key: "ssw2test"
   product_id: "ECSS1000002"
ecss_nodes:
 - id: 1.test
   kind: ssw
   license_id: 0
 - id: 2.test
   kind: ssw
   license_id: 1
 - id: 3.test
   kind: ssw
   license_id: 2
CODE

Стало:

elm_addresses:
 - "elm-1.eltex.loc:8099"
 - "192.168.111.22:8099"
 - "elm-3.eltex.loc:8099"
licenses:
 - id: 0
   kind: SSW
   type: elm
   license_key: "ssw1test"
   product_id: "ECSS1000001"
 - id: 1
   kind: ssw
   type: ecss_license
   license: "af615ebb92d381125ff"
 - id: 2
   kind: SSW
   type: elm
   license_key: "ssw2test"
   product_id: "ECSS1000002"
 - id: 3
   kind: SSW
   type: elm
   license_key: "ssw3test"
   product_id: "ECSS1000003"
ecss_nodes:
 - id: 1.test
   kind: ssw
   license_id: 0
 - id: 2.test
   kind: ssw
   license_id: 1
 - id: 3.test
   kind: ssw
   license_id: 2
 - id: abf.test
   kind: ssw
   license_id: 3
CODE

 Выполнить перезагрузку сервиса ecss-license-master.service для обновления конфигурации из файла /etc/ecss/ecss-license-master/config.yaml следующей командой:

если кластер, то на обоих хостах

sudo systemctl restart ecss-license-master.service
CODE


Подключение SSW к Менеджера Лицензий

Выполнить конфигурацию подключения SSW к LM следующей командой в CoCon, (в примере LM установлен в кластере, IPadd хостов 10.0.10.51 и 10.0.10.52. значение порта из файла /etc/ecss/ecss-license-master/config.env по умолчанию 4321):

выполняется в CoCon

/system/licence/manager/set --hosts [https://10.0.10.51:4321, https://10.0.10.52:4321]
CODE

В случае установки LM на хостах SSW указывать IP адреса OAM

После выполнения проверить статус подключения командой:

выполняется в CoCon

/system/licence/manager/show-status           
┌───────────────────────┬───────┬─────┐
│         Host          │Current│Alive│
├───────────────────────┼───────┼─────┤
│https://10.0.10.51:4321│*      │true │
│https://10.0.10.52:4321│       │true │
└───────────────────────┴───────┴─────┘
CODE

Все хосты должны иметь статус alive=true. Один должен быть "current". 

  • Current - отображает к какому хосту подключён SSW. Если есть подключение, указывается *, если нет - ничего не указано.
  • Alive - отображает статус доступности хоста (healthcheck).

Подключение к License Manager

Отсутствие подключения к License Manager \ ELM будет равноценно отсутствию доступа к токену, что приведёт к критическим авариям, переходу в аварийный режим по истечению которого, если связь не будет восстановлена, система перейдёт на дефолтную лицензию. 
данное поведение применимо только при работе в elm режиме

Если статус к одному из хостов LM показан current, можно посылать запрос на загрузку лицензии на SSW командой:

выполняется в CoCon

/cluster/storage/ds1/licence/request
CODE

type=elm

/cluster/storage/ds1/licence/request      
Licence received      
[*******                                                               ] 6s 2ms   
Success: Licence parameters applied
CODE

В режиме "type=ecss_license" команда /cluster/storage/ds1/licence/request выполнится только в случае если был предварительно загружен паспорт.

type=ecss_license

/cluster/storage/ds1/licence/request      
Waiting for licence...
[*******                                                               ] 6s       
┌─┬─────────────────────────────────────────────────────┬─────────┬────────────────────────────────────────┐
│A│                     Description                     │Old Value│               New Value                │
├─┼─────────────────────────────────────────────────────┼─────────┼────────────────────────────────────────┤
│^│Support for reservation of call-processes            │false    │true                                    │
│^│Maximum call duration (in seconds)                   │60       │2678400                                 │
│^│Maximum number of simultaneous calls                 │5        │10000                                   │
│^│Elph                                                 │         │                                        │
│^│ total count of members of the one Elph group        │10       │100                                     │
│^│Subscribers limit                                    │10       │500000                                  │
│^│Virtual subscribers limit                            │infinity │1000                                    │
│^│Add-on conferences                                   │         │                                        │
│^│ total count                                         │30       │1000                                    │
│^│Add-on conferences                                   │         │                                        │
│^│ members of the one add-on conference                │16       │300                                     │
│^│Chat rooms                                           │         │                                        │
│^│ total count                                         │30       │100                                     │
│^│Chat rooms                                           │         │                                        │
│^│ members of the one chatroom                         │16       │300                                     │
│^│Meet Me                                              │         │                                        │
│^│ total count                                         │0        │100                                     │
│^│Meet Me                                              │         │                                        │
│^│ members of the one Meet Me conference               │0        │300                                     │
│^│SORM                                                 │         │                                        │
│^│ enabled                                             │false    │true                                    │
│+│ channels on SORM mediator                           │         │64                                      │
│^│Sorm extractor                                       │none     │mfi                                     │
│^│Support antifraud system                             │none     │custom                                  │
│+│Call center                                          │         │                                        │
│+│ operator's capability for look at calls in queue    │         │true                                    │
│+│ operator's capability for use Intervension SS       │         │true                                    │
│^│Call center                                          │         │                                        │
│^│ active agents                                       │0        │1000                                    │
│^│Call center                                          │         │                                        │
│^│ active supervisors                                  │0        │100                                     │
│^│Teleconference                                       │         │                                        │
│^│ channels                                            │3        │2000                                    │
│^│Teleconference                                       │         │                                        │
│^│ max members of one teleconference                   │0        │200                                     │
│^│Teleconference                                       │         │                                        │
│^│ active count                                        │0        │32                                      │
│^│TSMN system                                          │         │                                        │
│^│ concurrent calls (active)                           │0        │50                                      │
│^│TSMN system                                          │         │                                        │
│^│ concurrent calls (backup)                           │0        │50                                      │
│^│TSMN system                                          │         │                                        │
│^│ backup mode                                         │none     │"backup"                                │
│^│Total count of simultaneous records voice calls      │0        │200                                     │
│+│IVR                                                  │         │                                        │
│+│ customization enabled                               │         │true                                    │
│+│ Automatic Speech Recognition (ASR) subsystem enabled│         │true                                    │
│^│Channels on dialer outgoing calls                    │2        │5                                       │
│+│Supplementary Services licence package(s)            │         │                                        │
│+│ name                                                │         │'ECSS-ADV'                              │
│+│ limit                                               │         │10000                                   │
│+│ description                                         │         │"Additional services of 4 and 5 levels" │
│+│ SS list                                             │         │[1,2,3,4,5]                             │
│+│ name                                                │         │'ECSS-BAS'                              │
│+│ limit                                               │         │10000                                   │
│+│ description                                         │         │"Basic services of 1 and 2 levels"      │
│+│ SS list                                             │         │[1,2]                                   │
│+│ name                                                │         │'ECSS-BAS+'                             │
│+│ limit                                               │         │10000                                   │
│+│ description                                         │         │"Expansion of basic services of 3 level"│
│+│ SS list                                             │         │[1,2,3]                                 │
│^│GEO backup                                           │         │                                        │
│^│ enabled                                             │false    │true                                    │
│^│SIGTRAN                                              │         │                                        │
│^│ SEP                                                 │false    │true                                    │
│^│ STP                                                 │false    │true                                    │
└─┴─────────────────────────────────────────────────────┴─────────┴────────────────────────────────────────┘
Legend:
    '^' - Changed;
    '-' - Deleted;
    '+' - New.


[request] You are trying to add a license that is different from the current one by the pa
          rameters in the table (other values will remain unchanged).
Licence received      o ?> yes
[*******                                                               ] 1m 15s   
Success: Licence parameters applied
CODE


В зависимости от выбранного типа лицензии для SSW : "type=elm" или "type=ecss_license" на команду просмотра лицензий получим разный вывод:

type=ecss_license
/cluster/storage/ds1/licence/list-licence 
┌──┬───────────────────┬────────────┬──────┬────────────────┬────────────────────┬────────────────────┬─────────┐
│Id│Creation date(UTC) │   SSW ID   │Active│  Description   │Comm. Exp. Date(UTC)│Expiration date(UTC)│Time left│
├──┼───────────────────┼────────────┼──────┼────────────────┼────────────────────┼────────────────────┼─────────┤
│1 │12.03.2026 18:40:00│ECSS 010070 │*     │ECSS TPM License│13.03.2027 06:59:59 │14.03.2026 10:44:05 │1d 6h 59m│
│0 │01.01.1990 00:00:00│ECSS DEFAULT│      │Default licence │                    │                    │         │
└──┴───────────────────┴────────────┴──────┴────────────────┴────────────────────┴────────────────────┴─────────┘

TPM - является полным аналогом лицензирования которое использовалось раньше, с токеном и паспортом, без подключения к LM.

или

type=elm
/cluster/storage/ds1/licence/list-licence 
┌──┬───────────────────┬────────────┬──────┬────────────────┬────────────────────┬────────────────────┬─────────┐
│Id│Creation date(UTC) │   SSW ID   │Active│  Description   │Comm. Exp. Date(UTC)│Expiration date(UTC)│Time left│
├──┼───────────────────┼────────────┼──────┼────────────────┼────────────────────┼────────────────────┼─────────┤
│1 │03.02.2026 16:26:34│ECSS2000009 │*     │ECSS ELM License│03.02.2027 16:26:34 │14.03.2026 10:49:12 │1d 6h 59m│
│0 │01.01.1990 00:00:00│ECSS DEFAULT│      │Default licence │                    │                    │         │
└──┴───────────────────┴────────────┴──────┴────────────────┴────────────────────┴────────────────────┴─────────┘

Установка остальных пакетов ecss и их настройка

Выполнить конфигурацию для Sip адаптера , выполнив следующую команду:

на обоих хостах

sudo systemctl edit ecss-pa-sip.service
CODE

Добавить в конфигурационный файл следующие данные:

[Service]
LimitNOFILE=65536

Вставить эти две строчки необходимо в определенное место, (начиная с Ubuntu 22.04.2  есть несколько важных моментов. Файл, который открывается, полностью закомментирован, но первые несколько строк выглядят так (см рисунок ниже). Любые вносимые вами правки должны быть между этими двумя блоками комментариев.)

Перезагрузите конфигурацию

на обоих хостах

sudo systemctl daemon-reload
CODE

Актуализировать конфигурационный файл, выполнив перезагрузку сервера:

на обоих хостах

sudo systemctl restart ecss-mycelium ecss-ds ecss-core ecss-pa-sip ecss-mediator
CODE


Для корректной работы кластерной конфигурации необходимо настроить работу RestFS на базе GlusterFS-сервера.

Следует проверить в файле /etc/dnsmasq.d/ecss-broker, что адреса primary и secondary broker соответствуют указанным при инсталляции пакета ecss-node.

на обоих хостах

cat /etc/dnsmasq.d/ecss-broker
BASH

Пример содержания файла на ecss1 и ecss2 (содержимое файлов должно быть одинаковым на обоих серверах):

address=/primary.broker.ecss/10.0.10.51
address=/secondary.broker.ecss/10.0.10.52

glusterfs

Выполните настройку glusterfs для ecss-restfs на первом хосте (ecss1),
для этого установите пакеты glusterfs-server и attr на обоих хостах:

на обоих хостах

sudo apt install -y glusterfs-server attr
BASH

Запустите glasterd на обоих хостах кластера:

на обоих хостах

sudo systemctl start glusterd
BASH

После запуска выполните создание связи с удаленным виртуальным хостом, выполните команду на ecss1:

на ecss1

sudo gluster peer probe 10.0.10.52
BASH

Проверьте наличие созданной связи, выполните команду на ecss2:

на ecss2

sudo gluster peer status
BASH

Должна появиться информация о первом хосте — ecss1:

Number of Peers: 1

Hostname: ecss1
Uuid: d7319720-ea3a-43a4-a7d5-e97bf9d205b9
State: Peer in Cluster (Connected)

Выполните аналогичную проверку на другом хосте — ecss1. Вы также должны увидеть информацию о партнере ecss2 (или его IP-адрес).

Создайте кластер для репликации, запустите репликацию и посмотрите ее статус, выполните следующие команды на ecss1:

на ecss1

sudo gluster volume create ecss_volume replica 2 transport tcp 10.0.10.51:/var/lib/ecss/glusterfs 10.0.10.52:/var/lib/ecss/glusterfs force 
BASH

На ecss1:

на ecss1

sudo gluster volume start ecss_volume
BASH

На обоих хостах ecss1 и ecss2:

на обоих хостах

sudo gluster volume info
BASH

Таким образом, статус репликации будет выглядеть следующим образом, необходимо обратить внимание на поля "Status" и "Bricks" — они должны иметь следующий вид:

Volume Name: ecss_volume
Type: Replicate
Volume ID: 3bfc7587-0f85-48ed-9612-21f0d79c6e52
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 10.0.10.51:/var/lib/ecss/glusterfs
Brick2: 10.0.10.52:/var/lib/ecss/glusterfs
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

Чтобы смонтировать glusterfs раздел, выполните на обоих хостах ecss1 и ecss2 следующие действия:

  • Создайте новый systemd unit

на обоих хостах

sudo nano /etc/systemd/system/ecss-glusterfs-mount.service
BASH
  • Добавьте в него следующую конфигурацию:
[Unit]
Description=mount glusterfs
After=network.target
Requires=network.target

[Service]
RemainAfterExit=no
Type=forking
RestartSec=10s
Restart=always
ExecStart=/sbin/mount.glusterfs localhost:/ecss_volume /var/lib/ecss/restfs -o fetch-attempts=10
ExecStop=/bin/umount /var/lib/ecss/restfs

[Install]
WantedBy=multi-user.target
BASH
  • Добавить unit в автозагрузку на обоих хостах.

на обоих хостах

sudo systemctl enable glusterd.service
BASH

на обоих хостах

sudo systemctl enable ecss-glusterfs-mount.service
BASH
  • Создайте директорию для корректной установки  RestFS на обоих хостах:

на обоих хостах

sudo mkdir /var/lib/ecss/restfs
BASH

Выполнить следующие команды на обоих хостах:

на обоих хостах

sudo systemctl daemon-reload
BASH

на обоих хостах

sudo systemctl restart ecss-glusterfs-mount.service
BASH

Проверьте, что раздел подмонтировался, для этого на обоих хостах выполните команду - df -h

на обоих хостах

df -h

/dev/sda8                     4,5G  213M  4,1G   5% /var/log
/dev/sda5                      37G   48M   35G   1% /var/lib/ecss/ecss-media-server/records
/dev/sda6                      19G   44M   18G   1% /var/lib/ecss/cdr
/dev/sda7                      19G   44M   18G   1% /var/lib/ecss/statistics
/dev/sda9                      19G  7,6G  9,7G  44% /var/log/ecss
localhost:/ecss_volume          46G   59M   44G   1% /var/lib/ecss/restfs

При просмотре информации должен появиться подмонтированный раздел — 
localhost:/ecss_volume     46G  59M   44G   1%     /var/lib/ecss/restfs

Установка пакета ecss-restfs и его настройка

на обоих хостах

sudo apt install -y ecss-restfs
BASH

Установка ecss-restfs. В ходе установки нужно будет ответить на ряд вопросов для создания необходимых конфигурационных файлов. Также инсталлятор предложит установить и настроить пакет Text2speech от Yandex.

Вопросы ecss-restfsОтветыПример
Хотите ли вы использование функции Text To Speeh (Use TTS service)No (значение по умолчанию)

Хотите настроить сервис телефонной книги (Configure phone book)Yes (нужно указать)

Хотите настроить сервер carddav?No (значение по умолчанию)

Хотите настроить сервис телефонной книги (LDAP)?No (значение по умолчанию)

Хотите настроить сервис телефонной книги (SSW)?No (значение по умолчанию)

Хотите настроить  сервис распознавания речи (Configure speech recognition service)No (значение по умолчанию)

Хотите настроить сервис телефонной книги (POSTGRES)?Yes (значение по умолчанию)

POSTGRES: Сервер postgres:localhost (значение по умолчанию)

POSTGRES: Порт подключения:5439 (значение по умолчанию)

POSTGRES: Логин:postgres (значение по умолчанию)

POSTGRES: Пароль:postgres1 (значение по умолчанию)

POSTGRES: База данных:ecss_storekeeper_db (значение по умолчанию)

Введите домен для поиска:test.domain (значение по умолчанию)

POSTGRES: Количество запрашиваемых контактов:10000 (значение по умолчанию)

Хотите включить транслит для телефонной книги (LDAP)?No (значение по умолчанию)

Выберите пункты, которые хотите настроить:proxy-filter (необходимо выбрать)

Включить белый список для api/proxy? 

белый список адресов прописать в файл /etc/ecss/ecss-restfs/api-proxy.conf

# -------------------------------------------------------------------
# Формат файла фильтра API (api/proxy):
#   - IP: 192.168.0.1
#   - Домен: example.com
#   - Wildcard: *.wildcard.com
#   - Комментарии: строки, начинающиеся с #
# Пример:
#   192.168.0.1
#   example.com
#   # комментарий
#   *.wildcard.com
# -------------------------------------------------------------------


ВАЖНО!

В случае успешного проксирование (200) кеш хранится 28 дней, поэтому для применения конфигурации фильтра, в случае изменения, - кеш (/var/cache/ecss/restfs-api) стоит удалить и перезапустить сервис ecss-restfs.

после установки пакета ecss-restfs проверьте наличие wav файлов авто-информатора в директории /var/lib/ecss/restfs/system/sounds/ командой:

на обоих хостах

ll /var/lib/ecss/restfs/system/sounds/
BASH

наличие  wav файлов в указной выше директории говорит о корректности установки пакета ecss-restfs.

Отсутствия wav файлов в указной выше директории, говорит о проблеме при установки пакета ecss-restfs. Для ее решения выполните команду:

sudo apt --fix-broken install 
CODE

и повторите команду проверки:

ll /var/lib/ecss/restfs/system/sounds/
CODE

Осталось проверить доступность этих файлов извне, для этой проверки выполним поочередно команду на хосте  ecss1 и ecss2:

wget http://ecss1:9990/system/sounds/ai_you.wav
CODE
wget http://ecss2:9990/system/sounds/ai_you.wav
CODE

 

wget http://ecss1:9990/system/sounds/ai_you.wav
--2023-12-18 17:43:29--  http://ecss1:9990/system/sounds/ai_you.wav
Resolving ecss1 (ecss1)... 127.0.1.1, 10.0.10.51
Connecting to ecss1 (ecss1)|127.0.1.1|:9990... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11670 (11K) [audio/x-wav]
Saving to: ‘ai_you.wav’

ai_you.wav                                  100%[========================================================================================>]  11,40K  --.-KB/s    in 0s      

2023-12-18 17:43:29 (301 MB/s) - ‘ai_you.wav’ saved [11670/11670]

проверочные файлы можно удалить

rm ai_you.wav
rm ai_you.wav.1

если SSW работает в кластере

В случае кластерной конфигурации, для предотвращения одновременной обработки/конвертации/удаления одного файла (.pcm/.wav/.mp3) на разных серверах ecss1/ecss2 → сервис ecss-restfs-crawler должен быть запущен только на одном из серверов кластера. Для этого на сервере ecss2 выполнить следующие команды:

на ecss2

sudo systemctl disable ecss-restfs-crawler.timer
CODE

на ecss2

sudo systemctl stop ecss-restfs-crawler.timer
CODE

ecss-media-server

на обоих хостах

sudo apt install -y ecss-media-server
BASH

Для медиасервера (ecss-media-server/MSR) возможно начальное конфигурирование с записью параметров в файл конфигурации,
для этого нужно провести конфигурацию  transport bind-addr,mcc bind-addres:

Вопросы ecss-media-serverОтветы для ecss1Ответы для ecss2
[ MSR SIP ] Введите bind-ip адрес (Enter)10.0.20.51 (необходимо ввести)10.0.20.52 (необходимо ввести)
[MSR Control-Channel] Введите bind-ip-адрес10.0.20.51 (необходимо ввести)10.0.20.52 (необходимо ввести)

После формирования конфигураций по умолчанию  производим проверку:

cat /etc/ecss/ecss-media-server/config.xml
BASH

Внутри лежит конфигурация для msr: config.xml, в директории conf.d лежит конфигурация default.xml.
По своей сути default.xml — это дополнение config.xml, которое определяет секцию аккаунтов. Это сделано для того, чтобы после обновлений пакета данная конфигурация оставалась неизменной. Вид config.xml представлен здесь: файл конфигурации.

<?xml version="1.0" encoding="utf-8"?>
<config date="02:30:33 07.12.2023">
  <general log-level="3" log-rotate="yes" max-calls="8192" max-in-group="512" load-sensor="media" load-delta="10" calls-delta="100" spool-dir-size="100M" log-name="msr.log" log-path="/var/log/ecss/media-server" use-srtp="disabled" enable-ice-transport="no" ice-update="no" aggressive-ice="yes" stun-server="" suspicious-mode="no"/>
  <transport bind-addr="10.0.20.51" port="5040" transport="udp+tcp"/>
  <!-- By default configured public TURN-server -->
  <turn-server use-turn="no" host="numb.viagenie.ca" user="webrtc@live.com" password="muazkh"/>
  <media mixer-clock-rate="8000" use-vad="no" cng-level="0" jb-size="60" rtcp-timeout="0" rtp-timeout="350" udp-src-check="no" cn-multiplier="3" port-start="12000" port-range="2048" tias-in-sdp="no" thread-cnt="2" vid-enc-threads="2" vid-dec-threads="2" video-conf-layout="evenly" keyframe-interval="1000" vid-decode-delay="100" silence-threshold="-30" dtmf-flash-disable="no" video-dscp="0" other-dscp="0" dummy-video-src="/usr/share/ecss-media-server/video/dummy_video.yuv" video-enc-width="640" video-enc-height="360" finalsilence="1000" rtcp-stat-dump="yes" silent-codec-switch="yes"/>
  <codec pcma="1" pcmu="2" ilbc="0" gsm="0" g722="3" g726="0" g729="0" speex="0" l16="0" g7221="0" opus="0" h264="1" h263-1998="2" t38="1" tel-event-pt="0"/>
  <accounts>
    <!-- <dynamic msr_name="msr.name"
            realm="sip:127.0.0.1:5000"
            dtmf_mode="rfc+inband+info"
            auth_name="user"
            auth_password="password" /> -->
  </accounts>
  <pbyte>
    <mcc bind-addr="10.0.20.51" port="5700"/>
  </pbyte>
  <conf_dir path="/etc/ecss/ecss-media-server/conf.d"/>
  <rtp>
    <auto addr-v4=""/>
  </rtp>
</config>
CODE

По умолчанию после инсталляции ECSS-10 активизирует только кодеки — pcma, pcmu, g722, h264, h263-1998, t38. Остальные имеют статус =0 = выкл. Если хотите активизировать остальные кодеки, в редакторе nano измените приоритет с 0 на цифру приоритета (уровень приоритета не должен повторятся для сервиса audio/video/fax)
sudo nano /etc/ecss/ecss-media-server/config.xml

чтобы активизировать все кодеки 
строчку  - 
<codec pcma="1" pcmu="2" ilbc="0" gsm="0" g722="3" g726="0" g729="0" speex="0" l16="0" g7221="0" opus="0" h264="1" h263-1998="2" t38="1" tel-event-pt="0"/>
привести к виду - 
<codec pcma="1" pcmu="2" ilbc="6" gsm="4" g722="3" g726="11" g729="5" speex="7" l16="8" g7221="9" opus="10" h264="1" h263-1998="2" t38="1" tel-event-pt="0"/>

Недопустимо указывать у разных кодеков одинаковый приоритет, для примера g726="5" g729="5". В этом случае они будут работать не корректно/игнорироваться.
За исключением "0" - выключено.

Рассмотрим секцию аккаунтов (файл default.xml):

cat /etc/ecss/ecss-media-server/conf.d/default.xml
BASH

После инсталляции пакетов в фале будет указан  ip-add 127.0.0.1 , и только для одного хоста.

<?xml version="1.0"?>
<config>
      <accounts>
            <dynamic msr_name="msr.ecss1" realm="sip:127.0.0.1:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>
      </accounts>
</config>

Требуется указать в конфигурации для обоих хостов, реальные IP-add.


после инсталляции пакетов в фале будет указан только свой локальный ip-add , необходимо добавить строчку с ip-add партнера и привести содержимое файла к виду указанному снизу:

Необходимо привести содержимое файла к виду указанному снизу (в примере ecss1 имеет IP-add 10.0.20.51/ ecss2 - 10.0.20.52):

на обоих хостах

sudo nano /etc/ecss/ecss-media-server/conf.d/default.xml
BASH
Настройка msr для ecss1 (/etc/ecss/ecss-media-server/conf.d/default.xml)Настройка msr для ecss2 (/etc/ecss/ecss-media-server/conf.d/default.xml)
<?xml version="1.0"?>
<config>
    <accounts>
        <dynamic msr_name="msr.ecss1" realm="sip:10.0.20.51:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
            <via dynamic-ifaces="no">
                <iface name="net.20" ip="10.0.20.51"/>
            </via>
        </dynamic>
        <dynamic msr_name="msr.ecss1" realm="sip:10.0.20.52:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
            <via dynamic-ifaces="no">
                <iface name="net.20" ip="10.0.20.52"/>
            </via>
        </dynamic>
    </accounts>
</config>
BASH
<?xml version="1.0"?>
<config>
    <accounts>
        <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.52:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
            <via dynamic-ifaces="no">
                <iface name="net.20" ip="10.0.20.52"/>
            </via>
        </dynamic>
        <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.51:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
            <via dynamic-ifaces="no">
                <iface name="net.20" ip="10.0.20.51"/>
            </via>
        </dynamic>
    </accounts>
</config>
BASH


В ней указаны текущие настройки, согласно которым происходит регистрация msr на core.

Основными параметрами здесь являются: msr_name и realm:

  • msr_name — параметр, определяющий название msr. (рекомендуется задавать msr. и к какому хосту он принадлежит, например msr.ecss1);
  • realm — определяет адрес для регистрации на ядре. Точка входа по умолчанию — порт 5000.

После изменения конфигурации файлов /etc/ecss/ecss-media-server/config.xml и /etc/ecss/ecss-media-server/conf.d/default.xml необходимо выполнить перезапуск сервиса ecss-media-server, чтобы изменения вступили в силу, следующей командой:

на обоих хостах

sudo systemctl restart ecss-media-server
CODE


ecss-web-conf

на обоих хостах

sudo apt install -y ecss-web-conf
BASH

Web-конфигуратор позволяет сделать управление системой более наглядным и комфортным. Установка web-конфигуратора не является обязательной, но рекомендуется.
Также при установке пакета ecss-web-conf автоматически устанавливается пакет ecss-subsriber-portal-ui. Приложение "Портал абонента" системы ECSS-10 позволяет абонентам системы самостоятельно управлять услугами, просматривать информацию по совершенным вызовам, активным конференциям, а также настраивать собственные IVR-скрипты для входящих вызовов. Описание работы веб-конфигуратора приведено в разделе "Портал абонента".

Вопросы ecss-web-confОтветы для обоих хостовПример
 Хотите ли вы использовать стандартные настройки?Yes (значение по умолчанию)

Проверьте возможность подключение к web интерфейсу http://10.0.20.51,  пользователь/пароль - admin/password, в настоящий момент не все функции будут доступны, но web интерфейс должен быть рабочий и логин успешный.

Настройка VRRP для SIP-адаптера

Выполните настройку VRRP для SIP-адаптера, для этого на обоих хостах создайте файлы следующего содержания:

Глобального конфигурационного файла keepalived.conf. На обоих хостах содержимое файла одинаковое:

на обоих хостах

sudo nano /etc/keepalived/keepalived.conf 
BASH

скопируйте и вставьте следующий текст в файл /etc/keepalived/keepalived.conf 

на обоих хостах

global_defs {
    vrrp_version 3          # версия протокола VRRP (2 или 3)
    script_user nobody      # ограниченный в правах системный пользователь, от которого будут запускаться скрипты проверки доступности
    enable_script_security  # не запускать скрипты от root, если часть пути к ним доступна на запись для обычных пользователей
}

include /etc/keepalived/sip.conf
YML

 Конфигурационного файла sip.conf:

на обоих хостах

sudo nano /etc/keepalived/sip.conf 
BASH
etc/keepalived/sip.conf для ecss1 etc/keepalived/sip.conf для ecss2
vrrp_script check_sip {
    script "/usr/bin/ecss_pa_sip_port 65535"
    interval 2
    timeout 2
}

# Конфигурация адреса для первого виртуального адреса SIP-адаптера
vrrp_instance SIP1 {
    state MASTER                  # Исходное состояние при старте
    interface net.20              # Имя сетевого интерфейса, на котором будет работать протокол VRRP
    virtual_router_id 31          # Уникальный идентификатор роутера (0..255)
    priority 100                  # Приоритет (0..255) чем выше - тем больше
    advert_int 1                  # Интервал рассылки уведомлений (с)
    preempt_delay 60              # Интервал ожидания мастера при старте демона (с) при исходном состоянии BACKUP

    unicast_src_ip 10.0.20.51     # Собственный реальный IP-адрес
    unicast_peer {
        10.0.20.52                # Реальный IP-адрес соседа
    }

    virtual_ipaddress {
        # Виртуальный IP-адрес и маска
        # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес
        # label - метка виртуального интерфейса (для удобства идентификации)
        10.0.20.31/24 dev net.20 label net.20:SIP1
    }

    track_script { 
        check_sip
    }
}

# Конфигурация адреса для второго виртуального адреса SIP-адаптера

vrrp_instance SIP2 {
    state BACKUP                      # Исходное состояние при старте
    interface net.20                  # Имя сетевого интерфейса, на котором будет работать протокол VRRP
    virtual_router_id 32              # Уникальный идентификатор роутера (0..255)
    priority 50                       # Приоритет (0..255) чем выше - тем больше
    advert_int 1                      # Интервал рассылки уведомлений (с)
    preempt_delay 60                  # Интервал ожидания мастера при старте демона (с) при исходном состоянии BACKUP

    unicast_src_ip  10.0.20.51        # Собственный реальный IP-адрес
    unicast_peer {
         10.0.20.52                   # Реальный IP-адрес соседа
    }

    virtual_ipaddress {
        # Виртуальный IP-адрес и маска
        # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес
        # label - метка виртуального интерфейса (для удобства идентификации)
        10.0.20.32/24 dev net.20 label net.20:SIP2
    }

}
vrrp_script check_sip {
    script "/usr/bin/ecss_pa_sip_port 65535"
    interval 2
    timeout 2
}

# Конфигурация адреса для первого виртуального адреса SIP-адаптера
vrrp_instance SIP1 {
    state BACKUP                  # Исходное состояние при старте
    interface net.20              # Имя сетевого интерфейса, на котором будет работать протокол VRRP
    virtual_router_id 31          # Уникальный идентификатор роутера (0..255)
    priority 50                   # Приоритет (0..255) чем выше - тем больше
    advert_int 1                  # Интервал рассылки уведомлений (с)
    preempt_delay 60              # Интервал ожидания мастера при старте демона (с) при исходном состоянии BACKUP

    unicast_src_ip 10.0.20.52     # Собственный реальный IP-адрес
    unicast_peer {
        10.0.20.51                # Реальный IP-адрес соседа
    }

    virtual_ipaddress {
        # Виртуальный IP-адрес и маска
        # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес
        # label - метка виртуального интерфейса (для удобства идентификации)
        10.0.20.31/24 dev net.20 label net.20:SIP1
    }

}

# Конфигурация адреса для второго виртуального адреса SIP-адаптера

vrrp_instance SIP2 {
    state MASTER                      # Исходное состояние при старте
    interface net.20                  # Имя сетевого интерфейса, на котором будет работать протокол VRRP
    virtual_router_id 32              # Уникальный идентификатор роутера (0..255)
    priority 100                      # Приоритет (0..255) чем выше - тем больше
    advert_int 1                      # Интервал рассылки уведомлений (с)
    preempt_delay 60                  # Интервал ожидания мастера при старте демона (с) при исходном состоянии BACKUP

    unicast_src_ip  10.0.20.52       # Собственный реальный IP-адрес
    unicast_peer {
         10.0.20.51                  # Реальный IP-адрес соседа
    }

    virtual_ipaddress {
        # Виртуальный IP-адрес и маска
        # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес
        # label - метка виртуального интерфейса (для удобства идентификации)
        10.0.20.32/24 dev net.20 label net.20:SIP2
    }

    track_script {
        check_sip
    }
}

В данном случае была добавлена поддержка виртуальных интерфейсов со связью Master - Backup. Для ecss1 основным будет являться net.20:SIP1, а запасным — net.20:SIP2 соответственно. Важно учесть, что в конфигурации учтено использование адресных переменных. В секции interface требуется указать, на каком интерфейсе будут слушаться VRRP-сообщения, а в секции virtual_ipaddress требуется указать интерфейс, на котором будет восстановлен виртуальный адрес.

Выполните перезапуск keepalived:

на обоих хостах

sudo systemctl restart keepalived.service
BASH

для проверки правильности установки выполните команду ifconfig, в конце выходного сообщения вы должны видеть новый интерфейс - net.20:SIP1 с выбранным IP-адресом

ifconfig 

. . .
net.20:SIP1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.20.31 netmask 255.255.255.0 broadcast 0.0.0.0
ether 08:00:27:6d:4f:02 txqueuelen 1000 (Ethernet)

ifconfig

. . .
net.20:SIP2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.20.32  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 08:00:27:05:03:39  txqueuelen 1000  (Ethernet)


Дальнейшая настройка

snpmd

Настройка SNMP описана в разделе "Управление и мониторинг по протоколу SNMP".

Настройка безопасности. SSH

Выполните настройку сервера SSH:

на обоих хостах

sudo nano /etc/ssh/sshd_config
BASH

Укажите в конфигурационном файле порт и адрес, по которому можно обратиться к серверу:

Настройка ssh для ecss1 (/etc/ssh/sshd_config)Настройка ssh для ecss2 (/etc/ssh/sshd_config)

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.

Port 2000
#AddressFamily any
ListenAddress 10.0.10.51
#ListenAddress ::

<...>

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.

Port 2000
#AddressFamily any
ListenAddress 10.0.10.52
#ListenAddress ::

<...>

Перезапустите ssh:

на обоих хостах

sudo systemctl restart ssh.service
BASH

Зайдите в CLI -  CoCon:

на ecss1 пароль - password

ssh admin@localhost -p 8023
BASH

Добавление услуг

Установка всех услуг указных в лицензии:

выполняется в CoCon

/cluster/storage/ds1/ss/install ds1@ecss1 ss_*
CODE


/cluster/storage/ds1/ss/install ds1@ecss1 ss_*
Successfully installed: /var/lib/ecss/ss/ss_dnd.xml
Successfully installed: /var/lib/ecss/ss/ss_clir.xml
. . .
Successfully installed: /var/lib/ecss/ss/ss_chunt.xml
BASH

Первоначальная конфигурация системы с помощью web-конфигуратора

Исходные данные

  • Установка системы завершена;
  • Система готова к дальнейшей настройке;
  • Интерфейсы запущены.

Рекомендуется использовать последние доступные версии браузеров. Рекомендуемые к использованию браузеры: Яндекс, Chrome.

Для начала конфигурации системы необходимо зайти в web-конфигуратор по адресу http://<Ipadd SSW>.

Для определения и регистрации в системе планируются:

  • Абоненты с номерами 42001, 42002 , 42003, 42004 ,42005, 42006, 42007, 42008, 42009, 42010;
  • Транк в сторону шлюза.

Подготовка к работе


Рисунок 3 — Вход в web-конфигуратор (окно авторизации)

В окне авторизации необходимо ввести значения, определенные при установке web-конфигуратора.

Стандартные значения для авторизации:

Логин: admin

Пароль: password

После входа в систему будет видна основная рабочая область с иконками приложений, а также строка состояния с доступными опциями, в частности:

  • 1 — выход из системы;
  • 2 — выбор домена;
  • 3 — выбор языка.

Рисунок 4 — Вид рабочей области web-конфигуратора

Создание учетной записи оператора

После авторизации для повышения безопасности при эксплуатации программного коммутатора рекомендуется создание учетных записей для операторов, а также сменить пароль для пользователя admin.

Для создания новой учетной записи оператора используется приложение "Управление пользователями" ("User manager"):

Рисунок 5 — Вид приложения "Управление пользователями"

Нажмите кнопку "Добавить" . В открывшемся окне требуется определить новую учетную запись, для этого: 

  1. В поле "Имя" введите логин учетной записи, например "test";
  2. В поле "Пароль" и "Подтверждение" введите пароль для пользователя, например "testpassword";
  3. Определите уровень прав доступа для пользователя через выбор текущих разрешений или с помощью ролей, например ecss-user. Описание можно посмотреть в разделе "Управление пользователями".

Рисунок 6 — Диалоговое окно создания учетной записи оператора

Рисунок 7 — Вид приложения с созданной учетной записью оператора

Для смены пароля рядом с названием пользователя нажмите на кнопку редактировать. В появившемся диалоговом окне введите:

1. Старый пароль (для пользователя "admin" по умолчанию паролем является "password");

2. Новый пароль;

3. Подтвердите новый пароль.

Рисунок 8 — Диалоговое окно редактирования учетной записи

Добавление медиа-ресурсов.

Для того чтобы начать работу с медиа-сервером сразу после его регистрации, необходимо активировать  сетевые интерфейсы MSR. Приложение web-конфигуратора "Сетевые окончания MSR" ("MSR registrars") служит для настройки медиа-ресурсов.

Рисунок 9 — Сетевые окончания MSR

Установить ipадрес для приема соединений от медиасервера, изменив значение 0.0.0.0 на реальные адреса MSR:

Рисунок 10 — Установка IP-add регистратора MSR

Создание IP-set (sip-транспорта) и присвоение его к домену

IP-set — совокупность одного или нескольких IP-адресов из одной подсети и списка слушающих UDP/TCP-портов, которые будут открыты SIP-адаптером на данных адресах.

Для настройки интерфейса необходимо открыть приложение  "Кластеры ("Clusters").


Рисунок 11 — Вид приложения "Кластеры"

Для создания новой группы IP-адресов (IP-set) выделите кластер SIP-адаптера "sip1" и нажмите на кнопку "Свойства кластера" (или нажмите на иконку кластера двойным щелчком левой кнопки мыши).

В появившемся диалоговом окне перейдите на вкладку "Транспорт". Далее нажмите кнопку "Добавить". Появится новая группа, для редактирования полей двойным щелчком кнопки мыши нажмите на нужное:

1. Переименуйте группу адресов (IP-set), например "test_set";

2. Задайте порт, по которому будет происходить обращение к домену, например 5060;

3. Разверните вновь созданную группу нажатием на треугольник слева от названия группы;

4. Определите адрес для ноды SIP-адаптера, согласно примеру конфигурации. Для системы с резервированием укажите 10.0.20.31 и 10.0.20.32:


Рисунок 12 — Вид приложения "Кластеры/Транспорт" для кластера

Нажмите кнопку "Сохранить" для применения настроек.

Создание домена

Домен - Виртуальная PBX внутри нашего SSW. Таких виртуальных PBX может быть создано необходимое для проекта кол-во.

Для создания домена необходимо войти в приложение "Домены" ("Domain"). В открывшемся окне требуется создать домен, для этого:

1. Нажмите кнопку "Добавить домен":


Рисунок 13 — Добавление домена в систему

2. В появившемся диалоговом окне доступны следующие настройки:

  • Имя (Name) — индивидуальное имя виртуальной АТС;
  • Профиль услуг (SS profile) — системный профиль дополнительных услуг. Этот профиль будет скопирован с тем же именем во вновь создаваемый домен и для всех услуг из этого профиля будет автоматически разрешён доступ через access-list;
  • IVR профиль (IVR profile) — профиль IVR, заданный в приложении "Редактор IVR ограничений".

Введите название домена, например "test_domain";

3. Нажмите кнопку "Ок":

Рисунок 14 — Определение настроек нового домена

4. Нажмите кнопку "Обновить"   в приложении. 

Созданный домен будет отображаться в текущей конфигурации:

Рисунок 15 — Отображение созданного домена

Для редактирования текущего домена его необходимо выбрать в системе. Для перехода в домен воспользуйтесь опцией выбора домена (см. пункт 2 на рисунке "Вид рабочей области web-конфигуратора").

После выбора домена, согласно текущей конфигурации системы, станут доступны все приложения:


Рисунок 17 — Отображение приложений в текущей конфигурации системы


Для того чтобы привязать группу адресов к домену, необходимо вернуться в приложение "Домены" ("Domain"), выделить домен и перейти в настройки нажатием на кнопку "Свойства домена" или двойным нажатием левой кнопки мыши на домен.

В настройках списка откройте ветку "SIP", в ней "SIP транспорт", далее выберите в поле IP set созданную группу адресов. Нажмите кнопку "Сохранить" для применения настроек.


Рисунок 18 — Окно настройки для SIP транспорта

Выбрать требуемые услуги для созданного домена, которые будут использоваться (для примера для абонентского домена транковые услуги не востребованы , и наоборот для транзитного домена не нужно указывать услуги для абонента).

Рисунок 19 — После создания нового домена, услуги отсутствуют.

  1. Выбрать приложение "Управление услугами"
  2. Выбрать колонку "Установленные услуги" (услуги указанные в лицензии для SSW)
  3. Выбрать необходимые для указанного домена услуги
  4. Сохранить конфигурацию

Рисунок 20 — Выбор услуг для абонентов / транков нового домена.

Рисунок 21 — Список услуг теперь доступных для абонентов  нового домена.

Создание абонентов

Для создания и редактирования параметров абонентов в системе используется приложение "Карточка абонента" ("Subscriber card").

Рисунок 22 — Вид приложения "Карточка абонента"

В конфигурации возможно создание SIP-абонентов и виртуальных абонентов.

Для пользователей, имеющих физическое окончание, используется функционал SIP-абонента, в то время как  виртуальный абонент используется тогда, когда нужна функциональность без физических окончаний. Например, номер для обращения к ivr-скрипту.

Для создания новых абонентов нужно нажать на кнопку "Добавить".

В появившемся диалоговом окне укажите следующие параметры:

  • Имя интерфейса — номер или группа номеров, который присваивается абоненту, строка, например {42001-42010} или abcd;
  • Контекст — контекст маршрутизации, выбираем тот, который создали, например "test_name", или по умолчанию - "default_routing";
  • Группа интерфейсов — имя группы объединяющей нескольких абонентов, для примера "sip";
  • Алиас как пользователь — настройка, которая связывает номер сущности, алиас и пользователя одним и тем же названием, в примере настройка активирована;
  • Авторизация — порядок проверки подлинности прав пользователя на доступ к данным, в примере используется"register";
  • Логин — использую настройку номер как логин для простоты;
  • Пароль — можно задать или использовать сгенерированный системой.


Рисунок 23 — Пример создания 10 абонентов в домене "test_domain"


Рисунок 24 — Пример добавления услуг для абонента

Создание и применение контекстов маршрутизации для домена

Маршрутизация отвечает за поиск номера и последующую адресацию вызова. Для корректной работы системы должен быть настроен как минимум один контекст маршрутизации.

Настройка маршрутизации осуществляется в приложении "Менеджер маршрутизации" ("Routing manager") .


Рисунок 25 — Вид приложения "Менеджер маршрутизации"

В качестве примера создадим контекст, а затем несколько правил в нём, для этого:

1. В левой части окна в разделе "Контекст" нажмите на кнопку "Создать контекст"  ;

2. В открывшемся диалоговом окне обозначьте имя контекста:

Рисунок 26 — Вид приложения "Менеджер маршрутизации" добавление нового контекста маршрутизации

3. Нажмите "Сохранить контекст"  ;

Создадим 4 правила в данном контексте:

  • rule1 — правило для выхода на транк TAU-72;
  • rule2 — правило локальной маршрутизации для номеров 42001-42005;
  • rule3 — правило для выхода в ivr;
  • rule4 — правило-исключение.

Для создания нового правила нужно выделить созданный контекст и нажать кнопку "Создать правило". В появившемся окне нужно ввести название правила. Затем сохранить вновь созданные правила.


Рисунок 27 — Создание правила контекста маршрутизации


Рисунок 28 — Определение правил

На данный момент не определен транк, чтобы можно было сослаться на него в правиле, однако можно задать номера, по которым будет производится выборка.

Нажав на правило rule1, перейдем в нижнюю часть экрана, в которой располагаются области для редактирования контекста маршрутизации. Условно определим, что выборка для выхода на транк будет проводиться по признакам номера вызываемого абонента (CDPN), а номера в транке должны начинаться с цифры 4.

Функционально контекст маршрутизации делится на три части:

  • Условия ("Condition") — раздел, определяющий выражения для выборки по предложенным признакам;
  • Действия ("Action") — раздел, выполняющий преобразование признаков номеров к конкретному значению;
  • Результат ("Result") — раздел, завершающий маршрутизацию и определяющий её результат.

rule1: Для выхода на транк нужно правильно отредактировать каждую часть:

  • В разделе условий перейти на вкладку CDPN. Ввести номера телефонов, которые находятся за транком в поле "Номер". Например, чтобы определить номера с 42006 по 42007, нужно ввести условие: 420(6-7);
  • В разделе действий перейти на вкладку CDPN. Ввести маску для изменения номера в поле "Номер". Например, чтобы добавить число 4 перед номером, нужно заполнить поле следующим выражением: 4{1,2,3,4,5};
  • Нажать кнопки "Сохранить правило" и "Сохранить контекст" для применения изменений.

Чтобы настроить поле результата, нужно определить транк в системе, поэтому к настройке данного правила вернемся чуть позже.

Таким же образом нужно настроить оставшиеся правила.

Для rule2:

  • В разделе условий, во вкладке CDPN ввести номера телефонов, которые находятся за транком в поле "Номер". Например, чтобы определить номера со 42001 по 42005, ввести условие 420(1-5);
  • В разделе результата определить результат как локальный (т.е. локальная маршрутизация);
  • Нажать кнопки "Сохранить правило" и "Сохранить контекст" для применения изменений.

Для rule 3 допустим, что абоненты с номерами 108, 109 и 110 попадают в ivr-скрипт–информатор, прежде чем звонить далее.

  • В разделе условий, во вкладке CGPN ввести номера телефонов, по которым будет выборка в поле "Номер", например 420(10,08-09).
  • Нажать кнопки "Сохранить правило" и "Сохранить контекст" для применения изменений.

Чтобы настроить поле результата, нужно определить в системе ivr-скрипт, поэтому к настройке данного правила вернемся чуть позже.

Для rule 4 мы определяем правило-исключение — это правило, которое работает в случае, если любые другие правила не срабатывают.

  • По умолчанию данное правило создается в системе в контексте default_routing. В условиях на вызываемый номер прописывается символ %, а результатом является локальная маршрутизация, однако, если мы назначаем абоненту контекст, отличный от default_routing, в конце рекомендуется создавать это правило.


Рисунок 29 — Пример настроек контекста маршрутизации

Создание транка

Для создания и редактирования параметров транка в системе используется приложение "Менеджер транков" ("Trunk manager") .

Рисунок 30 — Вид приложения "Менеджер транков"

Для определения транка в системе нужно нажать на кнопку "Создать транк"  , в появившемся диалоговом окне определить параметры:

  • Имя — назначить название транка, по которому его можно идентифицировать в системе;
  • Контекст — применить ранее созданный контекст маршрутизации test_name;
  • Группа — выбрать группу интерфейсов, созданную при определении абонентов "test.group";
  • Группа IP-адресов (IP-set) — созданная на домене группа адресов "test_set";
  • Регистрация — если используется транковая, то нужно включить данный параметр, в примере она не используется;
  • Хост [:порт] — IP-адрес назначения транка — 10.0.3.100;
  • Порт для приёма — транспортный порт, на котором будет слушаться трафик с транка, соответствует порту, назначенному на группу IP-адресов.


Рисунок 31 — Создание транка

Создание IVR-скрипта

Для создания IVR используется приложение "IVR-редактор" ("IVR editor").


Рисунок 32 — Вид приложения "IVR-редактор"

Для создания скрипта нужно нажать на кнопку "Добавить" выбрать тип скрипта (в данном случае будет скрипт на входящие вызовы), в диалоговом окне указать название скрипта, например "test_ivr".

После создания скрипта в основном окне редактора появится блок-схема.

В качестве примера составим скрипт, который при срабатывании проигрывает вызывающему абоненту заранее записанную фразу, а затем продолжает вызов.

Пример скрипта приведен на рисунках ниже. Здесь используются блоки Info и Dial. 

  • Блок Info — блок, который проигрывает сообщения до момента ответа пользователя. В качестве записанной фразы используется генератор тонов:


Рисунок 33 — Вид рабочей области IVR с настройками блока "Info"

  • Блок dial — блок, который совершает вызов на заданный номер. Чтобы продолжить вызов, нужно применить предопределенную переменную CDPN:


Рисунок 34 — Вид рабочей области IVR

Завершение настройки маршрутизации

Для завершения настройки маршрутизации нужно войти в приложение "Менеджер маршрутизации" ("Routing manager") и в правилах rule1 и rule3 настроить соответствующие результаты маршрутизации, для этого:

  • rule1: в разделе "Результат" выберите подпункт "внешний". В таблице "Направления" в поле "Значение" добавьте созданный ранее транк, после чего сохраните правило .
  • rule3: В разделе "Результат" выберите подпункт "ivr" и в поле скрипт добавьте созданный ранее ivr-скрипт, после чего сохраните правило и контекст .


Рисунок 35 — Вид контекста маршрутизации 

Первоначальная конфигурация системы через интерфейс командной строки (CLI)


Добавление медиа-ресурсов в интерфейсе командной строки (CLI)

Медиаресурс — это описание параметров медиасервера, необходимых для работы с ним.

Для возможности использования медиаресурса и установления соединений , необходимо выполнить активизацию  в команде создания медиаресурса -  /system/media/resource/declare (параметр "is active"=true) или  /system/media/resource/set  (параметр "active"=true), если при создании активизация не была выполнена. Так же можно выполнить активизацию через веб интерфейс , приложение -  сетевые окончания MSR (MSR-registrars).

declare
Команда для объявления подключения медиасервера к ECSS-10.

Для работы в режиме предварительно настроенной системы можно заранее прописать медиаресурсы, информация о которых известна.

Для этого необходимо создать описание известных медиасерверов с указанием всех параметров, что позволить начать работу с медиасервером сразу после его регистрации.

Команда для создания конфигурации медиасервера:

Путь команды:

/system/media/resource/declare

Синтаксис:

declare <node> by_contact <contact> <zone> <site> <is active>

или

declare <node> by_iface <msr> <acc_id> <iface> <zone> <site> <is active>

Параметры:

<node> — имя ноды core;
<contact> — contact uri декларируемого медиаресурса;
<zone> — логическая зона обслуживания MSR;
<site> — идентификатор сети обслуживания MSR;
<is active> — состояние активности медиаресурса, значения true/false;
<msr> — имя MSR;
<acc_id> — номер идентификатор ресурса;
<iface> — название интерфейса.

set

Команда для изменения настроек медиаресурсов.

Путь команды:

/system/media/resource/set

Синтаксис:

set <node|*> <contact> <active|zone|site> <value>

Параметры:

<node|*> - имя ноды;
<contact> - contact uri декларируемого медиаресурса;
<active|zone|site> - активация | зона | сайт;
<value> - значение параметра.

Пример:

Активируем связь MSR- и Core-подсистем. Для этого пропишите команды:

выполняется в CoCon

/system/media/resource/set core1@ecss1 net.20@msr.ecss1 active true
CODE

выполняется в CoCon

/system/media/resource/set core1@ecss2 net.20@msr.ecss2  active true
CODE

выполняется в CoCon

/system/media/resource/set core1@ecss1 net.20@msr.ecss2  active true
CODE

выполняется в CoCon

/system/media/resource/set core1@ecss2 net.20@msr.ecss1  active true
CODE


/system/media/resource/set core1@ecss1 net.20@msr.ecss1 active true  
  Media resource:
┌─────────────┬──────────────────┬──────────┬───────┐
│    Node     │     Contact      │ Property │ Value │
├─────────────┼──────────────────┼──────────┼───────┤
│ core1@ecss1 │ net.20@msr.ecss1 │ active   │ true  │
└─────────────┴──────────────────┴──────────┴───────┘
/system/media/resource/set core1@ecss2 net.20@msr.ecss2 active true 
  Media resource:
┌─────────────┬──────────────────┬──────────┬───────┐
│    Node     │     Contact      │ Property │ Value │
├─────────────┼──────────────────┼──────────┼───────┤
│ core1@ecss2 │ net.20@msr.ecss2 │ active   │ true  │
└─────────────┴──────────────────┴──────────┴───────┘
/system/media/resource/set core1@ecss1 net.20@msr.ecss2 active true 
  Media resource:
┌─────────────┬──────────────────┬──────────┬───────┐
│    Node     │     Contact      │ Property │ Value │
├─────────────┼──────────────────┼──────────┼───────┤
│ core1@ecss1 │ net.20@msr.ecss2 │ active   │ true  │
└─────────────┴──────────────────┴──────────┴───────┘
/system/media/resource/set core1@ecss2 net.20@msr.ecss1 active true 
  Media resource:
┌─────────────┬──────────────────┬──────────┬───────┐
│    Node     │     Contact      │ Property │ Value │
├─────────────┼──────────────────┼──────────┼───────┤
│ core1@ecss2 │ net.20@msr.ecss1 │ active   │ true  │
└─────────────┴──────────────────┴──────────┴───────┘


info
Команда для просмотра информации о состоянии подключения конкретного медиаресурса.

Путь команды:

/system/media/resource/info

Синтаксис:

info <node>  <contact> 

Параметры:

<contact> — contact uri декларируемого медиаресурса;
<node> — имя ноды.

Пример:

/system/media/resource/info core1@ecss1 net.20@msr.ecss1
  Media resource specific for node core1@ecss1:
┌─┬─────────────────┬─────────────────────┐
│F│    Parameter    │        Value        │
├─┼─────────────────┼─────────────────────┤
│r│ Contact         │ net.20@msr.ecss1    │
│r│ Status          │ registered          │
│r│ Cc-status       │ connected           │
│r│ Cc-status uptime│ 00:39:35            │
│r│ Cc-id           │ db21af              │
│r│ Address         │ 10.0.20.51:5700     │
│r│ Register time   │ 2025/12/02 16:43:07 │
│r│ Expired         │ 84                  │
│r│ Iface           │ net.20(10.0.20.51)  │
│ │ Active          │ true                │
│ │ Zone            │ default             │
│ │ Site            │ local               │
│r│ MSR version     │ 3.18.1.0.10         │
│r│ MSR load        │ 0                   │
│r│ MSR perf coef   │ 1.0                 │
└─┴─────────────────┴─────────────────────┘

Legend:
Column F - means Flag, values r - flag for readonly parameter
BASH


list
Команда для просмотра списка медиаресурсов в системе ECSS-10.

Путь команды:

/system/media/resource/list

Синтаксис:

list [active | all | register]

Параметры:

active — отображать только активные медиаресурсы (по умолчанию);
register — отображать только зарегистрированные медиаресурсы;
short — отобразить минимальную информацию;
all — отображать все задекларированные медиаресурсы.
По умолчанию команда выдает список зарегистрированных медиасерверов.

Пример:

/system/media/resource/list all
  All media resource selected list specific:
┌─────────────┬───────────┬─────────────┬───────────┬──────┬────────┬───────────┬───────────┬─────────────────┬────────┬────────────┬────────┬─────────┬───────┬──────────────────┬────────────┬─────────┐
│    Node     │    MSR    │     MSR     │    MSR    │ MSR  │ Cc-id  │ Cc-status │ Cc-uptime │   Cc-address    │ Iface  │   Iface    │ Active │  Zone   │ Site  │     Contact      │   Status   │ Expired │
│             │           │   version   │ perf coef │ load │        │           │           │                 │  name  │    addr    │        │         │       │                  │            │         │
├─────────────┼───────────┼─────────────┼───────────┼──────┼────────┼───────────┼───────────┼─────────────────┼────────┼────────────┼────────┼─────────┼───────┼──────────────────┼────────────┼─────────┤
│ core1@ecss1 │ msr.ecss1 │ 3.18.1.0.10 │       1.0 │    0 │ db21af │ connected │ 00:40:22  │ 10.0.20.51:5700 │ net.20 │ 10.0.20.51 │ true   │ default │ local │ net.20@msr.ecss1 │ registered │     156 │
│             │ msr.ecss2 │ 3.18.1.0.10 │       1.0 │    0 │ 263898 │ connected │ 00:40:22  │ 10.0.20.52:5700 │ net.20 │ 10.0.20.52 │ true   │ default │ local │ net.20@msr.ecss2 │ registered │     156 │
│ core1@ecss2 │ msr.ecss1 │ 3.18.1.0.10 │       1.0 │    0 │ db21af │ connected │ 00:41:11  │ 10.0.20.51:5700 │ net.20 │ 10.0.20.51 │ true   │ default │ local │ net.20@msr.ecss1 │ registered │     106 │
│             │ msr.ecss2 │ 3.18.1.0.10 │       1.0 │    0 │ 263898 │ connected │ 00:44:00  │ 10.0.20.52:5700 │ net.20 │ 10.0.20.52 │ true   │ default │ local │ net.20@msr.ecss2 │ registered │     177 │
└─────────────┴───────────┴─────────────┴───────────┴──────┴────────┴───────────┴───────────┴─────────────────┴────────┴────────────┴────────┴─────────┴───────┴──────────────────┴────────────┴─────────┘
BASH


Добавление управления регистратором для MSR медиа менеджера в интерфейсе командной строки (CLI)


/system/media/registrar/ - команды управления регистратором для MSR медиа менеджера

set

Команда для изменения общих и индивидуальных параметров.

Путь команды:

/system/media/registrar/set

Синтаксис настройки общих параметров:

set common <FIELD> <VALUE>

Параметры:

<FIELD> - имя настраиваемого параметра;

<VALUE> - значение настраиваемого параметра

Где
  • common - тип выставляемого параметра;
  • <common parameter> - общий параметр медиарегистратора для всех нод: registration-timeout;
  • private - тип выставляемого параметра;
  • <node name> - имя ноды на которой находится медиарегистратор;
  • <private parameter> - параметр медиарегистратора, который выставляется на <node name>: is-active, listen-interface & listen-port.

Cписок параметров доступных для настройки:

  • is-active - позволяет включить или выключить регистратор (false - деактивирует регистратор, регистратор перестает принимать SIP трафик);
  • listen-interface - имя интерфейса, который использует регистратор;
  • listen-port - порт, на котором регистратор принимает запросы на регистрацию (по умолчанию 5000);
  • registration-timeout - таймер перерегистрации, диапазон значений от 60 до 86400.

В общих параметрах доступна настройка времени регистрации, по умолчанию установлено 60 секунд.

Пример:
Установить время регистрации 60 секунд:

/system/media/registrar/set common registration-timeout 60
Common parameter registration-timeout set to 60.

Синтаксис настройки индивидуальных параметров:

system/media/registrar/set private <CORE> <FIELD> <VALUE>

Параметры:

<CORE> - нода ядра, для которой настраивается Registrar-сервер;

<FIELD> - имя настраиваемого параметра;

<VALUE> - значение настраиваемого параметра.

Настраиваемые параметры:

  • is-active - активен ли Registrar-сервер, принимает значения true | false;
  • listen-ip - ip-адрес, на котором Registrar-сервер будет принимать соединения (по умолчанию 0.0.0.0);
  • listen-port - сетевой порт, на котором Registrar-сервер будет принимать соединения (по умолчанию 5000).

Установить ipадрес для приема соединений от медиасервера:

выполняется в CoCon

/system/media/registrar/set private core1@ecss1 listen-ip 10.0.20.51
CODE

выполняется в CoCon

/system/media/registrar/set private core1@ecss2 listen-ip 10.0.20.52
CODE
/system/media/registrar/set private core1@ecss1 listen-ip 10.0.20.51   
Private parameter listen-ip set to 10.0.20.51 at node core1@ecss1.

/system/media/registrar/set private core1@ecss2 listen-ip 10.0.20.52
Private parameter listen-ip set to 10.0.20.52 at node core1@ecss2.

info

Команда просмотра текущих настроек Registrar-сервера.

Путь команды:

/system/media/registrar/info


/system/media/registrar/info
 Common parameters:
┌───────────────────────────┬───────┐
│         Parameter         │ Value │
├───────────────────────────┼───────┤
│ registration-timeout, sec │   180 │
└───────────────────────────┴───────┘
 Private parameters:
┌─────────────┬────────┬───────────┬────────────┬─────────────┐
│    Node     │ Status │ Is-active │ Listen-ip  │ Listen-port │
├─────────────┼────────┼───────────┼────────────┼─────────────┤
│ core1@ecss2 │ active │ true      │ 10.0.20.52 │        5000 │
│ core1@ecss1 │ active │ true      │ 10.0.20.51 │        5000 │
└─────────────┴────────┴───────────┴────────────┴─────────────┘

После того как все сервисы будут запущены, ноды какое-то время будут устанавливать связь. Как только все ноды загрузятся , при выполнении запроса system-status, последует вывод следующей информации:

/system-status 
Checking...
┌─┬───────────────┬───────────────────────────┬───────────────────────────────┬─────────────────────┬───────┐
│ │     Node      │          Release          │         Erlang nodes          │    Mnesia nodes     │Uptime │
├─┼───────────────┼───────────────────────────┼───────────────────────────────┼─────────────────────┼───────┤
│ │core1@ecss1    │ecss-core-3.18.1.0.1656    │core1@ecss1,core1@ecss2        │not running          │43m 43s│
│ │core1@ecss2    │ecss-core-3.18.1.0.1656    │core1@ecss1,core1@ecss2        │not running          │47m 5s │
│ │ds1@ecss1      │ecss-ds-3.18.1.0.1656      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │43m 43s│
│ │ds1@ecss2      │ecss-ds-3.18.1.0.1656      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │47m 4s │
│ │md1@ecss1      │ecss-mediator-3.18.1.0.1656│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │43m 43s│
│ │md1@ecss2      │ecss-mediator-3.18.1.0.1656│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │47m 5s │
│ │mycelium1@ecss1│ecss-mycelium-3.18.1.0.1656│mycelium1@ecss1,mycelium1@ecss2│not running          │43m 43s│
│ │mycelium1@ecss2│ecss-mycelium-3.18.1.0.1656│mycelium1@ecss1,mycelium1@ecss2│not running          │47m 4s │
│ │sip1@ecss1     │ecss-pa-sip-3.18.1.0.1656  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│43m 43s│
│ │sip1@ecss2     │ecss-pa-sip-3.18.1.0.1656  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│47m 5s │
└─┴───────────────┴───────────────────────────┴───────────────────────────────┴─────────────────────┴───────┘

All services are started.

  Active media resource selected list specific:
┌─────────────┬───────────┬─────────────┬───────────┬───────────┐
│    Node     │    MSR    │     MSR     │ Cc-status │ Cc-uptime │
│             │           │   version   │           │           │
├─────────────┼───────────┼─────────────┼───────────┼───────────┤
│ core1@ecss1 │ msr.ecss1 │ 3.18.1.0.10 │ connected │ 00:42:49  │
│             │ msr.ecss2 │ 3.18.1.0.10 │ connected │ 00:42:48  │
│ core1@ecss2 │ msr.ecss1 │ 3.18.1.0.10 │ connected │ 00:43:38  │
│             │ msr.ecss2 │ 3.18.1.0.10 │ connected │ 00:46:27  │
└─────────────┴───────────┴─────────────┴───────────┴───────────┘

Alarms list on md1:
┌──────────────┬───────────────┬───────────────┬────────────────────┬────────────────────┬────────────────────┬────────────────────────────────────────────────────────────┐
│     Date     │   Severity    │   Location    │       Cause        │       Class        │      Instance      │                          Message                           │
├──────────────┼───────────────┼───────────────┼────────────────────┼────────────────────┼────────────────────┼────────────────────────────────────────────────────────────┤
└──────────────┴───────────────┴───────────────┴────────────────────┴────────────────────┴────────────────────┴────────────────────────────────────────────────────────────┘
Selected: 0
Total: 0

В примере выше видно, что ноды вошли в кластер и MSR зарегистрировались на ноде ecss-core.

Создание и настройка группы SIP-IP-адресов (IP-set)

Произведите настройку адаптера SIP согласно ТЗ:

выполняется в CoCon

/cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss1 ip = 10.0.20.31
CODE

выполняется в CoCon

/cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss2 ip = 10.0.20.32
CODE


выполняется в CoCon

/cluster/adapter/sip1/sip/network/set ip_set test_set listen-ports list = [5060]
CODE
/cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss1 ip = 10.0.20.31   
Property "ip_set" successfully changed from: 

   to
test_set: no ports set
test_set: sip1@ecss1 10.0.20.31
test_set: dscp 0.


/cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss2 ip = 10.0.20.32
Property "ip_set" successfully changed from: 
test_set: no ports set
test_set: sip1@ecss1 10.0.20.31
test_set: dscp 0
   to
test_set: no ports set
test_set: sip1@ecss1 10.0.20.31
test_set: sip1@ecss2 10.0.20.32
test_set: dscp 0.


/cluster/adapter/sip1/sip/network/set ip_set test_set listen-ports list = [5060]
Property "ip_set" successfully changed from: 
test_set: no ports set
test_set: sip1@ecss1 10.0.20.31
test_set: sip1@ecss2 10.0.20.32
test_set: dscp 0
   to
test_set: 5060
test_set: sip1@ecss1 10.0.20.31
test_set: sip1@ecss2 10.0.20.32
test_set: dscp 0.

Создание Домена и подключение IP-set

Создайте Домен (виртуальную АТС) и присвойте ему созданную выше группу (IP-set) настроек SIP-адаптера:

выполняется в CoCon

/domain/declare test_domain --add-domain-admin-privileges --add-domain-user-privileges
CODE

выполняется в CoCon

/domain/test_domain/sip/network/set ip_set [test_set]
CODE
/domain/declare test_domain --add-domain-admin-privileges --add-domain-user-privileges
New domain test_domain is declared


/domain/test_domain/sip/network/set ip_set [test_set]
Property "ip_set" successfully changed from: 
[]
   to
["test_set"].
BASH

После создания домена, администратор системы должен открыть доступ на управление услугами оператору Домена (виртуальной АТС). Для этого использовать команду разрешения оператору Домена (виртуальной АТС) "test_domain" управлять  всеми услугами :

выполняется в CoCon

/cluster/storage/ds1/ss/access-list add test_domain *
CODE
/cluster/storage/ds1/ss/access-list add test_domain *
Supplementary services successfully added in the domain test_domain.

Для возможности применения пакета услуг у абонентов сразу после создания, необходимо настроить политику применения лицензионных пакетов услуг (детальную информацию вы можете посмотреть здесь )

Создать политику применения лицензии с именем -"new_sub"

выполняется в CoCon

/domain/test_domain/ss/licence/politics/declare new_sub "Задаются при создании абонента"
BASH
/domain/test_domain/ss/licence/politics/declare new_sub "Задаются при создании абонента"
Licence politic new_sub successfully declared.


Задать имя пакета услуг дополнительных сервисов, для этого использовать следующие команды :

выполняется в CoCon

/cluster/storage/ds1/licence/show-licence 1
BASH

нас интересует следующая информация :

/cluster/storage/ds1/licence/show-licence 1
SSW ID                                                < Имя SSW ID >
Description                                           Лицензия для тестирования Локация 2.

. . .  

Supplementary Services licence package(s)             
 name                                                 'ECSS-ADV'
 limit                                                50000
 description                                          "Весь пакет услуг"
 SS list                                              [1,2,3,4,5]
                                                      
. . . 

имя пакета услуг в  примере "ECSS-ADV".
Добавить в созданную политику пакет лицензионных услуг с именем "
ECSS-ADV"(именно так он описан в лицензии):

выполняется в CoCon

/domain/test_domain/ss/licence/politics/package-add new_sub ECSS-ADV 
BASH
/domain/test_domain/ss/licence/politics/package-add new_sub ECSS-ADV 
Licence packages ["ECSS-ADV"] successfully added to politic new_sub.


Пакет  добавлен, но в настоящий момент политика не активна (не может быть применена к абоненту).  Для активации политики new_sub выполнить следующую команду:

выполняется в CoCon

/domain/test_domain/ss/licence/politics/activate new_sub
BASH
/domain/test_domain/ss/licence/politics/activate new_sub
Licence politic new_sub successfully activated.

Теперь при создании абонентов можем использовать дополнительные услуги.