В данном разделе приведены примеры инсталляции и настройки ECSS-10 для системы с одиночным сервером и для кластера из двух серверов.

Первоначальная установка системы без резервирования с одним сервером

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

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

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

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

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

Таблица 1. Рекомендуемые аппаратные решения

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

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

Light+

Midi

Heavy

Super Heavy

Характеристики системы

Максимальное количество абонентов

5000

10000

20000

40000

Максимальная нагрузка одновременных соединений class 5

800

1500

3000

6000

Максимальная нагрузка одновременных соединений class 4

2400

4500

9000

20000

Характеристики сервера

Марка

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

Серия

DL20 Gen10 (SR250)/DL 360 Gen10 (SR530)

DL360 Gen10 (SR530/SR630)

DL360 Gen10 (SR630)

DL 360 Gen10 (SR630)

Процессор

Intel Xeon E-2276G/Intel Xeon 4214

Intel Xeon 5220

Intel Xeon 6240

Intel Xeon 8268

Количество процессоров

1

1

2

2

Объем ОЗУ

12 ГБ

16 ГБ

24 ГБ

64 ГБ

HDD

От 3X500 SATA
(от 7200 об/мин)

От 3x300 ГБ SAS (от 10000 об/мин)

От 3x600 ГБ SAS
(от 10000 об/мин) 2x150 ГБ SSD

От 6x800 ГБ SSD, 2x300 ГБ M.2 SSD

RAID

No raid board

HW Raid, от 1 ГБ cache+battery

HW Raid, от 1 ГБ cache+battery

HW Raid, от 2 ГБ Flashcache, поддержка RAID-5

Дополнительные комплектующие сервера (в базовых комплект не входят)

Лицензия на удалённое управление

по желанию

+

+

+

Резервный источник питания

по желанию

+

+

+

Организация хранилища записей разговоров

Дополнительные HDD, объединенные в RAID-5

Лицензия на HW Raid с поддержкой RAID-5, дополнительные HDD для хранения записей

Лицензия на HW Raid с поддержкой RAID-5, дополнительные HDD для хранения записей

Лицензия на HW Raid с поддержкой RAID-5, дополнительные HDD для хранения записей

Таблица 2. Пример составления аппаратных требований

Устройство

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

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

MCL

MUL

Сервер 1

2500

15000

Heavy

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

Таблица 3. Пример разнесения составляющих по адресному пространству для одной ноды

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

Роль

Интерфейс

Адрес

Порт

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

ecss1

Адрес сервера

network.10 (mgm)

10.0.10.11/24

-

ecss1

Адрес протокольного адаптера

network.20 (voip)

10.0.20.11/24

-

ecss1

Адрес шлюза

network.10 (mgm)

10.0.10.1-

ecss1

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

network.10 (mgm)

10.0.10.1, 8.8.8.8-

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

ecss1

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

lo

127.0.0.1/24

5000

ecss1

Адрес медиасервера (ecss-media-server (MSR))

lo

127.0.0.1/24

5040

ecss1

Адрес базы данных MySQL (ecss-mysql)

lo

127.0.0.1/24

3306

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

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

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

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

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

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

Например, eth1 и eth2 включаются в первый коммутатор, а eth3 и eth4 — во второй.


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

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

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

Требования:

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

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

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

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

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

В данном примере согласно ТЗ будем использовать адреса:

  • 10.0.10.10/24 — для управления, vlan 10;
  • 10.0.20.10/24 — для VoIP.

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

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

Подготовка сетевых интерфейсов системы

Согласно ТЗ, система имеет 4 сетевых интерфейса. Информацию об их состоянии можно посмотреть с помощью команды ifconfig или ip a:

eth0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 36:10:28:73:63:01 txqueuelen 1000 (Ethernet)

eth1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 36:10:28:73:63:01 txqueuelen 1000 (Ethernet)

eth2: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether be:77:ea:52:4d:39 txqueuelen 1000 (Ethernet)

eth3: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether be:77:ea:52:4d:39 txqueuelen 1000 (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0

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

Данная утилита позволяет настроить сетевую конфигурацию и затем загрузить ее в систему с помощью сетевого менеджера networkd или NetworkManager.

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:

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

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

Пример настройки файла ecss-netplan.yaml для варианта включения active-backup

# 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) интерфейсов. В имени не может быть более 15 символов!
    bond1: # Название bonding-интерфейса 
      interfaces: # Секция определения связанного интерфейса
		- eth0
		- eth1
		- eth2
		- eth3
      parameters: # Раздел определения параметров связанного интерфейса
        mode: active-backup # Режим резервирования 1:1
        mii-monitor-interval: 100 # интервал мониторинга интерфейса (мс)
        primary: eth0 # Секция определения основного интерфейса
      optional: false # Определение, является ли интерфейс обязательным при старте
  
  vlans:
    network.10: # Интерфейс управления
      id: 10
        link: bond1
        addresses: [10.0.10.10/24]
        gateway4: 10.0.10.1 # Адрес шлюза
        nameservers:
          addresses: [10.0.10.1, 8.8.8.8] # Адреса серверов DNS
    network.20: # Интерфейс для VoIP
        id: 20
        link: bond1
        addresses: [10.0.20.10/24]

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

sudo netplan apply

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

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

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

Обратите внимание, что требуется указать верную версию операционной системы при добавлении репозитория ELTEX. Если установка происходит на Ubuntu 18.04, то необходимо указать bionic, как приведено в примере. Однако, если ECSS-10 устанавливается на Astra Linux, необходимо указать соответствующие репозитории smolensk:

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

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

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

Перед началом установки необходимо обновить ОС:

sudo apt update
sudo apt upgrade

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

ВАЖНО

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

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

sudo apt install 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

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

Установка начинается с развертывания MySQL-сервера и интеграции базы данных ecss-mysql.

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

sudo apt install ecss-mysql

Настройка пакета ecss-dns-env

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

Настройка пакета ecss-mysql

При инсталляции пакета будут запрошены следующие данные:

ВопросыОтветы
Адресная маска для MySQL (IP pattern for MySQL permission)127.0.0.%
Логин пользователя (Login for MySQL root)root
Пароль пользователя MySQL (Password for MySQL root)PASSWORD

Изменение пути по умолчанию — согласиться с изменением конфигурационного файла для внесения пути до баз данных ecss-mysql, введя "Y".

Базы данных mysql, используемых системой ECSS-10, после установки будут храниться по пути /var/lib/ecss-mysql. Проверяем наличие файлов в папке:

ls -l /var/lib/ecss-mysql/
total 36
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_address_book
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:37 ecss_audit
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_calls_db
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_dialer_db
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_meeting_db
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_statistics
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_subscribers
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 history_db
drwxr-xr-x 2 mysql mysql 4096 Sep 26 14:32 web_conf

Проверяем, что сервер запущен:

sudo systemctl status mysql
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/mysql.service.d
└─override.conf
Active: active (running) since Thu 2019-09-26 13:36:47 +07; 23h ago
Main PID: 11642 (mysqld)
CGroup: /system.slice/mysql.service
└─11642 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

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

Устанавливаем пакет ecss-node:

sudo apt install ecss-node

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

ВопросыОтветы
Выключить ежедневные обновления (Do you want turn off apt-daily update ?)Yes
Установить настройки по умолчанию для БД (Set DB config to default ?)Yes
Взводить аварию ECSS-10 при заполнении раздела MySQL (Set alarm true when MYSQL DB overloads)Yes
Использовать настройки NTP для кластера (NTP: Do you want use settings for cluster ?)No 
Внешний NTP сервер (External NTP servers through a space)

ntp.ubuntu.com (по умолчанию)

Ввести один или несколько серверов через пробел, используемых на объекте

Использовать локальный сервер? (NTP: Do you want use local server ?)No
Адреса и маски адресов которые должны иметь доступ к NTP (NTP: Addresses and Masks of Network, which must have access to the ntp through a space)

Ввести список подсетей, из которых будет доступ к данному NTP-серверу, например, 10.0.10.0|255.255.255.0

Установить утилиты для работы с cdrNo

Для генерации сертификатов выбираем ручной (manual) способ. На все вопросы можно дать ответы, предложенные по умолчанию, нажимая кнопку "Enter" на каждый вопрос.

Установка пакетов ecss-media-server, ecss-media-resources, ecss-restf, ecss-web-conf

Далее устанавливаются пакеты ecss-media-server, ecss-media-resources, ecss-restf, ecss-web-conf и другие в любом порядке:

ecss-media-server, ecss-media-resources

sudo apt install ecss-media-server ecss-media-resources

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

Вопросы ecss-media-serverОтветы для ecss1
Установить настройки по умолчанию:yes
Введите имя (Enter)msr.ecss1
Введите адрес (Entrer)127.0.0.1
Введите порт (Entrer)5000


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

cd /etc/ecss/ecss-media-server/
cat config.xml
cat conf.d/default.xml
CODE

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

Настройка msr для ecss1(/etc/ecss/ecss-media-server/conf.d/default.xml)

<?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>
CODE

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

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

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

ecss-restfs

sudo apt install ecss-restfs

При его установке будет предложено настроить конфигурацию:

ВопросыОтветы

Использование функции TTS (Use TTS service)

No

Настройка телефонной книги (Configure phone book)

No

Настроить сервис определения речи (Configure speech recognition service)

No

Ничего не выбирать

Ok

ecss-web-conf

sudo apt install ecss-web-conf

При его установке будет предложено настроить конфигурацию:

ВопросыОтветы
Указать доменное имя или адрес для базы данных MySQL web-интерфейса (Input IP address or hostname of MySQL db for web-conf DB)127.0.0.1

Указать порт для базы данных MySQL web-интерфейса (Input port of MySQL db for web-conf DB

3306

Указать доменное имя или адрес для подключения к web-интерфейсу (Input IP address or hostname for ECSS-10 with http_terminal)

127.0.0.1

Указать порт для web-терминала программного коммутатора (Input port SSW http_terminal)

9999
Указать логин для web-терминала (Input login for SSW http_terminal)admin

Указать пароль для web-терминала (Input  password for SSW http_terminal)

password

Настройка snpmd

Настройка SNMP описана здесь.

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

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

sudo nano /etc/ssh/sshd_config

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

Настройка ssh для ecss1(/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.10
#ListenAddress ::

<...>

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

sudo systemctl restart ssh.service

Настройка начальной конфигурации

Запускаем необходимые сервисы.

ВАЖНО

Перед началом работы проверьте наличие Token в системе.

Запускаем пакеты ecss-mycelium и ecss-ds на первом хосте:

sudo systemctl start ecss-mycelium
sudo systemctl start ecss-ds

Переходим в CLI:

ssh admin@localhost -p 8023
password: password

Проверяем состояние системы:

admin@mycelium1@ecss1$ system-status 
Checking...
┌─┬───────────────┬────────────────────────┬───────────────┬────────────┬──────┐
│ │     Node      │        Release         │ Erlang nodes  │Mnesia nodes│Uptime│
├─┼───────────────┼────────────────────────┼───────────────┼────────────┼──────┤
│ │ds1@ecss1      │ecss-ds-3.14.10.91      │ds1@ecss1      │ds1@ecss1   │8m 9s │
│ │mycelium1@ecss1│ecss-mycelium-3.14.10.91│mycelium1@ecss1│not running │8m 10s│
└─┴───────────────┴────────────────────────┴───────────────┴────────────┴──────┘

All services are started.

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

admin@[mycelium1@ecss1]:/$ cluster/storage/ds1/licence/set-passport <passport>
admin@[mycelium1@ecss1]:/$ cluster/storage/ds1/licence/add <license>

 Выходим из СoСon, выполняем перезагрузку подсистем ecss-mycelium и ecss-ds, а затем подключаем оставшиеся подсистемы в следующем в порядке: ecss-core, ecss-pa-sip, ecss-media-server, ecss-restfs, ecss-mediator, ecss-web-conf.

sudo systemctl start ecss-core ecss-pa-sip ecss-mediator ecss-media-server ecss-restfs ecss-web-conf

Возвращаемся в CoCon.

После устанавливается связь MSR- и Core-подсистем. Для этого прописывается команда:

admin@[mycelium1@ecss1]:/$ /system/media/resource/declare core1@ecss1 iface msr.ecss1 bond1_ecss1_pa default local true

Для проверки выполняем команду system-status и видим вывод:

admin@mycelium1@ecss1$ system-status                        
Checking...
┌─┬───────────────┬────────────────────────┬───────────────┬────────────┬──────┐
│ │     Node      │        Release         │ Erlang nodes  │Mnesia nodes│Uptime│
├─┼───────────────┼────────────────────────┼───────────────┼────────────┼──────┤
│ │core1@ecss1    │ecss-core-3.14.10.91    │core1@ecss1    │not running │1m 59s│
│ │ds1@ecss1      │ecss-ds-3.14.10.91      │ds1@ecss1      │ds1@ecss1   │4h    │
│ │md1@ecss1      │ecss-mediator-3.14.10.91│md1@ecss1      │md1@ecss1   │1m 59s│
│ │mycelium1@ecss1│ecss-mycelium-3.14.10.91│mycelium1@ecss1│not running │4h    │
│ │sip1@ecss1     │ecss-pa-sip-3.14.10.91  │sip1@ecss1     │sip1@ecss1  │1m 59s│
└─┴───────────────┴────────────────────────┴───────────────┴────────────┴──────┘

All services are started.

  Active media resource selected list specific:
┌─────────────┬───────────┬────────────┬───────────┬───────────┐
│    Node     │     MSR   │    MSR     │ Cc-status │ Cc-uptime │
│             │           │  version   │           │           │
├─────────────┼───────────┼────────────┼───────────┼───────────┤
│ core1@ecss1 │ msr.ecss1 │ 3.14.10.42 │ connected │ 00:01:31  │
└─────────────┴───────────┴────────────┴───────────┴───────────┘

Производим настройку адаптера SIP согласно техническому заданию. Определяем группу IP-адресов (IP-set):

admin@[mycelium1@ecss1]:/$ /cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss1 ip = 10.0.20.11
        
Property "ip_set" successfully changed from:     
to
test_set: no ports set
test_set: sip1@ecss1 10.0.20.11
test_set: dscp 0.

Далее создаем домен и присваиваем ему созданную группу (IP-set) настроек SIP-адаптера:

admin@[mycelium1@ecss1]:/$ 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"].

После создания домена настраиваем:

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

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

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

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

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

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

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

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

Таблица 1. Рекомендуемые аппаратные решения

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

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

Light

Light+

Midi

Heavy

Super Heavy

Характеристики системы

Максимальное количество абонентов

3000

5000

10000

20000

40000

Максимальная нагрузка одновременных соединений class 5

500

800

1500

3000

6000

Максимальная нагрузка одновременных соединений class 4

1500

2400

4500

9000

20000

Характеристики сервера

Марка

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

Серия

DL20 Gen10 (SR250)

DL20 Gen10 (SR250)/DL 360 Gen10 (SR530)

DL360 Gen10 (SR530/SR630)

DL360 Gen10 (SR630)

DL 360 Gen10 (SR630)

Процессор

Intel Xeon E-2236

Intel Xeon E-2276G/Intel Xeon 4214

Intel Xeon 5220

Intel Xeon 6240

Intel Xeon 8268

Количество процессоров

1

1

1

2

2

Объем ОЗУ

8 ГБ

12 ГБ

16 ГБ

24 ГБ

64 ГБ

HDD

От 3X500 SATA
(от 7200 об/мин)

От 3X500 SATA
(от 7200 об/мин)

От 3x300 ГБ SAS (от 10000 об/мин)

От 3x600 ГБ SAS
(от 10000 об/мин) 2x150Gb SSD

От 6x800 ГБ SSD, 2x300 ГБ M.2 SSD

RAID

No raid board

No raid board

HW Raid, от 1 ГБ cache+battery

HW Raid, от 1 ГБ cache+battery

HW Raid, от 2 ГБ Flashcache, поддержка RAID-5

Дополнительные комплектующие сервера (в базовых комплект не входят)

Лицензия на удалённое управление

по желанию

по желанию

+

+

+

Резервный источник питания

по желанию

по желанию

+

+

+

Организация хранилища записей разговоров

Дополнительные HDD, объединенные в RAID-5

Дополнительные HDD, объединенные в RAID-5

Лицензия на HW Raid с поддержкой RAID-5, дополнительные HDD для хранения записей

Лицензия на HW Raid с поддержкой RAID-5, дополнительные HDD для хранения записей

Лицензия на HW Raid с поддержкой RAID-5, дополнительные HDD для хранения записей

Таблица 2. Пример составления аппаратных требований

Устройство

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

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

MCL

MUL

Сервер 1

2000

15000

Heavy

Сервер 2    Heavy

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

Таблица 3. Пример разнесения составляющих по адресному пространству для одной ноды

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

Роль

Интерфейс

Адрес

Порт

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

ecss1

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

net.10

10.0.10.11/24

2000

ecss2

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

net.10

10.0.10.12/24

2000

ecss1

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

net.20

10.0.20.11/245000
ecss2Адрес ядра (ecss-core)net.2010.0.20.12/245000

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.212123

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

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-

ecss1, ecss2

Виртуальный адрес базы данных MySQL
(ecss-mysql)

net.10:MYSQL

10.0.10.10/243306

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

Топологию включения сервера в сеть для обеспечения резервирования рекомендуется делать с использованием 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) — во второй. 

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

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

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

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

  • 10.0.10.11(12)/24 — для управления, vlan 10;
  • 10.0.20.21(22)/24 — core, vlan 20;
  • 10.0.20.31(32)/24 — виртуальные (vrrp) для VoIP;
  • 10.0.10.10 — виртуальный (vrrp) адрес сервера MySQL;
  • 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.21, при этом ядро (ecss-core) взаимодействует с сервером обработки мультимедиа-данных (ecss-media-server). Их взаимодействие происходит с использованием одного и того же адреса, но у каждой программной части свой транспортный порт: ecss-core — 5000, ecss-msr — 5040.

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

Сначала настраиваются сетевые интерфейсы. В Ubuntu18 для настройки используется утилита 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: # Раздел определения параметров связанного интерфейса
        mode: active-backup # Режим резервирования 1:1
        mii-monitor-interval: 100 # интервал мониторинга интерфейса(мс)
        primary: eth0 # Секция определения основного интерфейса
      optional: false # Определение, является ли интерфейс обязательным при старте
  
  vlans:
    net.10: # Интерфейс управления
      id: 10
        link: bond1
        addresses: [10.0.10.11/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.11/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: active-backup # Режим резервирования 1:1
        mii-monitor-interval: 100 # интервал мониторинга интерфейса(мс)
        primary: eth0 # Секция определения основного интерфейса
      optional: false # Определение, является ли интерфейс обязательным при старте
  
  vlans:
    network.10: # Интерфейс управления
      id: 10
        link: bond1
        addresses: [10.0.10.12/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 # Определяет, что указанные маршруты непосредственно связаны с интерфейсом
    network.20: # Интерфейс для VoIP
        id: 20
        link: bond1
        addresses: [10.0.20.12/24]
        routes:
          - to: 10.0.3.0/24
            via: 10.0.20.1
            on-link: true          


Пример 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.11/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.11/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:
    network.10: # Интерфейс управления
      id: 10
        link: bond1
        addresses: [10.0.10.12/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 # Определяет, что указанные маршруты непосредственно связаны с интерфейсом
    network.20: # Интерфейс для VoIP
        id: 20
        link: bond1
        addresses: [10.0.20.12/24]
        routes:
          - to: 10.0.3.0/24
            via: 10.0.20.1
            on-link: true          


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

sudo netplan apply

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

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

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

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

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

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

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

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

Для установки системы ECSS-10 необходимо добавить репозиторий ЭЛТЕКС:

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

Обратите внимание, что требуется указать верную версию операционной системы при добавлении репозитория ЭЛТЕКС:

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

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

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

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

sudo apt update
sudo apt upgrade

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

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

sudo apt install ntp 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

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

sudo apt install ifenslave-2.6 keepalived attr

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

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

sudo apt install ecss-mysql

Настройка пакета ecss-dns-env

Перед установкой пакета ecss-mysql вам будет предложено настроить переменные окружения для сервисов в dnsmasq. Настройщик предложит выбрать разделы для настройки. Нужно выбрать broker и mysql.

ВопросОтветы для ecss1Ответы для ecss2
Адрес первичного брокера ([Primary broker] Enter ip)10.0.10.1110.0.10.11
Адрес вторичного брокера ([Secondary broker] Enter ip)10.0.10.1210.0.10.12
Адрес mysql ([Mysql] Enter ip)10.0.10.1010.0.10.10

ВАЖНО

Для изменения ip-адресов рекомендуется использовать команду: 
sudo dpkg-reconfigure ecss-dns-env

Настройка пакета ecss-mysql

Во время установки настройщик задаст вопросы, ответы указаны в таблице ниже. Обратите внимание, что пароль является одинаковым для обоих хостов, на которых устанавливается mysql.

ВопросыОтветы для ecss1Ответы для ecss2
Адресная маска для MySQL (IP pattern for MySQL permission)10.0.10.%10.0.10.%
Логин пользователя (Login for MySQL root)rootroot
Пароль пользователя MySQL (Password for MySQL root)PASSWORD PASSWORD 

Изменение пути по умолчанию — согласиться с изменением конфигурационного файла для внесения пути до баз данных ecss-mysql, введя "Y".

Базы данных mysql, используемых системой ECSS-10, после установки будут храниться по пути /var/lib/ecss-mysql. Проверяем наличие файлов в папке:

ls -l /var/lib/ecss-mysql/
total 36
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_address_book
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:37 ecss_audit
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_calls_db
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_dialer_db
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_meeting_db
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_statistics
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 ecss_subscribers
drwxr-xr-x 2 mysql mysql 4096 Sep 26 13:36 history_db
drwxr-xr-x 2 mysql mysql 4096 Sep 26 14:32 web_conf

Проверяем, что сервер запущен:

systemctl status mysql.service

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/mysql.service.d
           └─override.conf
   Active: active (running) since Sun 2022-02-06 15:25:15 +07; 3 days ago
  Process: 3766 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS)
  Process: 3736 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 3783 (mysqld)
    Tasks: 87 (limit: 4915)
   CGroup: /system.slice/mysql.service
           └─3783 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

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

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

ssh-keygen
ssh-copy-id tester@ecss2

Таким же образом генерируем rsa-ключ на хосте ecss2, заменяя host-часть на ecss1.

ssh-keygen
ssh-copy-id tester@ecss1

Далее следует запустить скрипт репликации БД mysql на ecss1:

sudo /usr/lib/ecss/ecss-scripts/mysql-replication/install_replication.sh

Перед выполнением скрипта необходимо определить некоторые параметры. Пример ответа на вопросы для разных хостов приведен ниже. Следует обратить внимание, что пароль PASSWORD — это тот же пароль, который задавался выше. Виртуальный адрес mysql задаем вручную. Причина приведена в разделе "Настройка виртуального адреса для MySQL".

ВопросыОтветы для ecss1
Логин для доступа к БДroot
Пароль для доступа к БДPASSWORD 
Логин для пользователя репликацииreplica
Пароль для пользователя репликацииreplica
Адрес первого хоста 10.0.10.11
Адрес второго хоста10.0.10.12
Имя второго хостаecss2
Имя пользователя на втором хостеtester
Mediator IP127.0.0.1
Порт SNMP162
Создать конфигурацию keepalivedнет

После работы скрипта можно проверить, что в MySQL создан пользователь replica@10.0.10.% и replica@% на обоих хостах:

mysql -uroot -ppassword 
mysql> SELECT user,host FROM mysql.user;
Среди всех пользователей можно увидеть такую запись:
+------------------+---------------+
|           user |      host     |
+------------------+---------------+
| replica        |10.0.10.% |
+------------------+---------------+

Проверяем состояние реплики:

sudo mysql -uroot -p -e 'show slave status \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"
Enter password:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Редактирование keepalived.conf

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

sudo nano /etc/keepalived/keepalived.conf 


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

include /etc/keepalived/sip.conf
include /etc/keepalived/mysql.conf
CODE

Поскольку при создании репликации не была задействована автоматическая генерация конфигурации для mysql, то в конфигурационном файле нужно сделать ссылку на mysql.conf:

include /etc/keepalived/mysql.conf

Далее на обоих хостах создаются файлы /etc/keepalived/mysql.conf

Создание VRRP для MySQL.

/etc/keepalived/mysql.conf для ecss1/etc/keepalived/mysql.conf для ecss2
# Конфигурация mysql первой ноды:

vrrp_script check_mysql {
    script "/usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf -e 'SELECT 1;'"
    user root
    interval 2
    fall 1
    timeout 2
}

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

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

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

    track_script {
        check_mysql
    }
}
# Конфигурация mysql второй ноды:

vrrp_script check_mysql {
    script "/usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf -e 'SELECT 1;'"
    user root
    interval 2
    fall 1
    timeout 2
}

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

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

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

    track_script {
        check_mysql
    }
}

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

После проверки необходимо перезапустить сервис keepalived:

sudo systemctl restart keepalived.service 

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

 Устанавливаем пакет ecss-node:

sudo apt install ecss-node

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

Подробнее о настройке NTP в разделе "Синхронизация времени на серверах".

ВопросыОтветы для ecss1Ответы для ecss2
Выключить ежедневные обновления (Do you want turn off apt-daily update ?)YesYes
Установить настройки по умолчанию для БД (Set DB config to default ?)YesYes
Взводить аварию ECSS-10 при заполнении раздела MySQL (Set alarm true when MYSQL DB overloads)YesYes
NTP: Вы хотите использовать настройки для кластера? (NTP: Do you want use settings for cluster ?)YesYes 
Установить приоритет NTP для кластера (NTP: Set stratum for cluster)77
Внешние NTP-серверы через пробел: (External NTP servers through a space)10.136.16.211 10.136.16.212
NTP: Вы хотите использовать другие сервера для синхронизации времени? (NTP: Do you want to use other servers for time synchronization?)YesYes
NTP: укажите локальные серверы для синхронизации через пробел: (NTP: Indicate local servers for synchronization separated a space:)

10.0.10.12

10.0.10.11
NTP: Вы хотите определить сети, у которых должен быть доступ до ntp, вручную? (NTP: Do you want to define manually which networks should have access to ntp?)YesYes

NTP: Сети, у которых должен быть доступ до ntp через пробел:

Формат: <сетевой адрес>|маска (x.x.x.x|255.255.255.0)

10.0.10.0|255.255.255.010.0.10.0|255.255.255.0
Установить утилиты для работы с cdrNoNo

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

Далее на обоих хостах выполняем установку всех необходимых пакетов (подробнее по установке необходимых и дополнительных пакетов в разделе "Инсталляция пакетов ECSS"):

sudo apt install ecss-media-server ecss-media-resources ecss-web-conf ecss-restfs

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

Вопросы ecss-media-serverОтветы для ecss1Ответы для ecss2
Введите порт (Enter)50405040
Введите bind-ip адрес (Enter)10.0.20.1110.0.20.12
Введите адрес контрольного канала (bind-addr)10.0.20.1110.0.20.12
Введите порт контрольного канала57005700
Выберите режим конфигурации (Choose config mode)autoauto
Установить настройки по умолчанию:yesyes
Введите имя (Enter)msr.ecss1msr.ecss2
Введите адрес (Entrer)10.0.20.1110.0.20.12
Введите порт (Entrer)50005000

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

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

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

Настройка 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.11:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>
            <dynamic msr_name="msr.ecss1" realm="sip:10.0.20.12:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>
      </accounts>
</config>
CODE
<?xml version="1.0"?>
<config>
      <accounts>
            <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.11:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>
            <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.12:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>
      </accounts>
</config>
CODE

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

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

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

Описание настройки остальных сервисов приведено в разделе "Инсталляция дополнительных необязательных пакетов".

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

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

sudo nano /etc/keepalived/sip.conf 
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.11     # Собственный реальный IP-адрес
    unicast_peer {
        10.0.20.12                # Реальный IP-адрес соседа
    }

    virtual_ipaddress {
        # Виртуальный IP-адрес и маска
        # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес
        # label - метка виртуального интерфейса (для удобства идентификации)
        10.0.10.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.11 # Собственный реальный IP-адрес unicast_peer { 10.0.20.12 # Реальный IP-адрес соседа } virtual_ipaddress { # Виртуальный IP-адрес и маска # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес # label - метка виртуального интерфейса (для удобства идентификации) 10.0.20.32/24 dev net.20 label net.20:SIP2 } track_script { check_sip } }

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.12     # Собственный реальный IP-адрес
    unicast_peer {
        10.0.10.11                # Реальный 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 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.12 # Собственный реальный IP-адрес unicast_peer { 10.0.20.11 # Реальный 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

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

mycelium.config

Установка имени кластера производится в конфигурации пакета ecss-mycelium /etc/ecss/ecss-mycelium/mycelium.config:

sudo nano /etc/ecss/ecss-mycelium/mycelium1.config

Выполним настройку на обоих хостах.

Настройка имени кластера (/etc/ecss/ecss-mycelium/mycelium1.config)

%%% -*- mode:erlang -*-
%%% Warning - this config file *must* end with <dot><whitespace>
[
    {mycelium_broker, [
         {cluster_name, test_cluster},           %% Здесь необходимо установить имя кластера для обоих хостов. Имя кластера произвольное и должно быть одинаково на обоих хостах

....

epmd

Выполняем настройку epmd:

systemctl edit epmd.service

Создаем новый сервис и редактируем его:

Настройка epmd  ecss1Настройка epmd ecss2
[Service]
Environment="ERL_EPMD_ADDRESS=127.0.1.1,10.0.10.11"
[Service]
Environment="ERL_EPMD_ADDRESS=127.0.1.1,10.0.10.12"

Перезапускаем сервисы:

systemctl daemon-reload
systemctl restart epmd.service

glusterfs

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

sudo aptitude install glusterfs-server attr

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

sudo gluster peer probe 10.0.10.12

Проверяем наличие созданной связи:

sudo gluster peer status

Number of Peers: 1 Hostname: 10.0.10.12 Uuid: 569c4730-a3a7-4d29-a132-b1bcdad792d8 State: Peer in Cluster (Connected)

Далее создаем кластер для репликации, запускаем репликацию и смотрим ее статус:

sudo gluster volume create ecss_volume replica 2 transport tcp 110.0.10.11:/var/lib/ecss/glusterfs 10.0.10.12:/var/lib/ecss/glusterfs force
sudo gluster volume start ecss_volume
sudo gluster volume info

Таким образом, статус репликации будет выглядеть следующим образом:

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.11:/var/lib/ecss/glusterfs
Brick2: 10.0.10.12:/var/lib/ecss/glusterfs
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

Монтируем раздел glusterfs, для этого создаем новый сервис:

/etc/systemd/system/ecss-glusterfs-mount.service

Добавляем в него следующую конфигурацию:

Настройка /etc/systemd/system/ecss-glusterfs-mount.service
[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

Перезапускаем сервисы:

sudo systemctl daemon-reload 
sudo systemctl restart ecss-glusterfs-mount.service

Проверяем, что раздел смонтировался:

df -h
<...>
localhost:/ecss_volume 253G 3.0G 239G 2% /var/lib/ecss/restfs

После настройки glusterfs необходимо переустановить пакет ecss-media-resources:

sudo apt install --reinstall ecss-media-resources

snpmd

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

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

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

sudo nano /etc/ssh/sshd_config

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

Настройка 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.11
#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.12
#ListenAddress ::

<...>

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

systemctl restart ssh.service

Настройка кластера пакетов ecss-node

Запускаем необходимые сервисы:

ВАЖНО

Перед началом работы проверьте наличие Token в системе.

Запускаем пакеты ecss-mycelium и ecss-ds на первом хосте:

sudo systemctl start ecss-mycelium
sudo systemctl start ecss-ds

Переходим в CLI:

ssh admin@localhost -p 8023
password: password

Проверяем состояние системы:

admin@ds1@ecss1:/$ system-status    
Checking...
┌─┬───────────────┬──────────────────────────┬───────────────┬─────────────┬──────┐
│ │     Node      │         Release          │ Erlang nodes  │Mnesia nodes │Uptime│
├─┼───────────────┼──────────────────────────┼───────────────┼─────────────┼──────┤
│ │ds1@ecss1      │ecss-ds-3.14.10.222       │ds1@ecss1      │ds1@ecss1    │0h 9m │
│ │mycelium1@ecss1│ecss-mycelium-3.14.10.222 │mycelium1@ecss1│not running  │0h 9m │
└─┴───────────────┴──────────────────────────┴───────────────┴─────────────┴──────┘

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

cluster/storage/ds1/licence/set-passport <ssw passport>
ok
cluster/storage/ds1/licence/add <ssw licence>
ok

Выходим и запускаем остальные сервисы на первом и втором хосте.

ecss1:

sudo systemctl start ecss-core ecss-pa-sip ecss-mediator ecss-media-server ecss-restfs ecss-web-conf

ecss2:

sudo systemctl start ecss-mycelium ecss-ds ecss-core ecss-pa-sip ecss-mediator ecss-media-server ecss-restfs ecss-web-conf

Возвращаемся в CLI:

ssh admin@localhost -p 8023
password: password

После устанавливается связь MSR- и Core-подсистем. Для этого прописывается команда:

admin@[mycelium1@ecss1]:/$ /system/media/resource/declare core1@ecss1 iface msr.ecss1 bond1_ecss1_pa default local true
admin@[mycelium1@ecss1]:/$ /system/media/resource/declare core1@ecss2 iface msr.ecss2 bond1_ecss2_pa default local true

После того как все сервисы будут запущены, ноды какое-то время будут устанавливать связь. Как только все ноды загрузятся в system-status, последует вывод следующей информации:

admin@mycelium1@ecss1:/$ system-status 
Checking...
┌─┬───────────────┬──────────────────────────┬───────────────────────────────┬───────────────────────────┬───────┐
│ │     Node      │         Release          │         Erlang nodes          │       Mnesia nodes        │Uptime │
├─┼───────────────┼──────────────────────────┼───────────────────────────────┼───────────────────────────┼───────┤
│ │core1@ecss1    │ecss-core-3.14.10.222     │core1@ecss1,core1@ecss2        │not running                │34m 28s│
│ │core1@ecss2    │ecss-core-3.14.10.222     │core1@ecss1,core1@ecss2        │not running                │6m     │
│ │ds1@ecss1      │ecss-ds-3.14.10.222       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2        │34m 29s│
│ │ds1@ecss2      │ecss-ds-3.14.10.222       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2        │6m     │
│ │md1@ecss1      │ecss-mediator-3.14.10.222 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2        │33m 54s│
│ │md1@ecss2      │ecss-mediator-3.14.10.222 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2        │6m     │
│ │mycelium1@ecss1│ecss-mycelium-3.14.10.222 │mycelium1@ecss1,mycelium1@ecss2│not running                │34m 49s│
│ │mycelium1@ecss2│ecss-mycelium-3.14.10.222 │mycelium1@ecss1,mycelium1@ecss2│not running                │6m     │
│ │sip1@ecss1     │ecss-pa-sip-3.14.10.222   │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2      │33m 54s│
│ │sip1@ecss2     │ecss-pa-sip-3.14.10.222   │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2      │6m     │
└─┴───────────────┴──────────────────────────┴───────────────────────────────┴───────────────────────────┴───────┘

All services are started.

  Active media resource selected list specific:
┌─────────────┬───────────┬────────────┬───────────┬───────────┐
│    Node     │  MSR      │    MSR     │ Cc-status │ Cc-uptime │
│             │           │  version   │           │           │
├─────────────┼───────────┼────────────┼───────────┼───────────┤
│ core1@ecss1 │ msr.ecss1 │ 3.14.10.67 │ connected │ 00:32:03  │
│             │ msr.ecss2 │ 3.14.10.67 │ connected │ 00:23:56  │
│ core1@ecss2 │ msr.ecss1 │ 3.14.10.67 │ connected │ 00:02:39  │
│             │ msr.ecss2 │ 3.14.10.67 │ connected │ 00:02:38  │
└─────────────┴───────────┴────────────┴───────────┴───────────┘

Видно, что ноды вошли в кластер и MSR зарегистрировались на ноде ecss-core.

Настройка группы IP-адресов (IP-set)

Производим настройку адаптера SIP согласно ТЗ:

/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:    
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 = [5062]
Property "ip_set" successfully changed from: 
ipset1: 
ipset1: sip1@ecss1 10.0.20.31
ipset1: sip1@ecss2 10.0.20.32
ipset1: dscp 0
   to
ipset1: 5062
ipset1: sip1@ecss1 10.0.20.31
ipset1: sip1@ecss2 10.0.20.32
ipset1: dscp 0

Далее создаем домен и присваиваем ему созданную группу (IP-set) настроек SIP-адаптера:

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"].

После создания домена настраиваем:

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

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

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

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

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

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

  • Абоненты с номерами 101, 102 , 103, 104 ,105, 106, 107, 108, 109, 110;
  • Транк в сторону шлюза.

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

Рисунок 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 — Диалоговое окно редактирования учетной записи

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для системы с резервированием укажите 10.0.20.31 и 10.0.20.32:

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

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

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

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


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

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

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

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

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

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

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

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

  • Контекст — контекст маршрутизации, выбираем тот, который создали, например "test_name";
  • Имя интерфейса — номер или группа номеров, который присваивается абоненту, например {100-110};

  • Алиас как пользователь — настройка, которая связывает номер сущности, алиас и пользователя одним и тем же названием, в примере настройка активирована;
  • Авторизация — порядок проверки подлинности прав пользователя на доступ к данным, в примере используется always;
  • Логин — использую настройку номер как логин для простоты;
  • Пароль — можно задать или использовать сгенерированный системой.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для rule2:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Настройка услуг

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

  • Установить услуги через СoСon;
  • Добавить услуги для домена в список доступа (access-list) через СoСon;
  • Далее любая услуга в списке доступа становится применимой на абоненте или транке.

Для входа в CLI "CoСon" можно воспользоваться терминалом или приложением "Командная консоль CoCon" ("CoCon").

После авторизации в Cocon пропишите следующие команды:

  • Для установки услуг в систему:

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

  • После успешной установки услуг пропишите следующую строку для добавления доступа к ним:

cluster/storage/ds1/ss/access-list add test_domain *

Символ "*" означает, что команда будет применена ко всем доступным элементам в системе. Если требуется установить конкретную услугу, вместо "*" вводится её название.

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

Рисунок 29 — Пример настройки услуг

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