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

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

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

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

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

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

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

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

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

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

Light

Light+

Midi

Heavy

Super Heavy

1

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

1.1

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

3000

5000

10000

20000

40000

1.2

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

500

800

1500

3000

6000

1.3

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

1500

2400

4500

9000

20000

2

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

2.1

Марка

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

2.2

Серия

DL20 Gen10 (SR250)

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

DL360 Gen10 (SR530/SR630)

DL360 Gen10 (SR630)

DL 360 Gen10 (SR630)

2.3

Процессор

Intel Xeon E-2236

Intel Xeon E-2276G/Intel Xeon 4214

Intel Xeon 5220

Intel Xeon 6240

Intel Xeon 8268

2.4

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

1

1

1

2

2

2.5

Объем ОЗУ

8 Gb

12 Gb

16 Gb

24 Gb

64Gb

2.6

HDD

От 3X500 SATA
(от 7200 rpm)

От 3X500 SATA
(от 7200 rpm)

От 3x300 Gb SAS (от 10000 rpm)

От 3x600 Gb SAS
(от 10000 rpm) 2x150Gb SSD

От 6x800 Gb SSD, 2x300 Gb M.2 SSD

2.7

RAID

No raid board

No raid board

HW Raid, от 1Gb cache+battery

HW Raid, от 1Gb cache+battery

HW Raid, от 2Gb Flash cache, поддержка RAID-5

3

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

3.1

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

по желанию

по желанию

+

+

+

3.2

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

по желанию

по желанию

+

+

+

3.3

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

Дополнительные 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

Сервер 1

2500

15000

Heavy

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

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

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

Роль

Интерфейс

Адрес

Порт

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

1

ecss1

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

bond2_ecss1_mgm

10.0.3.237/24

-

2

ecss1

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

bond1_ecss1_pa

10.0.3.238/24

-

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

3

ecss1

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

lo

127.0.0.1/24

5000

4

ecss1

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

lo

127.0.0.1/24

5040

5

ecss1

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

lo

127.0.0.1/24

3034

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

Программный коммутатор устанавливается на базе одной серверной платформы или их группы , у каждого отдельно взятого хоста должен быть задан внешний адрес для возможности обращения и управления в рамках обслуживаемой программным коммутатором сети. Адресный диапазон формируется исходя из количества серверов. В случае, когда программный коммутатор используется на одном хосте ему присваивается один сетевой адрес (например: 10.0.3.237 / 24). Затем планируется адресное пространство под протокольные адаптеры программного коммутатора. Адреса адаптеров являются внешними и следуют после назначенных адресов всех серверов. Например: 10.0.3.237 /24 — адрес сервера, тогда адрес адаптера — 10.0.3.238 /24. 4 сетевых интерфейса объединяются попарно в bonding интерфейсы, другими словами выполняется агрегирование интерфейсов по протоколу LACP. Таким образом интерфейсы eth0  и eth1 объединяются в интерфейс bond1_ecss1_pa.

Внутри серверной платформы существует адресная структура и используются внутренние адреса для взаимодействия между подсистемами (нодами) в кластере. Например: внутренний адрес для кластера на одном сервере:  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

Пример настройки файла ecss-netplan.yaml:

Netplan для интерфейсов сервера ecss1 (/etc/netpla/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_ecss1_pa: # Название bonding интерфейса !! В имени не может быть более 15 символов !!
interfaces: [eth0, eth1] # Секция определения связанного интерфейса ->
# -> !! Внимание после запятой обязательно наличие пробела !!
addresses: [10.0.3.238/24] # Секция определения IP адресов для связанного интерфейса
parameters: # Раздел определения параметров связанного интерфейса
mode: active-backup # Режим резервирования 1:1
mii-monitor-interval: 100
primary: eth0 # Секция определения основного интерфейса
optional: false
gateway4: 10.0.3.1 # Секция определения шлюза по умолчанию (интерфейс выхода в интернет)
bond2_ecss1_mgm:
interfaces: [eth2, eth3]
addresses: [10.0.3.237/24]
parameters:
mode: active-backup
mii-monitor-interval: 100
primary: eth2
optional: false
gateway4: 10.0.3.1 # Секция определения шлюза по умолчанию (интерфейс выхода в интернет)

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

Следующим разделом описываются агрегированные каналы — bonds. В нашем случае используется режим резерва 1 к 1 (active - backup) при котором второй интерфейс находится в резерве и не используется. Опционально определяются шлюзы для связи с внешним миром и адреса DNS серверов, а так же непосредственно IP адреса для каждого интерфейса.

ВАЖНО

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

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

→  Секция                                                                  |network

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

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

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

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

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

sudo netplan apply

Выведем настроенные интерфейсы с помощью ifconfig / ip a:

Вывод ifconfig для ecss1
bond1_ecss1_pa: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 10.0.3.238 netmask 255.255.255.0 broadcast 10.0.3.255
inet6 fe80::1b:41ff:feff:fb78 prefixlen 64 scopeid 0x20<link>
ether 02:1b:41:ff:fb:78 txqueuelen 1000 (Ethernet)
RX packets 36842 bytes 3630842 (3.6 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 24816 bytes 4234408 (4.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

bond2_ecss1_mgm: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 10.0.3.237 netmask 255.255.255.0 broadcast 10.0.3.255
inet6 fe80::e0a0:74ff:fe28:1c31 prefixlen 64 scopeid 0x20<link>
ether e2:a0:74:28:1c:31 txqueuelen 1000 (Ethernet)
RX packets 514023 bytes 1018818719 (1.0 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 62309 bytes 4533761 (4.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

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

Для установки системы 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"

Обратите внимание, что требуется указать верную версию операционной системы при добавлении репозитория 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 aptitude update
sudo aptitude upgrade

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

ВАЖНО

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

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

sudo aptitude install dnsmasq ntp tcpdump ssh vlan ethtool htop iotop mc minicom mtr-tiny nmap pptpd pv screen tftpd vim tshark cpanminus gnuplot

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

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

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

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

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

ВопросыОтветы
Выключить ежедневные обновления (Do you want turn off apt-daily update ?)Yes
Установить настройки по умолчанию для БД (Set DB config to default ?)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 локального сервера ( NTP: Set stratum for local server)5
Входной порт для портала абонента (Input port for subscriber portal)8080
Введите адрес MySQL БД (Input host for MySQL DB)127.0.0.1
Хост или имя хоста для доступа к данным в бд порталу абонентов (Input host or hostname for ecss_subscribers DB)sp.mysql.ecss
Имя пользователя для базы данных портала абонентов (Input username for ecss_subscribers DB)subscribers
Пароль для базы данных портала абонентов (Input password for ecss_subscribers DB)subscribers
Введите имя домена (виртуальной АТС) по умолчанию (Input default domain name)d.local
Введите адрес для доступа из портала абонента (Input IP address or hostname for SSW with http_terminal to connect from subscribers_portal)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
Адрес входного взаимодействия (Input trike cowboy url)127.0.0.1:8086
Адрес ecss-core (IP address of core)127.0.0.1
Установить утилиты для работы с cdrNo

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

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

sudo apt install ecss-media-server

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

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

Создать конфигурацию? ("Create configure")

No

sudo apt install ecss-restfs

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

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

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

No

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

No

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

No

Включить полное  логирование restfs (Turn on full debug log restfs)

No
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.3.237
#ListenAddress ::

<...>

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

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

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

system-status

┌─┬───────────────┬───────────────────────┬───────────────┬────────────┬──────┐
│ │ Node          │ Release               │ Erlang nodes  │Mnesia nodes│Uptime│
├─┼───────────────┼───────────────────────┼───────────────┼────────────┼──────┤
│ │ds1@ecss1      │ecss-ds.2.58      │ds1@ecss1      │ds1@ecss1   │36s   │
│ │mycelium1@ecss1│ecss-mycelium.2.58│mycelium1@ecss1│not running │4m 55s│
└─┴───────────────┴───────────────────────┴───────────────┴────────────┴──────┘

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

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

 Выходим из cocon выполняем перезагрузку подсистем 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 localhost default local true

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

admin@[mycelium1@ecss1]:/$ system-status

┌─┬───────────────┬─────────────────────────┬───────────────┬─────────────┬──────┐
│ │ Node │ Release │ Erlang nodes │Mnesia nodes │Uptime│
├─┼───────────────┼─────────────────────────┼───────────────┼─────────────┼──────┤
│ │core1@ecss1 │ecss-core.0.764 │core1@ecss1 │not running │2h 8m │
│ │ds1@ecss1 │ecss-ds.0.764 │ds1@ecss1 │ds1@ecss1 │2h 8m │
│ │megaco1@ecss1 │ecss-pa-megaco.0.764│megaco1@ecss1 │megaco1@ecss1│2h 16m│
│ │mycelium1@ecss1│ecss-mycelium.0.764 │mycelium1@ecss1│not running │2h 8m │
│ │sip1@ecss1 │ecss-pa-sip.0.764 |sip1@ecss1 │sip1@ecss1 │2h 8m │
└─┴───────────────┴─────────────────────────┴───────────────┴─────────────┴──────┘

All services are started.

Active media resource selected list specific:
┌─────────────┬──────────┬────────────┬───────────┬───────────┐
│ Node │ MSR │ MSR │ Cc-status │ Cc-uptime │
│─────────────┼──────────┼────────────┼───────────┼───────────┤
│ core1@ecss1 │ MSR.ecss1│ 3.14.0.247 │ connected │ 01:45:25 │
└─────────────┴──────────┴────────────┴───────────┴───────────┘

Производим настройку адаптера 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.3.238 

Property "ip_set" successfully changed from:

to
test_set: no ports set
test_set: sip1@ecss1 10.0.3.238
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

1

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

1.1

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

3000

5000

10000

20000

40000

1.2

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

500

800

1500

3000

6000

1.3

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

1500

2400

4500

9000

20000

2

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

2.1

Марка

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

HP (Lenovo)

2.2

Серия

DL20 Gen10 (SR250)

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

DL360 Gen10 (SR530/SR630)

DL360 Gen10 (SR630)

DL 360 Gen10 (SR630)

2.3

Процессор

Intel Xeon E-2236

Intel Xeon E-2276G/Intel Xeon 4214

Intel Xeon 5220

Intel Xeon 6240

Intel Xeon 8268

2.4

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

1

1

1

2

2

2.5

Объем ОЗУ

8 Gb

12 Gb

16 Gb

24 Gb

64Gb

2.6

HDD

От 3X500 SATA
(от 7200 rpm)

От 3X500 SATA
(от 7200 rpm)

От 3x300 Gb SAS (от 10000 rpm)

От 3x600 Gb SAS
(от 10000 rpm) 2x150Gb SSD

От 6x800 Gb SSD, 2x300 Gb M.2 SSD

2.7

RAID

No raid board

No raid board

HW Raid, от 1Gb cache+battery

HW Raid, от 1Gb cache+battery

HW Raid, от 2Gb Flash cache, поддержка RAID-5

3

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

3.1

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

по желанию

по желанию

+

+

+

3.2

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

по желанию

по желанию

+

+

+

3.3

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

Дополнительные 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

Сервер 1

2000

15000

Heavy

2Сервер 2    Heavy

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

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

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

Роль

Интерфейс

Адрес

Порт

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

1

ecss1

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

bond2_ecss1_mgm

10.0.3.237/24

2000

2

ecss2

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

bond2_ecss2_mgm

10.0.3.240/24

2000

3ecss1

Интерфейс программного адаптера хоста ecss1  (ecss_pa_sip)

bond1_ecss1_pa

--
4ecss2Интерфейс программного адаптера хоста ecss2 (ecss_pa_sip)

bond1_ecss2_pa

--
5ecss1Виртуальный адрес программного адаптера хоста ecss1VRRP:SIP1_Mr10.0.3.238/24-
6ecss2Виртуальный адрес программного адаптера хоста ecss2VRRP:SIP2_Mr10.0.3.241/24-
7ecss1Запасной виртуальный адрес программного адаптера хоста ecss2 на хосте ecss1VRRP:SIP2_Bup10.0.3.241/24-
8ecss2Запасной виртуальный адрес программного адаптера хоста ecss1 на хосте ecss2VRRP:SIP1_Bup10.0.3.238/24-

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

9ecss1Внутренний адрес хоста ecss1vlan2192.168.1.1/24-
10ecss2Внутренний адрес хоста ecss2vlan2192.168.1.2/24-
11

ecss1

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

vlan2

192.168.1.1/245000
12ecss2Адрес ядра (ecss-core)vlan2192.168.1.2/245000
13

ecss1

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

vlan2

192.168.1.1/245040
14ecss2

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

vlan2192.168.1.2/245040
15

ecss1

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

vlan2:mysql (VRRP)

192.168.1.10/243306

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

Программный коммутатор устанавливается на базе группы серверных платформ , у каждого отдельно взятого хоста должен быть задан внешний адрес для возможности обращения и управления в рамках обслуживаемой программным коммутатором сети. Адресный диапазон формируется исходя из количества хостов. В случае, когда программный коммутатор используется на нескольких хостах ему присваивается один сетевой адрес для одного хоста (например: 10.0.3.237 / 24 , 10.0.3.240 /24). Затем планируется адресное пространство под протокольные адаптеры программного коммутатора. Адреса адаптеров являются внешними и следуют после назначения адреса для каждого хоста. Например: 10.0.3.237 /24 — адрес первого хоста (ecss1), тогда адрес адаптера — 10.0.3.238 /24, аналогично для второго (ecss2) — 10.0.3.240/24 и 10.0.3.241/24.

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

Для всех нод кластера определяется единый адрес для обращения к базе данных ecss-mysql. Например: 192.168.1.10/24 Таким образом выполняется условие единообразия , при котором все ноды кластера имеют полностью одинаковые данные о текущем состоянии динамических составляющих программного коммутатора (например история вызовов). Резервирование интерфейсов выполняется с помощью объединения в bonding интерфейсы  нескольких каналов, другими словами выполняется агрегирование интерфейсов по протоколу LACP. На выходе имеем два агрегированных интерфейса: bond1_ecss1_pa, bond2_ecss1_mgm,  которые включают в себя несколько интерфейсы eth0, eth1 и eth2, eth3 соответственно, которые являются каналами к основному (switch1) и резервному (switch 2) коммутаторам. Резервирование адресов выполняется с помощью VRRP (keepalived) для MySQL и некоторых пакетов ecss-node. При данном резерве для интерфейса программного адаптера назначается виртуальный адрес, который в случае отказа одного из хостов будет восстановлен на другом, поэтому для каждого хоста имеется набор виртуальных интерфейсов, поверх основного агригированного канала. Так, для ecss1  имеем интерфейс VRRP:SIP1_Mr (Master) и запасной - VRRP:SIP2_Bup (Backup), который включается только в случае отказа соответствующего интерфейса на ecss2 (VRRP:SIP2_Mr) . Отдельно, для MySQL задается виртуальный адрес, который будет "переезжать" между хостами, при чем тот хост, который первым поднял сервер MySQL и становится мастером, таким образом адрес 192.168.1.10 является виртуальным и поднимается поверх интерфейса vlan2 по средствам виртуального интерфейса vlan2:mysql. Пакет ecss-restfs резервируется по средствам объединения хранилищ с использованием GlusterFS. Создается устойчивый кластер и задается директория которая будут реплицировать хосты между собой. 

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

  • ecss-node и ecss-mysql на разных хостах, mysql с резервом


    ecss1host-mysql-1host-mysql-2
    ecss-node192.168.1.1

    ecss-mysql
    192.168.1.2192.168.1.3
  • ecss-node и ecss-mysql на одном хосте, mysql с резервом


    ecss1host-mysql-1
    ecss-node192.168.1.1
    ecss-mysql192.168.1.1192.168.1.2
  • ecss-node и ecss-mysql на одном хосте, node с резервом mysql нет


    ecss1ecss2
    ecss-node192.168.1.1192.168.1.2
    ecss-mysql192.168.1.1
  • ecss-node и ecss-mysql на одном хосте, node с резервом и mysql с резервом


    ecss1ecss2
    ecss-node192.168.1.1192.168.1.2
    ecss-mysql192.168.1.1192.168.1.2

При этом ecss-node так же можно разбить на отдельные ноды (ecss-core, ecss-pa-sip и.др) и по специальной лицензии вынести на различные хосты.

В данном примере будет отработана схема:


ecss1ecss2
ecss-node192.168.1.1192.168.1.2
ecss-mysql192.168.1.1192.168.1.2

Настройка сетевых интерфейсов

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

Настройка netplan

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

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

#Netplan для первой ноды тестового программного коммутатора с резервированием

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

# Без пробелов система будет выдавать ошибку!

network:

  version: 2 # Версия netplan

  renderer: networkd # Исполнитель конфигураций netplan

  ethernets: # Раздел описания интерфейсов ethernet

    eth0: # Название интерфейса

      dhcp4: no # Отключаем на интерфейсе динамическое распределение IPv4 адреса

    eth1:

      dhcp4: no

    eth2:

      dhcp4: no

    eth3:

      dhcp4: no

  bonds: # Раздел описания связанных (bonding) интерфейсов

    bond1_ecss1_pa: # Название bonding интерфейса !! В имени не может быть более 15 символов !!

      interfaces: [eth0, eth1] # Секция определения связанного интерфейса ->

# -> !! Внимание после запятой обязательно наличие пробела !!

        parameters: # Раздел определения параметров связанного интерфейса

        mode: active-backup # Режим резервирования 1:1

        mii-monitor-interval: 100

      optional: false

      gateway4: 10.0.3.1 # Секция определения шлюза

      nameservers:

        addresses: [8.8.8.8, 8.8.4.4]

    bond2_ecss1_mgm:

      interfaces: [eth2, eth3]

      addresses: [10.0.3.237/24]

      parameters:

        mode: active-backup

        mii-monitor-interval: 100

      optional: false

      gateway4: 10.0.3.1

      nameservers:

        addresses: [8.8.8.8, 8.8.4.4]

  vlans: # Раздел описания vlan

    vlan2: # Внутреннее взаимодействие

    id: 2

    link: bond1_ecss1_pa

    addresses: [192.168.1.1/24]

    routes:

      - to: 192.168.1.2/24

        via: 192.168.1.1

        on-link: true

#Netplan для  второй ноды тестового программного коммутатора с резервированием

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

# Без пробелов система будет выдавать ошибку!

network:

  version: 2 # Версия netplan

  renderer: networkd # Исполнитель конфигураций netplan

  ethernets: # Раздел описания интерфейсов ethernet

    eth0: # Название интерфейса

      dhcp4: no # Отключаем на интерфейсе динамическое распределение IPv4 адреса

    eth1:

      dhcp4: no

    eth2:

      dhcp4: no

    eth3:

      dhcp4: no

  bonds: # Раздел описания связанных (bonding) интерфейсов

    bond1_ecss2_pa: # Название bonding интерфейса !! В имени не может быть более 15 символов !!

      interfaces: [eth0, eth1] # Секция определения связанного интерфейса ->

# -> !! Внимание после запятой обязательно наличие пробела !!

        parameters: # Раздел определения параметров связанного интерфейса

        mode: active-backup # Режим резервирования 1:1

        mii-monitor-interval: 100

      optional: false

      gateway4: 10.0.3.1 # Секция определения шлюза

      nameservers:

        addresses: [8.8.8.8, 8.8.4.4]

    bond2_ecss1_mgm:

      interfaces: [eth2, eth3]

      addresses: [10.0.3.240/24]

      parameters:

        mode: active-backup

        mii-monitor-interval: 100

      optional: false

      gateway4: 10.0.3.1

      nameservers:

        addresses: [8.8.8.8, 8.8.4.4]

   vlans: # Раздел описания vlan

    vlan2: # Внутреннее взаимодействие

    id: 2

    link: bond1_ecss2_pa

    addresses: [192.168.1.2/24]

    routes:

      - to: 192.168.1.1/24

        via: 192.168.1.2

        on-link: true

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

Следующим разделом описываются агрегированные каналы — bonds. В нашем случае используется режим резерва 1 к 1 (active - backup) при котором второй интерфейс находится в резерве и не используется. Опционально определяются шлюзы для связи с внешним миром и адреса DNS серверов. Для адреса управления хостом также определяется IP адрес (ecss 1— 10.0.3.237 /ecss2 — 10.0.3.240).  После описания агрегированных каналов, следует секция описания тегированного интерфейса vlan. В моем случае, vlan настраивается поверх существующего bonding интерфейса программного адаптера (bond1_ecssX_pa) и присваиваются соответствующие внутренние адреса для ecss1 и ecss2.  

ВАЖНО

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

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

→  Секция                                                                  |network

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

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

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

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

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

sudo netplan apply

Выведем настроенные интерфейсы с помощью ifconfig / ip a:

Вывод ifconfig для ecss1Вывод ifconfig для ecss2
ifconfig

bond1_ecss1_pa: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
ether 02:1b:41:ff:fb:78 txqueuelen 1000 (Ethernet)
RX packets 357 bytes 34806 (34.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 124 bytes 13532 (13.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

bond2_ecss1_mgm: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 10.0.3.237 netmask 255.255.255.0 broadcast 10.0.3.255
inet6 fe80::e0a0:74ff:fe28:1c31 prefixlen 64 scopeid 0x20<link>
ether e2:a0:74:28:1c:31 txqueuelen 1000 (Ethernet)
RX packets 331 bytes 34556 (34.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 48 bytes 5570 (5.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500

<...>

vlan2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::1b:41ff:feff:fb78 prefixlen 64 scopeid 0x20<link>
ether 02:1b:41:ff:fb:78 txqueuelen 1000 (Ethernet)
RX packets 77 bytes 4816 (4.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 80 bytes 8229 (8.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ifconfig

bond1_ecss2_pa: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
ether 36:10:28:73:63:01 txqueuelen 1000 (Ethernet)
RX packets 166 bytes 12852 (12.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 94 bytes 7220 (7.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

bond2_ecss2_mgm: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 10.0.3.240 netmask 255.255.255.0 broadcast 10.0.3.255
inet6 fe80::bc77:eaff:fe52:4d39 prefixlen 64 scopeid 0x20<link>
ether be:77:ea:52:4d:39 txqueuelen 1000 (Ethernet)
RX packets 139 bytes 10402 (10.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19 bytes 1458 (1.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500

<...>

vlan2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::3410:28ff:fe73:6301 prefixlen 64 scopeid 0x20<link>
ether 36:10:28:73:63:01 txqueuelen 1000 (Ethernet)
RX packets 49 bytes 3408 (3.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 77 bytes 5894 (5.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

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

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

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

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

nano /etc/hosts

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

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

Обращение к ecss2 с ecss1Обращение к ecss1 с ecss2

ping ecss2

PING ecss2 (192.168.1.2) 56(84) bytes of data.
64 bytes from ecss2 (192.168.1.2): icmp_seq=1 ttl=64 time=0.043 ms

ping ecss1

PING ecss1 (192.168.1.1) 56(84) bytes of data.
64 bytes from ecss1 (192.168.1.1): icmp_seq=1 ttl=64 time=0.043 ms

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

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

sudo su
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

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

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

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

sudo aptitude update
sudo aptitude upgrade

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

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

sudo aptitude install dnsmasq ntp tcpdump ssh vlan ethtool htop iotop mc minicom mtr-tiny nmap pptpd pv screen tftpd vim tshark cpanminus gnuplot

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

sudo aptitude install ifenslave-2.6 keepalived bridge-utils attr

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

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

sudo aptitude install ecss-mysql

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

ВопросыОтветы для ecss1Ответы для ecss2
Адресная маска для MySQL (IP pattern for MySQL permission)192.168.1.%192.168.1.%
Логин пользователя (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

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

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

После установки необходимо:

  • Открыть конфигурационный файл mysql: /etc/mysql/mysql.conf.d/mysqld.cnf и добавить туда следующую строку:

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

    bind-address =0.0.0.0

    Затем перезапустить сервис mysql:

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

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

    ssh-keygen
    ssh-copy-id tester@ecss2

    Такое же проделываем на хосте ecss2.

  • Запускаю скрипт репликации на ecss1:

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

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

ВопросыОтветы для ecss1Ответы для ecss2
Логин для доступа к БДrootroot
Пароль для доступа к БДPASSWORD 

PASSWORD 

Логин для пользователя репликацииreplicareplica
Пароль для пользователя репликацииreplicareplica
Адрес первого хоста 192.168.1.1192.168.1.1
Адрес второго хоста192.168.1.2192.168.1.2
Имя второго хостаecss2ecss2
Имя пользователя на втором хостеtestertester
Mediator IP127.0.0.1127.0.0.1
Порт SNMP162162
  • После работы скрипта можно проверить, что в MySQL создан пользователь replica@192.168.1.% и replica@% на обоих хостах

    mysql -uroot -ppassword 
    mysql> SELECT user,host FROM mysql.user

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

    +------------------+---------------+
    |           user |      host     |
    +------------------+---------------+
    | replica      |         %     |
    | replica        |192.168.1.% |
    +------------------+---------------+

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

    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

Создание VRRP для MySQL. Редактирование keepalived.conf

Следующий шаг — редактирование конфигурационного файла keepalived.conf

sudo nano /etc/keepalived/keepalived.conf 

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

Настройка keepalived.conf для ecss1 (/etc/keepalived/keepalived.conf)Настройка hosts для ecss2 (/etc/keepalived/keepalived.conf)

vrrp_script check_mysqld {

script "nc -z localhost 3306" # cheaper than pidof

interval 2 # check every 2 seconds

fall 1

rise 2

}


!-- MySQL ECSS1 BALANCER --
vrrp_instance MySQL {
state BACKUP
interface vlan2
virtual_router_id 226
priority 100
advert_int 1
smtp_alert
nopreempt
authentication {
auth_type PASS
auth_pass keepmysql
}
virtual_ipaddress {
192.168.1.10/24 dev vlan2 label vlan2:mysql
}
track_script {
check_mysqld
}
}

vrrp_script check_mysqld {

script "nc -z localhost 3306" # cheaper than pidof

interval 2 # check every 2 seconds

fall 1

rise 2

}


!-- MySQL ECSS2 BALANCER --
vrrp_instance MySQL {
state BACKUP
interface vlan2
virtual_router_id 226
priority 100
advert_int 1
smtp_alert
nopreempt
authentication {
auth_type PASS
auth_pass keepmysql
}
virtual_ipaddress {
192.168.1.10/24 dev vlan2 label vlan2:mysql
}
track_script {
check_mysqld
}
}

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

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

sudo systemctl restart keepalived.service 

Вызывая ifconfig после перезагрузки видим, что появился интерфейс vlan2:mysql на одном из хостов

ifconfig
<...>
vlan2:mysql: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 0.0.0.0
ether ca:d2:8a:13:3a:11 txqueuelen 1000 (Ethernet)

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

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

sudo aptitude install ecss-node

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

ВопросыОтветы для ecss1Ответы для ecss2
Выключить ежедневные обновления (Do you want turn off apt-daily update ?)YesYes
Установить настройки по умолчанию для БД (Set DB config to default ?)YesYes
Использовать настройки NTP для кластера (NTP: Do you want use settings for cluster ?)No Yes 
Установить приоритет NTP для кластера (NTP: Set stratum for cluster )-7
Внешний NTP сервер (External NTP servers through a space )ntp.ubuntu.com
Использовать локальный сервер? (NTP: Do you want use local server ? )NoYes
Адрес локального NTP  (NTP servers through a space)-192.168.1.1
Адреса и маски адресов которые должны иметь доступ к NTP (NTP: Addresses and Masks of Network, which must have access to the ntp through a space)192.168.1.0|255.255.255.0192.1681.0|255.255.255.0
Установить приоритет NTP локального сервера ( NTP: Set stratum for local server)55
Входной порт для портала абонента (Input port for subscriber portal)80808080
Введите адрес MySQL БД (Input host for MySQL DB)192.168.1.10192.168.1.10
Хост или имя хоста для доступа к данным в бд порталу абонентов (Input host or hostname for ecss_subscribers DB)sp.mysql.ecsssp.mysql.ecss
Имя пользователя для базы данных портала абонентов (Input username for ecss_subscribers DB)subscriberssubscribers
Пароль для базы данных портала абонентов (Input password for ecss_subscribers DB)subscriberssubscribers
Введите имя домена (виртуальной АТС) по умолчанию (Input default domain name)d.locald.local
Введите адрес для доступа из портала абонента (Input IP address or hostname for SSW with http_terminal to connect from subscribers_portal)127.0.0.1127.0.0.1
Порт WEB терминала (Input port SSW http_terminal)99999999
Логин для доступа к WEB терминалу (Input login for SSW http_terminal)adminadmin
Пароль для доступа к WEB терминалу (Input password for SSW http_terminal)PASSWORDPASSWORD
Адрес входного взаимодействия (Input trike cowboy url)127.0.0.1:8086127.0.0.1:8086
Адрес ecss-core (IP address of core)192.168.1.1192.168.1.2
Установить утилиты для работы с cdrNoNo

Настраиваем dnsmasq

Редактируем файлы ecss-cocon-mysql, ecss-dialer, ecss-statistic, ecss-tts, ecss-address-book-mysql, ecss-sp-mysql таким образом, что в каждом из них заменяем адрес на виртуальный адрес MySQL:

sudo nano /etc/dnsmasq.d/ecss-cocon-mysql

sudo nano /etc/dnsmasq.d/ecss-dialer

sudo nano /etc/dnsmasq.d/ecss-statistic

sudo nano /etc/dnsmasq.d/ecss-tts

sudo nano /etc/dnsmasq.d/ecss-address-book-mysql

sudo nano /etc/dnsmasq.d/ecss-sp-mysql
 Пример файла
address=/cocon.mysql.ecss/192.168.1.10

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

sudo systemctl restart dnsmasq.service

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

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

sudo aptitude install ecss-media-server ecss-web-conf ecss-restfs

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

sudo aptitude install ecss-media-server ecss-restfs

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

Вопросы ecss-media-serverОтветы для ecss1Ответы для ecss2
Создать конфигурацию (Create configure?)YesYes

Редактировать основную секцию? (Do you want configure the general section?)

YesYes
Установить уровень трассировки?(Do you want configure the log level?)YesYes
Установите уровень трассировки (Choose log level) (Чем больше значение, тем больше информации в логируемой трассировке)11
Редактировать транспортную секцию? (Do you want configure the transport section?)YesYes
Редактировать транспортный адрес? (Do you want configure transport bind-addr?)YesYes
Введите адрес (Enter)192.168.1.1192.168.1.2
Редактировать транспортный порт? (Do you want configure transport port?)YesYes
Введите порт (Enter)50405040
Редактировать медиа секцию? (Do you want configure the media section?)NoNo
Редактировать имя MSR при регистрации на ядре (core) ecss1 (Do you want configure MSR name (core1)?)YesYes
Введите имя (Enter)MSR.ecss1MSR.ecss2
Редактировать адрес для регистрации на ядре (core) ecss1? (Do you want configure ip (core1)?)YesYes
Введите адрес (Entrer)192.168.1.1192.168.1.1
Редактировать порт для регистрации на ядре (core) ecss1?(Do you want configure port (core1)?)YesYes
Введите порт (Entrer)50005000
Редактировать имя MSR при регистрации на ядре (core) ecss2 (Do you want configure MSR name (core2)?)YesYes
Введите имя (Enter)MSR.ecss1MSR.ecss2
Редактировать адрес для регистрации на ядре (core) ecss2? (Do you want configure ip (core2)?)YesYes
Введите адрес (Entrer)192.168.1.2192.168.1.2
Редактировать порт для регистрации на ядре (core) ecss2?(Do you want configure port (core2)?)YesYes
Введите порт (Entrer)50005000
Редактирование rtp интерфейса (Configure rtp interface)YesYes
Введите IP адрес (Enter real ip) (Вводим адрес виртуального интерфейса)10.0.3.23810.0.3.241

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

Настройка VRRP для ecss-node

Выполним настройку VRRP, для этого снова откроем файл keepalived.conf и внесем в него изменения, вид файла представлен ниже:

sudo nano /etc/keepalived/keepalived.conf 
Настройка keepalived.conf для ecss1 (/etc/keepalived/keepalived.conf)Настройка hosts для ecss2 (/etc/keepalived/keepalived.conf)

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

!-- PA - SIP ECSS1 VRRP MASTER--
vrrp_instance VI_SIP_61 {
state MASTER
interface vlan2
virtual_router_id 61
priority 100
advert_int 1
preempt_delay 60
unicast_src_ip 192.168.1.1
unicast_peer {
192.168.1.2
}
authentication {
auth_type PASS
auth_pass kassw2
}
virtual_ipaddress {
10.0.3.238/24 dev bond1_ecss1_pa label VRRP:SIP1_Mr
}
track_script {
chk_sip
}
}

!-- PA - SIP ECSS2 VRRP BACKUP --
vrrp_instance VI_SIP_62 {
state BACKUP
interface vlan2
virtual_router_id 62
priority 50
advert_int 1
smtp_alert
preempt_delay 60
unicast_src_ip 192.168.1.1
unicast_peer {
192.168.1.2
}
authentication {
auth_type PASS
auth_pass kassw2
}
virtual_ipaddress {
10.0.3.241/24 dev bond1_ecss1_pa label VRRP:SIP2_Bup
}
}

include ecss-mysql-replication.conf

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


!-- PA - SIP ECSS1VRRP BACKUP --
vrrp_instance VI_SIP_61 {
state BACKUP
interface vlan2
virtual_router_id 61
priority 50
advert_int 1
preempt_delay 60
unicast_src_ip 192.168.1.2
unicast_peer {
192.168.1.1
}

authentication {
auth_type PASS
auth_pass kassw2
}
virtual_ipaddress {
10.0.3.238/24 dev bond1_ecss2_pa label VRRP:SIP1_Bup
}
}


!-- PA - SIP ECSS2 VRRP MASTER --
vrrp_instance VI_SIP_62 {
state MASTER
interface vlan2
virtual_router_id 62
priority 100
advert_int 1
smtp_alert
preempt_delay 60
unicast_src_ip 192.168.1.2
unicast_peer {
192.168.1.1
}
authentication {
auth_type PASS
auth_pass kassw2
}
virtual_ipaddress {
10.0.3.241/24 dev bond1_ecss2_pa label VRRP:SIP2_Mr
}
track_script {
chk_sip
}
}

include ecss-mysql-replication.conf

Настройка ecss-mysql-replication.conf для ecss1 (/etc/keepalived/ecss-mysql-replication.conf)Настройка ecss-mysql-replication.conf для ecss2 (/etc/keepalived/ecss-mysql-replication.conf)

vrrp_script check_mysqld {

script "nc -z localhost 3306" # cheaper than pidof

interval 2 # check every 2 seconds

fall 1

rise 2

}


!-- MySQL ECSS1 BALANCER –
vrrp_instance MySQL {
state BACKUP
interface vlan2
virtual_router_id 226
priority 100
advert_int 1
smtp_alert
nopreempt
authentication {
auth_type PASS
auth_pass keepmysql
}
virtual_ipaddress {
192.168.1.10/24 dev vlan2 label vlan2:mysql
}
track_script {
check_mysqld
}
}

vrrp_script check_mysqld {

script "nc -z localhost 3306" # cheaper than pidof

interval 2 # check every 2 seconds

fall 1

rise 2

}


!-- MySQL ECSS2 BALANCER --
vrrp_instance MySQL {
state BACKUP
interface vlan2
virtual_router_id 226
priority 100
advert_int 1
smtp_alert
nopreempt
authentication {
auth_type PASS
auth_pass keepmysql
}
virtual_ipaddress {
192.168.1.10/24 dev vlan2 label vlan2:mysql
}
track_script {
check_mysqld
}
}

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

Выполняем перезапуск keepalived

sudo systemctl restart keepalived.service

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

Проверка состояния интерфейсов для ecss1 (ip a)Проверка состояния интерфейсов для ecss2 (ip a)
ip a

3: bond1_ecss1_pa: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether ca:d2:8a:13:3a:11 brd ff:ff:ff:ff:ff:ff

inet 10.0.3.238/24 scope global VRRP:SIP1_Mr

4: vlan2@bond1_ecss1_pa: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether ca:d2:8a:13:3a:11 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.1/24 brd 192.168.1.255 scope global vlan2

inet 192.168.1.10/24 scope global secondary vlan2:mysql

ip a

3: bond1_ecss2_pa: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether a2:58:25:2b:22:28 brd ff:ff:ff:ff:ff:ff

inet 10.0.3.241/24 scope global VRRP:SIP2_Mr

inet 10.0.3.100/24 scope global secondary VRRP:TC_Bup

4: vlan2@bond1_ecss2_pa: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether a2:58:25:2b:22:28 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.2/24 brd 192.168.1.255 scope global vlan2

Балансировка интерфейса MySQL выполняется по первенству, тот интерфейс, который быстрее был проверен получает первым виртуальный адрес. Резерв работает при отключении одного из интерфейсов, тогда адрес передается на другой хост. Например если остановить keepalived на одном из хостов, можно увидеть, что адреса "переехали" на другой хост:

Проверка состояния интерфейсов для ecss1 в случае потери ecss2 (ip a)Проверка состояния интерфейсов для ecss2 (ip a)
ip a

3: bond1_ecss1_pa: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether ca:d2:8a:13:3a:11 brd ff:ff:ff:ff:ff:ff

inet 10.0.3.238/24 scope global VRRP:SIP1_Mr

inet 10.0.3.100/24 scope global secondary VRRP:TC_Bup

inet 10.0.3.241/24 scope global secondary VRRP:SIP2_Bup

4: vlan2@bond1_ecss1_pa: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether ca:d2:8a:13:3a:11 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.1/24 brd 192.168.1.255 scope global vlan2

inet 192.168.1.10/24 scope global secondary vlan2:mysql

ip a

3: bond1_ecss2_pa: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether a2:58:25:2b:22:28 brd ff:ff:ff:ff:ff:ff

4: vlan2@bond1_ecss2_pa: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether a2:58:25:2b:22:28 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.2/24 brd 192.168.1.255 scope global vlan2



Дальнейшая настройка программного коммутатора

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},           %% Здесь необходимо установить имя кластера для обоих хостов. Имя кластера произвольное и должно быть одинаково на обоих хостах
         %{cluster_nodes, []},                          %% additional nodes
         %{tcp_port, 5672},
         {compress_module, elx_data_nif}, %% elx_data_nif | elx_data
         {session_gc_timeout, 3000},
         {queue_gc_timeout, infinity}
         %{info_realm, {local, "/ssw", "ssw", "ssw", 1, [{localhost, 0, {host, "localhost"}, 5672, 10}]}},
         %{bind_ip_addresses, [{127,0,0,1}]} %% do not forget to include lo interface
    ]},
<...>

ecss-broker

Настраиваем ecss-broker для возможности регистрации нод на соседнем хосте:

sudo nano /etc/dnsmasq.d/ecss-broker
Настройка ecss-broker для ecss1  (/etc/dnsmasq.d/ecss-broker)Настройка ecss-broker для ecss2 (/etc/dnsmasq.d/ecss-broker)
address=/primary.broker.ecss/192.168.1.1
address=/secondary.broker.ecss/192.168.1.2
address=/primary.broker.ecss/192.168.1.1
address=/secondary.broker.ecss/192.168.1.2

ВАЖНО

Нельзя подставлять значения виртуальных адресов, сконфигурированных keepalived, для primary.broker и secondary.broker. 

epmd

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

systemctl edit epmd.service

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

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

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

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 192.168.1.2

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

sudo gluster peer status

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

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

sudo gluster volume create ecss_volume replica 2 transport tcp 192.168.1.1:/var/lib/ecss/glusterfs 192.168.1.2:/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: 192.168.1.1:/var/lib/ecss/glusterfs
Brick2: 192.168.1.2:/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

snpmd

Настройка 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.3.237
#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.3.240
#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.4.316       │ds1@ecss1      │ds1@ecss1    │0h 9m │
│ │mycelium1@ecss1│ecss-mycelium-3.14.4.316 │mycelium1@ecss1│not running  │0h 9m │
└─┴───────────────┴─────────────────────────┴───────────────┴─────────────┴──────┘

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

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

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

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

Стартуем на втором хосте:

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

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

ssh admin@localhost -p 8023
password: password

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

admin@mycelium1@ecss1:/$ system-status 
Checking...
┌─┬───────────────┬─────────────────────────┬───────────────────────────────┬───────────────────────────┬───────┐
│ │     Node      │         Release         │         Erlang nodes          │       Mnesia nodes        │Uptime │
├─┼───────────────┼─────────────────────────┼───────────────────────────────┼───────────────────────────┼───────┤
│ │core1@ecss1    │ecss-core-3.14.4.316     │core1@ecss1,core1@ecss2        │not running                │34m 28s│
│ │core1@ecss2    │ecss-core-3.14.4.316     │core1@ecss1,core1@ecss2        │not running                │6m     │
│ │ds1@ecss1      │ecss-ds-3.14.4.316       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2        │34m 29s│
│ │ds1@ecss2      │ecss-ds-3.14.4.316       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2        │6m     │
│ │md1@ecss1      │ecss-mediator-3.14.4.316 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2        │33m 54s│
│ │md1@ecss2      │ecss-mediator-3.14.4.316 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2        │6m     │
│ │megaco1@ecss1  │ecss-pa-megaco-3.14.4.316│megaco1@ecss1,megaco1@ecss2    │megaco1@ecss1,megaco1@ecss2│33m 35s│
│ │megaco1@ecss2  │ecss-pa-megaco-3.14.4.316│megaco1@ecss1,megaco1@ecss2    │megaco1@ecss1,megaco1@ecss2│6m     │
│ │mycelium1@ecss1│ecss-mycelium-3.14.4.316 │mycelium1@ecss1,mycelium1@ecss2│not running                │34m 49s│
│ │mycelium1@ecss2│ecss-mycelium-3.14.4.316 │mycelium1@ecss1,mycelium1@ecss2│not running                │6m     │
│ │sip1@ecss1     │ecss-pa-sip-3.14.4.316   │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2      │33m 54s│
│ │sip1@ecss2     │ecss-pa-sip-3.14.4.316   │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.4.26 │ connected │ 00:32:03  │
│             │ MSR.ecss2 │ 3.14.4.26 │ connected │ 00:23:56  │
│ core1@ecss2 │ MSR.ecss1 │ 3.14.4.26 │ connected │ 00:02:39  │
│             │ MSR.ecss2 │ 3.14.4.26 │ 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.3.238 
Property "ip_set" successfully changed from:

          
to
test_set: no ports set
test_set: sip1@ecss1 10.0.3.238
test_set: dscp 0.

          
cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss2 ip = 10.0.3.241
Property "ip_set" successfully changed from:

          
to
test_set: no ports set
test_set: sip1@ecss1 10.0.3.238
test_set: sip1@ecss2 10.0.3.241
test_set: 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. В появившемся диалоговом окне доступны следующие настройки:

Error: Page Not Found

Введите название домена, например "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.3.238


Рисунок 14 — Назначение IP-адреса в настройках SIP адаптера для одного адаптера

  • Для системы с резервированием укажите 10.0.3.238 и 10.0.3.241

Рисунок 15 — Назначение группы IP-адресов в настройках SIP адаптера для двух адаптеров

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

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

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

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

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

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

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

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

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

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

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

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

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

->

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

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

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

За настройку маршрутизации в системе отвечает приложение "Менеджер маршрутизации" ("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_dom";
  • Регистрация — если используется транковая то требуется включить данный параметр, в примере она не используется;
  • Хост — 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 и rule 3 настроить соответствующие результаты маршрутизации, для этого:

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

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

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

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

  • Произвести установку услуг через cocon;
  • Произвести добавление услуг для домена в список доступа (access-list) через cocon;
  • Далее, любая услуга в списке доступа становится доступна для применения на абоненте или транке.

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

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

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

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

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

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

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

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

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

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