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

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

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

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

Требуется интеграция программного коммутатора 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

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

Программный коммутатор устанавливается на базе группы серверных платформ , у каждого отдельно взятого хоста должен быть задан внешний адрес для возможности обращения и управления в рамках обслуживаемой программным коммутатором сети. Адресный диапазон формируется исходя из количества хостов. В случае, когда программный коммутатор используется на нескольких хостах ему присваивается один сетевой адрес для одного хоста (например: 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-3.14

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

sudo aptitude install ecss-mysql-3.14

Во время установки настройщик задаст вопросы, ответы указаны в таблице ниже. Обратите внимание, что пароль является одинаковым для обоих хостов на которых устанавливается 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

Следующий шаг - редактирование конфигурационного файла keepalive.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 "killall -0 mysqld" # cheaper than pidof
interval 1 # check every 1 seconds
}

!-- 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
}
notify_master /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_master.sh
notify_backup /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_backup.sh
}

vrrp_script check_mysqld {
script "killall -0 mysqld" # cheaper than pidof
interval 1 # check every 1 seconds
}

!-- 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
}
notify_master /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_master.sh
notify_backup /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_backup.sh
}

В данной конфигурации мы задаем 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-3.14

sudo aptitude install ecss-node-3.14

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

ВопросыОтветы для 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-3.14 ecss-web-conf-3.14 ecss-restfs-3.14

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

sudo aptitude install ecss-media-server-3.14 ecss-restfs-3.14

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

Вопросы ecss-media-server-3.14Ответы для 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)

global_defs {
set local_addr_v2 = 192.168.1.1
set peer_addr_v2 = 192.168.1.2
}

vrrp_script chk_sip {
script "/usr/bin/ecss_pa_sip_port 65535"
interval 2
timeout 2
}
vrrp_script check_mysqld {
script "nc -z localhost 3306"
interval 2 # check every 2 seconds
}

!-- 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 $local_addr_v2
unicast_peer {
$peer_addr_v2
}

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 $local_addr_v2
unicast_peer {
$peer_addr_v2
}
authentication {
auth_type PASS
auth_pass kassw2
}
virtual_ipaddress {
10.0.3.241/24 dev bond1_ecss1_pa label VRRP:SIP2_Bup
}
}

!-- 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
}
notify_master /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_master.sh
notify_backup /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_backup.sh
}

global_defs {
set local_addr_v2 =192.168.1.2
set peer_addr_v2 =192.168.1.1
}

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

vrrp_script check_mysqld {
script "nc -z localhost 3306"
interval 2 # check every 2 seconds
}

!-- 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 $local_addr_v2
unicast_peer {
$peer_addr_v2
}

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 $local_addr_v2
unicast_peer {
$peer_addr_v2
}
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
}
}

!-- 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
}
notify_master /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_master.sh
notify_backup /usr/lib/ecss/ecss-scripts/mysql-replication/ecss_reset_mysql_events_to_backup.sh
}

В данном случае мы добавили поддержку виртуальных интерфейсов со связью 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},
{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 apt 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

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

system-status

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

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

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 будет следующий вывод:

system-status

┌─┬───────────────┬────────────────────────┬───────────────────────────────┬───────────────────────────┬───────┐
│ │ Node          │ Release                │ Erlang nodes                  │ Mnesia nodes              │Uptime │
├─┼───────────────┼────────────────────────┼───────────────────────────────┼───────────────────────────┼───────┤
│ │core1@ecss1    │ecss-core-3.14.2.58     │core1@ecss1,core1@ecss2        │not running                │1h 4m  │
│ │core1@ecss2    │ecss-core-3.14.2.58     │core1@ecss1,core1@ecss2        │not running                │4m 16s │
│ │ds1@ecss1      │ecss-ds-3.14.2.58       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2        │1h 4m  │
│ │ds1@ecss2      │ecss-ds-3.14.2.58       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2        │7m 13s │
│ │md1@ecss1      │ecss-mediator-3.14.2.58 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2        │2m 45s │
│ │md1@ecss2      │ecss-mediator-3.14.2.58 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2        │4m 27s │
│ │megaco1@ecss1  │ecss-pa-megaco-3.14.2.58│megaco1@ecss1,megaco1@ecss2    │megaco1@ecss1,megaco1@ecss2│3m 26s │
│ │megaco1@ecss2  │ecss-pa-megaco-3.14.2.58│megaco1@ecss1,megaco1@ecss2    │megaco1@ecss1,megaco1@ecss2│22m 24s│
│ │mycelium1@ecss1│ecss-mycelium-3.14.2.58 │mycelium1@ecss1,mycelium1@ecss2│not running                │1h 4m  │
│ │mycelium1@ecss2│ecss-mycelium-3.14.2.58 │mycelium1@ecss1,mycelium1@ecss2│not running                │25m 24s│
│ │sip1@ecss1     │ecss-pa-sip-3.14.2.58   │sip1@ecss1                     │sip1@ecss1                 │1h 4m  │
│ │sip1@ecss2     │ecss-pa-sip-3.14.2.58   │sip1@ecss2                     │sip1@ecss2                 │47m 54s│
└─┴───────────────┴────────────────────────┴───────────────────────────────┴───────────────────────────┴───────┘

All services are started.

Active media resource selected list specific:
┌─────────────┬───────────┬──────────┬───────────┬───────────┐
│ Node        │ MSR       │ MSR      │ Cc-status │ Cc-uptime │
│             │           │ version  │           │           │
├─────────────┼───────────┼──────────┼───────────┼───────────┤
│ core1@ecss1 │ MSR.ecss1 │ 3.14.2.7 │ connected │ 01:03:01  │
│             │ MSR.ecss2 │ 3.14.2.7 │ connected │ 00:22:07  │
│ core1@ecss2 │ MSR.ecss1 │ 3.14.2.7 │ connected │ 00:03:11  │
│             │ MSR.ecss2 │ 3.14.2.7 │ connected │ 00:03:12  │
└─────────────┴───────────┴──────────┴───────────┴───────────┘

Видно, что ноды вошли в кластер и 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"].

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