3.14.0 Первоначальная установка системы с резервированием в кластере из двух серверов
Исходные данные
Исходные данные
В данном разделе использованы специфичные для данного продукта термины, ознакомиться с ними можно здесь.
Техническое задание:
Требуется интеграция программного коммутатора 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 | От 3X500 SATA | От 3x300 Gb SAS (от 10000 rpm) | От 3x600 Gb SAS | От 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 |
3 | ecss1 | Интерфейс программного адаптера хоста ecss1 (ecss_pa_sip) | bond1_ecss1_pa | - | - |
4 | ecss2 | Интерфейс программного адаптера хоста ecss2 (ecss_pa_sip) | bond1_ecss2_pa | - | - |
5 | ecss1 | Виртуальный адрес программного адаптера хоста ecss1 | VRRP:SIP1_Mr | 10.0.3.238/24 | - |
6 | ecss2 | Виртуальный адрес программного адаптера хоста ecss2 | VRRP:SIP2_Mr | 10.0.3.241/24 | - |
7 | ecss1 | Запасной виртуальный адрес программного адаптера хоста ecss2 на хосте ecss1 | VRRP:SIP2_Bup | 10.0.3.241/24 | - |
8 | ecss2 | Запасной виртуальный адрес программного адаптера хоста ecss1 на хосте ecss2 | VRRP:SIP1_Bup | 10.0.3.238/24 | - |
Внутренние адреса программного коммутатора | |||||
9 | ecss1 | Внутренний адрес хоста ecss1 | vlan2 | 192.168.1.1/24 | - |
10 | ecss2 | Внутренний адрес хоста ecss2 | vlan2 | 192.168.1.2/24 | - |
11 | ecss1 | Адрес ядра (ecss-core) | vlan2 | 192.168.1.1/24 | 5000 |
12 | ecss2 | Адрес ядра (ecss-core) | vlan2 | 192.168.1.2/24 | 5000 |
13 | ecss1 | Адрес медиа - сервера (ecss-media-server (MSR)) | vlan2 | 192.168.1.1/24 | 5040 |
14 | ecss2 | Адрес медиа - сервера (ecss-media-server (MSR)) | vlan2 | 192.168.1.2/24 | 5040 |
15 | ecss1 | Виртуальный адрес базы данных MySQL (ecss-mysql) | vlan2:mysql (VRRP) | 192.168.1.10/24 | 3306 |
Рисунок 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 с резервом
ecss1 host-mysql-1 host-mysql-2 ecss-node 192.168.1.1 ecss-mysql 192.168.1.2 192.168.1.3
ecss-node и ecss-mysql на одном хосте, mysql с резервом
ecss1 host-mysql-1 ecss-node 192.168.1.1 ecss-mysql 192.168.1.1 192.168.1.2
ecss-node и ecss-mysql на одном хосте, node с резервом mysql нет
ecss1 ecss2 ecss-node 192.168.1.1 192.168.1.2 ecss-mysql 192.168.1.1
ecss-node и ecss-mysql на одном хосте, node с резервом и mysql с резервом
ecss1 ecss2 ecss-node 192.168.1.1 192.168.1.2 ecss-mysql 192.168.1.1 192.168.1.2
При этом ecss-node так же можно разбить на отдельные ноды (ecss-core, ecss-pa-sip и.др) и по специальной лицензии вынести на различные хосты.
В данном примере будет отработана схема:
ecss1 | ecss2 | |
---|---|---|
ecss-node | 192.168.1.1 | 192.168.1.2 |
ecss-mysql | 192.168.1.1 | 192.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 bond2_ecss1_mgm: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 eth0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 <...> vlan2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 | ifconfig bond1_ecss2_pa: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 bond2_ecss2_mgm: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 eth0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 <...> vlan2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 |
Настройка /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 | nano /etc/hosts 127.0.0.1 localhost # Адрес локальной петли, используется некоторыми сервисами ecss |
Теперь, если вызвать утилиту ping на ecssX сможет обратиться к соседнему серверу:
Обращение к ecss2 с ecss1 | Обращение к ecss1 с ecss2 |
---|---|
ping ecss2 PING ecss2 (192.168.1.2) 56(84) bytes of data. | ping ecss1 PING ecss1 (192.168.1.1) 56(84) bytes of data. |
Обновление программного обеспечения операционной системы
Для установки системы ECSS-10 необходимо добавить репозиторий ЭЛТЕКС:
sudo su |
Далее необходимо выполнить импорт ключа командой:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 33CB2B750F8BB6A5 |
Для обновления ОС необходимо выполнить команды:
sudo aptitude update |
Установка и настройка программного обеспечения
Устанавливаем все предложенные пакеты:
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) | root | root |
Пароль пользователя MySQL (Password for MySQL root) | PASSWORD | PASSWORD |
Изменение пути по умолчанию - согласиться с изменением конфигурационного файла для внесения пути до баз данных ecss-mysql введя "Y".
Базы данных mysql, используемых системой ECSS-10, после установки, будут храниться по пути /var/lib/ecss-mysql. Проверяем наличие файлов в папке:
ls -l /var/lib/ecss-mysql/ |
Проверяем, что сервер запущен:
sudo systemctl status mysql ● mysql.service - MySQL Community Server |
После установки необходимо:
Открыть конфигурационный файл 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 |
---|---|---|
Логин для доступа к БД | root | root |
Пароль для доступа к БД | PASSWORD | PASSWORD |
Логин для пользователя репликации | replica | replica |
Пароль для пользователя репликации | replica | replica |
Адрес первого хоста | 192.168.1.1 | 192.168.1.1 |
Адрес второго хоста | 192.168.1.2 | 192.168.1.2 |
Имя второго хоста | ecss2 | ecss2 |
Имя пользователя на втором хосте | tester | tester |
Mediator IP | 127.0.0.1 | 127.0.0.1 |
Порт SNMP | 162 | 162 |
После работы скрипта можно проверить, что в 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 { !-- MySQL ECSS1 BALANCER -- | vrrp_script check_mysqld { !-- MySQL ECSS2 BALANCER -- |
В данной конфигурации мы задаем ID для виртуального маршрутизатора, который будет являться балансером для своего хоста. Важно, чтобы virtual_router_id, auth_type, auth_pass совпадали у обоих хостов.
После редактирования необходимо перезапустить сервис keepalived.
sudo systemctl restart keepalived.service |
Вызывая ifconfig после перезагрузки видим, что появился интерфейс vlan2:mysql на одном из хостов
ifconfig |
Установка пакета ecss-node
Устанавливаем пакет ecss-node-3.14
sudo aptitude install ecss-node-3.14 |
Во время установки будет предложено настроить некоторые параметры, пример ответов следует ниже:
Вопросы | Ответы для ecss1 | Ответы для ecss2 |
---|---|---|
Выключить ежедневные обновления (Do you want turn off apt-daily update ?) | Yes | Yes |
Установить настройки по умолчанию для БД (Set DB config to default ?) | Yes | Yes |
Использовать настройки 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 ? ) | No | Yes |
Адрес локального 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.0 | 192.1681.0|255.255.255.0 |
Установить приоритет NTP локального сервера ( NTP: Set stratum for local server) | 5 | 5 |
Входной порт для портала абонента (Input port for subscriber portal) | 8080 | 8080 |
Введите адрес MySQL БД (Input host for MySQL DB) | 192.168.1.10 | 192.168.1.10 |
Хост или имя хоста для доступа к данным в бд порталу абонентов (Input host or hostname for ecss_subscribers DB) | sp.mysql.ecss | sp.mysql.ecss |
Имя пользователя для базы данных портала абонентов (Input username for ecss_subscribers DB) | subscribers | subscribers |
Пароль для базы данных портала абонентов (Input password for ecss_subscribers DB) | subscribers | subscribers |
Введите имя домена (виртуальной АТС) по умолчанию (Input default domain name) | d.local | d.local |
Введите адрес для доступа из портала абонента (Input IP address or hostname for SSW with http_terminal to connect from subscribers_portal) | 127.0.0.1 | 127.0.0.1 |
Порт WEB терминала (Input port SSW http_terminal) | 9999 | 9999 |
Логин для доступа к WEB терминалу (Input login for SSW http_terminal) | admin | admin |
Пароль для доступа к WEB терминалу (Input password for SSW http_terminal) | PASSWORD | PASSWORD |
Адрес входного взаимодействия (Input trike cowboy url) | 127.0.0.1:8086 | 127.0.0.1:8086 |
Адрес ecss-core (IP address of core) | 192.168.1.1 | 192.168.1.2 |
Установить утилиты для работы с cdr | No | No |
Настраиваем 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 |
Пример файла |
---|
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?) | Yes | Yes |
Редактировать основную секцию? (Do you want configure the general section?) | Yes | Yes |
Установить уровень трассировки?(Do you want configure the log level?) | Yes | Yes |
Установите уровень трассировки (Choose log level) (Чем больше значение, тем больше информации в логируемой трассировке) | 1 | 1 |
Редактировать транспортную секцию? (Do you want configure the transport section?) | Yes | Yes |
Редактировать транспортный адрес? (Do you want configure transport bind-addr?) | Yes | Yes |
Введите адрес (Enter) | 192.168.1.1 | 192.168.1.2 |
Редактировать траснспортный порт? (Do you want configure transport port?) | Yes | Yes |
Введите порт (Enter) | 5040 | 5040 |
Редактировать медиа секцию? (Do you want configure the media section?) | No | No |
Редактировать имя MSR при регистрации на ядре (core) ecss1 (Do you want configure MSR name (core1)?) | Yes | Yes |
Введите имя (Enter) | MSR.ecss1 | MSR.ecss2 |
Редактировать адрес для регистрации на ядре (core) ecss1? (Do you want configure ip (core1)?) | Yes | Yes |
Введите адрес (Entrer) | 192.168.1.1 | 192.168.1.1 |
Редактировать порт для регистрации на ядре (core) ecss1?(Do you want configure port (core1)?) | Yes | Yes |
Введите порт (Entrer) | 5000 | 5000 |
Редактировать имя MSR при регистрации на ядре (core) ecss2 (Do you want configure MSR name (core2)?) | Yes | Yes |
Введите имя (Enter) | MSR.ecss1 | MSR.ecss2 |
Редактировать адрес для регистрации на ядре (core) ecss2? (Do you want configure ip (core2)?) | Yes | Yes |
Введите адрес (Entrer) | 192.168.1.2 | 192.168.1.2 |
Редактировать порт для регистрации на ядре (core) ecss2?(Do you want configure port (core2)?) | Yes | Yes |
Введите порт (Entrer) | 5000 | 5000 |
Редактирование rtp интерфейса (Configure rtp interface) | Yes | Yes |
Введите IP адрес (Enter real ip) (Вводим адрес виртуального интерфейса) | 10.0.3.238 | 10.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 { vrrp_script chk_sip { | global_defs { vrrp_script chk_sip { vrrp_script check_mysqld { authentication {
!-- MySQL ECSS2 BALANCER -- |
В данном случае мы добавили поддержку виртуальных интерфейсов со связью 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 -*- |
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 |
Далее производим создание кластера для репликации, запускаем репликацию и смотрим ее статус:
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 |
Таким образом статус репликации будет выглядеть следующим образом:
Volume Name: ecss_volume |
Монитируем раздел 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 |
Проверяем, что раздел смонитровался:
df -h <...> |
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 # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with Port 2000 <...> | # This is the sshd server system-wide configuration file. See # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with Port 2000 <...> |
Перезапустим ssh.
systemctl restart ssh.service |
Настройка кластера пакетов ecss-node
Запускаем необходимые сервисы.
ВАЖНО
Перед началом работы проверьте наличие Token в системе.Запускаем пакеты ecss-mycelium и ecss-ds на первом хосте:
sudo systemctl start ecss-mycelium |
Переходим в CLI:
ssh admin@localhost -p 8023 |
Проверяем состояние системы
system-status
|
Далее необходимо загрузить паспорт и лицензии в систему:
cluster/storage/ds1/licence/set-passport <ssw passport> |
Выходим и стартуем остальные сервисы на первом хосте:
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 |
После того как все будут запущены, ноды какое-то время будут устанавливать связь. Как только все ноды загрузятся в system-status будет следующий вывод:
system-status
|
Видно, что ноды вошли в кластер и 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 |
Далее создаем домен и присваиваем ему созданную группу (IP-set) настроек SIP адапетера:
domain/declare test_domain --add-domain-admin-privileges --add-domain-user-privileges |
После создания домена настраиваем: