Варианты выполнения обновления

В версии SSW 3.14  используется ОС Astra Linux 1.7, а в версии SSW 3.18  используется ОС Astra Linux 1.8. Процедуры обновления  ОС Astra Linux версии 1.7 на версию 1.8 не предусмотрено.
hissys
Поэтому выполнить обновление на новую версию без прерывания трафика не представляется возможным.

Поэтому обновление выполняется установкой ОС и ПО на новые хосты.

На отдельных хостах (физических или виртуальных) выполнить полную новую установку ОС и затем установку SSW с использованием временных IP адресов. Во время установки так же потребуется выполнить копирование баз данных (Mnesia + MySQL) со старого хоста SSW на новые, с последующей миграцией базы данных MySQL в PostgreSQL. По окончанию установки нового SSW выполняется замена временных IP адресов на адреса старого SSW ( в этот момент старый SSW отключается) и конфигурация файлов MSR. После этого новый SSW начинает обслуживать трафик. 


ECSS-10 в версии 3.17 поддерживает два типа лицензирования – файловая лицензия (с использованием токена или без него) и ELM-лицензия. В зависимости от типа лицензирования при обновлении будут выполняться разные команды.

Проверить, какой тип используется на вашем ssw, можно следующей командой:

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

/cluster/storage/ds1/licence/list-licence 
CODE

При использовании файловой лицензии вывод будет:

файловая лицензия

/cluster/storage/ds1/licence/list-licence
┌──┬───────────────────┬────────────┬──────┬───────────────────┬────────────────────┬────────────┐
│Id│Creation date(UTC) │   SSW ID   │Active│    Description    │Expiration date(UTC)│ Time left  │
├──┼───────────────────┼────────────┼──────┼───────────────────┼────────────────────┼────────────┤
│1 │31.10.2025 14:16:00│ECSS 010070 │*     │Eltex SC softswitc │31.12.2026 23:59:59 │224d 21h 31m│
│0 │                   │ECSS DEFAULT│      │Default licence    │                    │            │
└──┴───────────────────┴────────────┴──────┴───────────────────┴────────────────────┴────────────┘
CODE

При использовании ELM-лицензии вывод будет:

ELM лицензия

/cluster/storage/ds1/licence/list-licence                  
┌──┬───────────────────┬────────────┬──────┬────────────────┬────────────────────┬────────────┐
│Id│Creation date(UTC) │   SSW ID   │Active│  Description   │Expiration date(UTC)│ Time left  │
├──┼───────────────────┼────────────┼──────┼────────────────┼────────────────────┼────────────┤
│1 │02.12.2025 13:51:39│ECSS2000000 │*     │ECSS ELM License│02.12.2026 13:51:39 │364d 11h 47m│
│0 │01.01.1990 00:00:00│ECSS DEFAULT│      │Default licence │                    │            │
└──┴───────────────────┴────────────┴──────┴────────────────┴────────────────────┴────────────┘
CODE




Внимание

Перед выполнением процедуры обновления – выполнить полный «бэкап» (см. «Регламентное обслуживание и резервное копирование»).

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

/domain/test_domain/cdr/make_finalize_cdr 
Created file(s): cdr_20260122_11_51_16_1_c.csv

Установка ОС Astra Linux

Исходные данные
На момент установки нового SSW использовать временные IP адреса (в примере 10.0.10.51/10.0.20.51 - для ecss1 и 10.0.10.52/10.0.20.52 - для ecss2). На последних шагах процедуры, временные адреса будут заменены на реальные IP адреса старого SSW версии 3.14.16 (в примере 10.0.10.41/10.0.20.41- для ecss1 и 10.0.10.42/10.0.20.42 - для ecss2).

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

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

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

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

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

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




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




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




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

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

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

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

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





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





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

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

T - thread = поток, vCore

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

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


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

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

Роль

Интерфейс

Адрес/Маска

Порт

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

ecss1

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

net.20

10.0.20.51/245000
ecss2Адрес ядра (ecss-core)net.2010.0.20.52/245000
ecss1Адрес OAM net.1010.0.10.51/24-

ecss2

Адрес OAM 

net.10

10.0.10.52/24-

ecss1, ecss2

Адрес шлюза

eth0

10.0.10.1-

ecss1, ecss2

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

eth0

172.16.0.1, 8.8.8.8-
ecss1, ecss2Адреса NTP-серверовeth010.136.16.211, 10.136.16.212123

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

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

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

Роль

Интерфейс

Адрес/Маска

Порт

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

ecss1

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



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

5000
ecss1Адрес OAM 

-

ecss2

Адрес OAM 



-

ecss1, ecss2

Адрес шлюза

-

ecss1, ecss2

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

-
ecss1, ecss2Адреса NTP-серверов

123

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

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

-
ecss2Виртуальный адрес программного адаптера хоста ecss2

-
ecss1Запасной виртуальный адрес программного адаптера хоста ecss2 на хосте ecss1

-
ecss2Запасной виртуальный адрес программного адаптера хоста ecss1 на хосте ecss2

-


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

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

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


Установка ОС

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

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

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

 

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

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

Выбрать режим установки



Согласится с Лицензионным Соглашением

Настройки

Настойки (продолжение1)

Настройки (продолжение2)

Установка



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

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


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

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

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

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

Если используется один сервер, рекомендуемое значение hostname — ecss1;

Проверка установки ОС


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

Для вывода информации о состоянии дискового пространства введите команду df -h. Она покажет общее и занятое место в разделах. Размеры разделов должны соответствовать проекту и введенным значениям при установке.

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

ssh <user>@<IP_ecss>

где:

  • <user> — имя пользователя, заданного при установке;
  • <IP_ecss> — IP-адрес хоста, заданного при установке.

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

посмотреть можно командой cat /etc/hosts
изменить/добавить командой sudo nano /etc/hosts

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

sudo nano /etc/hosts
BASH
на ecss1
127.0.0.1 localhost
10.0.10.51 ecss1
10.0.10.52 ecss2
на ecss2
127.0.0.1 localhost
10.0.10.52 ecss2
10.0.10.51 ecss1

Конфигурация репозиториев


После установки для обновления будет использоваться только образ DVD диска, загрузка с репозитория отключена. Давайте разрешим обновление пакетов с репозитория Astra Linux.

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

sudo nano /etc/apt/sources.list
CODE

привести информацию в файле к следующему виду:

# Основной репозиторий
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.5/main-repository/ 1.8_x86-64 contrib main non-free non-free-firmware
 
# Расширенный репозиторий
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.5/extended-repository/ 1.8_x86-64 contrib main non-free non-free-firmware
#deb cdrom:[OS Astra Linux 1.8.1.12  DVD]/ 1.8_x86-64 contrib main non-free non-free-firmware

Добавить репозиторий Eltex:

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

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

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

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

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

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

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

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

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

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

Изменение приоритета репозиториев

Для установки Erlang, Nodejs и  Elixir из репозитория Eltex, необходимо изменить приоритет репозиториев для данных пакетов.

Добавить в файл /etc/apt/preferences.d/erlang строки:

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

sudo sh -c "echo -e 'Package: erlang*\nPin: version 2:24.3*\nPin-Priority: 1000' >> /etc/apt/preferences.d/erlang"
CODE
Package: erlang*
Pin: version 2:24.3*
Pin-Priority: 1000

Добавить в файл /etc/apt/preferences.d/nodejs строки:

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

sudo sh -c "echo -e 'Package: nodejs*\nPin: version 14.20.0-1nodesource1*\nPin-Priority: 1000' >> /etc/apt/preferences.d/nodejs"
CODE
Package: nodejs*
Pin: version 14.20.0-1nodesource1*
Pin-Priority: 1000

Добавить в файл /etc/apt/preferences.d/elixir строки:

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

sudo sh -c "echo -e 'Package: elixir*\nPin: version 1.14*\nPin-Priority: 1000' >> /etc/apt/preferences.d/elixir"
CODE
Package: elixir*
Pin: version 1.14*
Pin-Priority: 1000


Выполнить обновление:

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

sudo apt update
CODE

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

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

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

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

sudo apt install cpufrequtils
BASH

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

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

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

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

GOVERNOR="ondemand"

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

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

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

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

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

sudo /etc/init.d/cpufrequtils restart 
BASH

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

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

sudo systemctl daemon-reload
BASH

Отключить SWAP

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

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

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

sudo swapoff -a
BASH

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

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

sudo rm /swapfile
BASH

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

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

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

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

sudo nano /etc/fstab
BASH

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

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

free -h
BASH

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

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

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

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

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

sudo timedatectl set-timezone Asia/Novosibirsk
BASH

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

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

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

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

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

ulimit -a
CODE

результат :

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

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

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

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

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

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

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

# End of file

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

Получение адресов на сетевых интерфейсах по DHCP недопустимо на серверах ECSS.

Сетевые настройки необходимо выполнять с помощью Netplan.

По умолчанию в Astra Linux пакет netplan не установлен.

Установить пакеты для обслуживание функции netplan:

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

sudo apt install -y dialog libssl1.0.0 netplan.io
CODE

Сейчас можно выполнить конфигурацию netplan:

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

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

на ecss1

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

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    enp0s3: # Название интерфейса ВМ к интернет
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
        addresses: [192.168.56.51/24]
    enp0s8: # Название интерфейса для SSW
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: enp0s3
        addresses: [10.0.10.51/24]
    net.20: # Интерфейс для VoIP
        id: 20
        link: enp0s8
        addresses: [10.0.20.51/24]
BASH

на ecss2

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

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    enp0s3: # Название интерфейса ВМ к интернет
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
        addresses: [192.168.56.52/24]
    enp0s8: # Название интерфейса для SSW
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: enp0s3
        addresses: [10.0.10.52/24]
    net.20: # Интерфейс для VoIP
        id: 20
        link: enp0s8
        addresses: [10.0.20.52/24]
BASH

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

ls -la /etc/netplan/ 
BASH

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

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

sudo netplan apply
BASH

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

Для применения новых сетевых настроек необходимо выполнить команду netplan apply. Перезапуск сети или системы не требуется. Подробнее про настройки netplan см. в Приложении Е. Netplan.


ВАЖНО

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

Обновление системы

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

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

sudo apt update
CODE


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

sudo apt upgrade --enable-upgrade
CODE

Доступ между серверами без использования пароля

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

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

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

ssh-keygen
BASH

Скопировать rsa-ключ на сервер партнера ecss2 командой  - ssh-copy-id ecss2.

на ecss1

ssh-copy-id ecss2
BASH

Скопировать rsa-ключ на сервер партнера ecss1 командой  - ssh-copy-id ecss1.

на ecss2

ssh-copy-id ecss1
BASH

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

на ecss1

ssh ecss2
BASH

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

на ecss2

ssh ecss1
BASH



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

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

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


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

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

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

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

sudo apt install ntp iptables tcpdump vlan dnsmasq aptitude atop ethtool htop mc minicom mtr-tiny nmap pptpd  screen ssh tftpd-hpa sngrep tshark  gnuplot debconf-utils keepalived attr bridge-utils ncdu wget rsync
BASH

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

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

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

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

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

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

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


Установить пакет ecss-mysql на ecss1 (требуется для миграции БД в Poastgres), для этого выполнить следующие команды.
Добавить репозиторий с ecss-mysql:

на новом ssw_ecss1

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

на новом ssw_ecss1

sudo apt update
CODE

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

Для корректной работы сервисов mysql, postgres требуется настроить ecss-dns-env.
Выполнить следующую команду:

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

sudo apt install -y ecss-dns-env
CODE

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

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


[Secondary broker] Введите адрес ([Secondary broker] Enter ip)10.0.10.52 (необходимо ввести)10.0.10.52 (необходимо ввести)


ВАЖНО

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

sudo dpkg-reconfigure ecss-dns-env
BASH

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

на новом ssw_ecss1

sudo apt install ecss-mysql
CODE


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


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

Вопросы ecss-mysqlОтветы
IP маски для прав MySQL таблиц, разделенные пробелами:127.0.0.%  (значение по умолчанию)
Логин пользователя (Login for MySQL root)root  (значение по умолчанию)
Пароль пользователя MySQL (Password for MySQL root)password (необходимо ввести)

для Elph

В случае использования в составе Элтекс решения Elph-Descktop / Elph-Mobile. И нахождения серверов Elph в подсетях отличных от подсети SSW. 
Необходимо при ответе на вопрос "IP маски для прав MySQL таблиц, разделенные пробелами" добавить не только подсеть для mysql, но и IP адрес или подсеть для серверов Elph-api / Elph-chat. В случае если подсети для Elph-api и Elph-chat , необходимо указать каждую из них.
В качестве разделителя обязательно использовать "пробел"

Для примера:

Вопросы ecss-mysqlОтветы
IP маски для прав MySQL таблиц, разделенные пробелами: (IP masks for MySQL permission, separated by spaces)

127.0.0.% 192.168.1.% (необходимо ввести)

или

127.0.0.% 192.168.1.248 (необходимо ввести)

или

127.0.0.% 192.168.1.248 10.1.100.5 (необходимо ввести)


ВАЖНО

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

на новом ssw_ecss1

sudo dpkg-reconfigure ecss-mysql
BASH

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

на новом ssw_ecss1

ls -la /var/lib/ecss-mysql/
CODE

Результат:

ls -la /var/lib/ecss-mysql/
итого 52
drwxr-xr-x 13 mysql mysql 4096 мая 21 12:39 .
drwxr-xr-x 48 root  root  4096 мая 21 12:39 ..
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 ecss_address_book
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 ecss_audit
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 ecss_calls_db
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 ecss_dialer_db
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 ecss_meeting_db
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 ecss_numbers_db
drwxr-x---  2 mysql mysql 4096 мая 21 12:40 ecss_statistics
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 ecss_subscribers
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 ecss_system
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 history_db
drwxr-x---  2 mysql mysql 4096 мая 21 12:39 web_conf

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

на новом ssw_ecss1

systemctl status mysql
CODE

Результат:

systemctl status mysql
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/mysql.service.d
             └─override.conf
     Active: active (running) since Thu 2026-05-21 12:39:49 +07; 2min 17s ago
   Main PID: 6634 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 4619)
     Memory: 407.3M
        CPU: 3.160s
     CGroup: /system.slice/mysql.service
             └─6634 /usr/sbin/mysqld

Попробуйте войти в базу данных MySQL под логином (<LOGIN>), с паролем (<PASSWORD>), указанным при установке (root/root):

на новом ssw_ecss1

sudo mysql -uroot -p
CODE

В случае корректной установки откроется CLI MySQL-сервера. 

Можно сразу посмотреть список созданных БД:

mysql>

SHOW DATABASES;
CODE

Результат:

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ecss_address_book  |
| ecss_audit         |
| ecss_calls_db      |
| ecss_dialer_db     |
| ecss_meeting_db    |
| ecss_numbers_db    |
| ecss_statistics    |
| ecss_subscribers   |
| ecss_system        |
| history_db         |
| mysql              |
| performance_schema |
| sys                |
| web_conf           |
+--------------------+

Чтобы выйти из CLI MySQL, выполните команду "exit".

В целях безопасности логин root разрешено использовать только для входа с локального хоста.

На рабочем SSW выполнить backup, используя команду:

на рабочем ssw_ecss1

sudo mysqldump -uroot -p --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers --databases ecss_address_book ecss_audit ecss_calls_db ecss_dialer_db ecss_meeting_db ecss_numbers_db ecss_statistics ecss_subscribers ecss_system web_conf history_db > ./all_dump.sql
CODE

Скопировать созданный backup с рабочего сервера ssw на новый:

на новом ssw_ecss1

scp <ваш_пользователь>@<IP-адрес ssw>:/home/<ваш_пользователь>/all_dump.sql .
CODE

Подготовить backup файл версии 3.14.16 к загрузки, выполнить команду:

на новом ssw_ecss1

sed -i.bak "s| DATA DIRECTORY='/var/lib/ecss-mysql/'||g" all_dump.sql
CODE


Востановить базу данных с ранее созданного backup файла:

на новом ssw_ecss1

sudo mysql -uroot -p < all_dump.sql
CODE

Выполнить проверку:

на новом ssw_ecss1
sudo mysql 


mysql> SHOW DATABASES; 
+--------------------+
| Database           |
+--------------------+
| ecss_address_book  |
| ecss_audit         |
| ecss_calls_db      |
| ecss_dialer_db     |
| ecss_meeting_db    |
| ecss_numbers_db    |
| ecss_statistics    |
| ecss_subscribers   |
| ecss_system        |
| history_db         |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| web_conf           |
+--------------------+
15 rows in set (0.00 sec)mysql> quit

Отключаем репозиторий для ecss-mysql, он больше не потребуется:

на новом ssw_ecss1

sudo sed -i '/3.14/d' /etc/apt/sources.list.d/eltex-ecss10-stable.list
CODE

на новом ssw_ecss1

sudo apt update
CODE


Подготовка к установке Postgres

Примечание

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

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

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

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

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

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

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

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

sudo sh -c "echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu   jammy stable' >> /etc/apt/sources.list.d/docker.list"
CODE

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

sudo apt update && sudo apt upgrade
BASH

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

Первоначально выполнить установку на ecss1 и только по окончанию (успешному) запустить команду установки на ecss2


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

sudo apt install ecss-postgres-bdr-ssw
BASH

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

Вопросы ecss-postgres-bdr-sswОтветы для ecss1Ответы для ecss2Пример ecss1Пример ecss2

Текущий IP-адрес сетевого интерфейса
(Выбрать адрес который будет использовать Postgres).

Если хост использует только один адрес вопрос не будет задан

Выбрать из списка IP-адрес для работы с PostgresВыбрать из списка IP-адрес для работы с Postgres



Установка в кластере?Да  (значение по умолчанию)Да  (значение по умолчанию)

Является ли этот узел мастером? Да  (необходимо выбрать) Нет  (необходимо выбрать)

IP-адрес, используемый для подключения к кластеру:  Указать IP адрес используемый в ecss1



Результат: на ecss1
=======================================================
=======================================================
 ecss-postgres-bdr-ssw successfully installed/updated! 
=======================================================
=======================================================


┏┓┏┓┏┓┏┳┓┏┓┳┓┏┓┏┓  ┳┓┳┓┳┓  ┏┓┏┓┓ ┏
┃┃┃┃┗┓ ┃ ┃┓┣┫┣ ┗┓  ┣┫┃┃┣┫  ┗┓┗┓┃┃┃
┣┛┗┛┗┛ ┻ ┗┛┛┗┗┛┗┛  ┻┛┻┛┛┗  ┗┛┗┛┗┻┛
Результат: на ecss2
=============================
 Checking replication status 
=============================
Репликация BDR настроена корректно: данные совпадают.

=======================================================
=======================================================
 ecss-postgres-bdr-ssw successfully installed/updated! 
=======================================================
=======================================================


┏┓┏┓┏┓┏┳┓┏┓┳┓┏┓┏┓  ┳┓┳┓┳┓  ┏┓┏┓┓ ┏
┃┃┃┃┗┓ ┃ ┃┓┣┫┣ ┗┓  ┣┫┃┃┣┫  ┗┓┗┓┃┃┃
┣┛┗┛┗┛ ┻ ┗┛┛┗┗┛┗┛  ┻┛┻┛┛┗  ┗┛┗┛┗┻┛

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

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

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

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

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

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

sudo ./postgresbdr_ssw.sh check
BASH

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

новый ecss1

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

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

новый ecss2

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

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

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

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

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

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

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

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

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

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


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

cd ~
CODE

Настройка dns-резолвинга

Для корректной работы системы, после установки пакета ecss-node требуется скорректировать дефолтные установки dns-резолвинга. Для этого:

В файле /etc/resolv.conf изменить параметр nameserver установленный системой по умолчанию на 127.0.0.1 (если строк nameserver несколько - остальные удалить/закомментировать):

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

sudo nano /etc/resolv.conf
CODE
Пример:
search eltex.loc
nameserver 127.0.0.1

В Astra Linux после перезагрузки файл /etc/resolv.conf приводится к исходному виду, поэтому его нужно сделать неизменяемым:

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

sudo chattr +i /etc/resolv.conf
CODE

Для доступа к репозиториям AstraLinux и Элтекс нужно указать локальный DNS или глобальный (для примера 8.8.8.8 или 77.88.8.8) 

Добавить в файл /etc/dnsmasq.d/ecss строки server=<Ipadd DNS сервера> (в примере 77.88.8.8) :

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

sudo sh -c "echo 'server=8.8.8.8' >> /etc/dnsmasq.d/ecss"
CODE

В файле /etc/dnsmasq.d/nameserver указать параметры nameserver-ов используемых в локальной сети  (в примере server=127.0.0.1 и server=172.16.0.1):

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

sudo nano /etc/dnsmasq.d/nameserver
CODE
Пример:
server=127.0.0.1
server=172.16.0.1

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

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

sudo systemctl restart dnsmasq.service
CODE

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

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

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

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

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

на новом ssw_ecss1

sudo apt install -y ecss-node
BASH

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

После установки пакета ecss-node на хосте ecss1, выполните команду "sudo usermod -a -G ssw <Имя_пользователя>" на хосте ecss1.

Пример:
sudo usermod -a -G ssw eltex


Затем выполите установку на хосте ecss2. 
Используйте режим "Скопировать существующие сертификаты (copy) по ssh" с сервера ecss1

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

на новом ssw_ecss2

sudo apt install -y ecss-node
CODE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

на новом ssw_ecss2

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

Создать backup для oasys, выполнить следующие команды:

на новом ssw_ecss1

cd /var/lib/ecss/oasys/
CODE

на новом ssw_ecss1

sudo rsync -a <Ваш_пользователь>@<IP_add_старого_ecss1>:/var/lib/ecss/oasys/Mnesia.ds1@ecss1/ Mnesia.ds1@ecss1/
CODE

на новом ssw_ecss1

sudo rsync -a <Ваш_пользователь>@<IP_add_старого_ecss1>:/var/lib/ecss/oasys/Mnesia.md1@ecss1/ Mnesia.md1@ecss1/
CODE

на новом ssw_ecss1

cd ~
CODE


Выполнить миграцию таблиц audit, следующей командой:

Выполнить только на новом ecss1


на новом ssw_ecss1

/usr/bin/migrate_cocon.exs
CODE
/usr/bin/migrate_cocon.exs
Load beams: :ok
Application.ensure_all_started: {:ok, [:eex, :crypto, :telemetry, :decimal, :ecto, :connection, :db_connection, :ecto_sql]}
Application.ensure_all_started: {:ok, [:postgrex]}
Application.ensure_all_started: {:ok, [:nebulex]}
storekeeper repo start_link: {:ok, #PID<0.144.0>}
nebulex start_link: {:ok, #PID<0.157.0>}
ecto migration result: []

14:09:40.682 [info] Migrations already up
bdr fix result: []
"ecss-root user already exists"
MySQL database hostname (cocon.mysql.ecss):
MySQL database port (3306):
ecss_audit database username (audit):
ecss_audit database password (audit):
Connecting to MySQL at cocon.mysql.ecss:3306 username: audit password: audit. . .
14:09:45.419 [debug] QUERY OK db=44.0ms
commit []
. . .
Migration done.


Проверить статус сервисов, для этого выполнить в CoCon команду system-status:

выполняется в CoCon
/system-status 
Checking...
┌─┬───────────────┬────────────────────────┬───────────────┬────────────┬──────┐
│ │     Node      │        Release         │ Erlang nodes  │Mnesia nodes│Uptime│
├─┼───────────────┼────────────────────────┼───────────────┼────────────┼──────┤
│ │core1@ecss1    │ecss-core-3.18.0.270    │core1@ecss1    │not running │1m 45s│
│ │ds1@ecss1      │ecss-ds-3.18.0.270      │ds1@ecss1      │ds1@ecss1   │1m 51s│
│ │md1@ecss1      │ecss-mediator-3.18.0.270│md1@ecss1      │md1@ecss1   │1m 41s│
│ │mycelium1@ecss1│ecss-mycelium-3.18.0.270│mycelium1@ecss1│not running │1m 55s│
│ │sip1@ecss1     │ecss-pa-sip-3.18.0.270  │sip1@ecss1     │sip1@ecss1  │1m 36s│
└─┴───────────────┴────────────────────────┴───────────────┴────────────┴──────┘

All services are started.

Чтобы узлы системы смогли встать в работу, надо сконфигурировать систему указав имена хостов на которых развёрнуты ecss-сервисы.
Команда в CoCon: /system/clusters/set [<host1>, <host2>, ... <hostN>]. 
В примере кластера из 2-х хостов (имя хоста  ecss1 и ecss2) выполнить команду :

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

/system/clusters/set [ecss1, ecss2]
CODE

Перегрузить сервисы ecss-mycelium и ecss-ds

на новом ssw_ecss1

sudo systemctl restart ecss-mycelium
CODE

на новом ssw_ecss1

sudo systemctl restart ecss-ds
CODE

Режимы лицензирования.

В случае использования файлового лицензирования

Никаких дополнительных действий выполнять не требуется.

/cluster/storage/ds1/licence/list-licence 
┌──┬───────────────────┬────────────┬──────┬───────────────────┬────────────────────┬────────────┐
│Id│Creation date(UTC) │   SSW ID   │Active│  Description      │Expiration date(UTC)│ Time left  │
├──┼───────────────────┼────────────┼──────┼───────────────────┼────────────────────┼────────────┤
│1 │13.01.2026 15:00:00│ECSS 010070 │*     │Eltex SC softswitch│24.12.2026 23:59:59 │217d 16h 44m│
│0 │01.01.1990 00:00:00│ECSS DEFAULT│      │Default licence    │                    │            │
└──┴───────────────────┴────────────┴──────┴───────────────────┴────────────────────┴────────────┘


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

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


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

Установка пакета ecss-license-provider следующей командой:

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

sudo apt install ecss-license-provider 
CODE

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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


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

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

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

Данные ELM сервера Элтекс - "elm.eltex-co.ru:8099".

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

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

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

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

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


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

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

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

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

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

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

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

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

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

sudo systemctl restart ecss-license-provider .service
CODE

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

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

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

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


для примера:

Было:

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

Стало:

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

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

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

sudo systemctl restart ecss-license-provider .service
CODE

Подключение SSW к License Provider

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

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

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

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

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

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

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

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

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

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

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

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

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

/cluster/storage/ds1/licence/request
CODE

type=elm

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

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

type=ecss_license

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


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


Статус лицензии

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

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

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

или

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

Выполнение миграции


Описание команд миграции и рекомендации

Миграция статистики

  • Так как таблицы статистики динамические, каждые 5 минут агрегируются данные и удаляются старые, то вместо размера таблицы при команде /check используется index последней записи.

Рекомендации

  • Промигрировать всю статистику с активного работающего хоста с MySQL на новый неактивный c PostgresSQL.
  • Чтобы избежать неконсистентности данных не включайте статистику на новом хосте до полного завершения миграции. После ввода в работу нового хоста основная часть данных уже будет промигрирована. Нужно будет запустить миграцию остаточных данных, которые успели появится на MySQL-хосте. В зависимости от скорости переключения хостов будет до 10 пятиминуток, так что потери по времени будут минимальны.
  • Чтобы избежать потери данных с MySQL-хоста, желательно выдержать пятиминутную паузу после вывода этого хоста из работы и запустить миграцию на PostgresSQL-хосте чтобы забрать оставшиеся данные, иначе можно потерять одну пятиминутную запись.
  • Лучше мигрировать данные в порядке следующего приоритета таблиц:
    • intrahour
    • hour
    • daily
    • weekly
    • monthly


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

База данныхТаблицаТаблицы-зависимости
auditecss_role_group
  • ecss_groups
  • ecss_roles

ecss_groups_users
  • ecss_groups
  • ecss_users
ecss_role_settings
  • ecss_roles
ecss_user_settings2
  • ecss_users
ecss_audit_commands_requests
  • ecss_audit_sessions
ecss_audit_commands_answers
  • ecss_audit_sessions
  • ecss_audit_commands_requests
calls ss
  • tolltickets
address_book

contact

  • source

email

  • contact

phone

  • contact
  • label


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

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

/system/postgresql/migration/check <DATABASE> <* | table> [options]
где DATABASE:


  • address_book
  • audit
  • calls
  • dialer
  • history
  • meetings
  • subscribers


 где Options:

  • --hostname, адрес хоста с БД
  • --port
  • --database, имя базы данных данное в опциях для этой БД
  • --username, имя пользователя БД
  • --password, пароль пользователя БД


Пример:
/system/postgresql/migration/check address_book *                
┌────────────┬────────────────┬────────────────────────────────────┬───────────────────────────────┐
│     DB     │     Table      │               Status               │          Description          │
├────────────┼────────────────┼────────────────────────────────────┼───────────────────────────────┤
│address_book│contact         │Needs migration.                    │Depends on: `source`.          │
│            │                │Meegrated: 0 / 1785                 │                               │
│            │                │                                    │                               │
│-           │label           │Needs migration.                    │No dependencies.               │
│            │                │Meegrated: 0 / 5                    │                               │
│            │                │                                    │                               │
│-           │phone           │Needs migration.                    │Depends on: `contact`, `label`.│
│            │                │Meegrated: 0 / 2493                 │                               │
│            │                │                                    │                               │
│-           │changes         │Needs migration.                    │No dependencies.               │
│            │                │Meegrated: 0 / 5                    │                               │
│            │                │                                    │                               │
│-           │email           │Needs migration.                    │Depends on: `contact`.         │
│            │                │Meegrated: 0 / 588                  │                               │
└────────────┴────────────────┴────────────────────────────────────┴───────────────────────────────┘


Миграцию выполните командой:

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

/system/postgresql/migration/do <DATABASE> <TABLE>
CODE

Команда создаёт задачу миграции.
Задача имеет 3 статуса: migrating, finished, failed.
При запуске команды проверяется текущий размер таблицы и сверяется с данными последней миграции этой таблицы. При необходимости миграции данных задача запускается и уходит в фон. Размер таблицы фиксируется на моменте старта задачи миграции. Offset автоматически берётся с последней записи миграции таблицы, действуя как чек поинт.
Флаги offset/limit использовать только для ручного устранении проблем при миграции.

Выполните cocon-команды для переноса данных из MySQL в PostgreSQL.
Используя команду check, для каждой БД промигрируйте таблицы баз данных. В командах работает автодополнение для всех ДБ и их таблиц.


Проверьте прохождение миграции командой:

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

/system/postgresql/migration/info <DATABASE> <TABLE>
CODE


Пример:
/system/postgresql/migration/info address_book              
┌────┬────────────┬────────────────────┬──────────┬────────────────┬───────────────────┬───────────────────┐
│ ID │     DB     │       Table        │  Status  │     Props      │    Start Time     │     End Time      │
├────┼────────────┼────────────────────┼──────────┼────────────────┼───────────────────┼───────────────────┤
│1   │address_book│source              │finished  │current: 2      │22.01.2026 13:14:20│22.01.2026 13:14:20│
│    │            │                    │          │overall: 2      │                   │                   │
│2   │address_book│label               │failed    │current: 0      │22.01.2026 13:14:30│22.01.2026 13:14:30│
│    │            │                    │          │overall: 5      │                   │                   │
│3   │address_book│changes             │failed    │current: 0      │22.01.2026 13:14:49│22.01.2026 13:14:49│
│    │            │                    │          │overall: 5      │                   │                   │
│4   │address_book│contact             │finished  │current: 1785   │22.01.2026 13:14:56│22.01.2026 13:14:56│
│    │            │                    │          │overall: 1785   │                   │                   │
│5   │address_book│phone               │finished  │current: 2493   │22.01.2026 13:15:03│22.01.2026 13:15:03│
│    │            │                    │          │overall: 2493   │                   │                   │
│6   │address_book│email               │finished  │current: 588    │22.01.2026 13:15:07│22.01.2026 13:15:07│
│    │            │                    │          │overall: 588    │                   │                   │
└────┴────────────┴────────────────────┴──────────┴────────────────┴───────────────────┴───────────────────┘

Запустить сервисы:


ecss-mycelium

на новом ssw_ecss2

sudo systemctl start ecss-mycelium
CODE

ecss-ds

на новом ssw_ecss2

sudo systemctl start ecss-ds
CODE

ecss-core

на новом ssw_ecss2

sudo systemctl start ecss-core
CODE

ecss-mediator

на новом ssw_ecss2

sudo systemctl start ecss-mediator
CODE

ecss-pa-sip

на новом ssw_ecss2

sudo systemctl start ecss-pa-sip
CODE

Проверить статус, после активизации сервисов на ecss2, для этого выполнить в CoCon команду system-status:

выполняется в CoCon
/system-status 
Checking...
┌─┬───────────────┬────────────────────────┬───────────────────────────────┬─────────────────────┬──────┐
│ │     Node      │        Release         │         Erlang nodes          │    Mnesia nodes     │Uptime│
├─┼───────────────┼────────────────────────┼───────────────────────────────┼─────────────────────┼──────┤
│ │core1@ecss1    │ecss-core-3.18.0.270    │core1@ecss1,core1@ecss2        │not running          │5m 28s│
│ │core1@ecss2    │ecss-core-3.18.0.270    │core1@ecss1,core1@ecss2        │not running          │2m 48s│
│ │ds1@ecss1      │ecss-ds-3.18.0.270      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │5m 33s│
│ │ds1@ecss2      │ecss-ds-3.18.0.270      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │2m 54s│
│ │md1@ecss1      │ecss-mediator-3.18.0.270│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │5m 23s│
│ │md1@ecss2      │ecss-mediator-3.18.0.270│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │2m 44s│
│ │mycelium1@ecss1│ecss-mycelium-3.18.0.270│mycelium1@ecss1,mycelium1@ecss2│not running          │5m 37s│
│ │mycelium1@ecss2│ecss-mycelium-3.18.0.270│mycelium1@ecss1,mycelium1@ecss2│not running          │2m 59s│
│ │sip1@ecss1     │ecss-pa-sip-3.18.0.270  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│5m 18s│
│ │sip1@ecss2     │ecss-pa-sip-3.18.0.270  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│2m 39s│
└─┴───────────────┴────────────────────────┴───────────────────────────────┴─────────────────────┴──────┘

All services are started.

  Active media resource selected list specific:
┌──────┬─────┬───────┬───────────┬───────────┐
│ Node │ MSR │  MSR  │ Cc-status │ Cc-uptime │
│      │     │version│           │           │
├──────┼─────┼───────┼───────────┼───────────┤
└──────┴─────┴───────┴───────────┴───────────┘

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

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

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

sudo systemctl edit ecss-pa-sip.service
CODE

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

[Service]
LimitNOFILE=65536

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

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

sudo systemctl daemon-reload
CODE

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

sudo reboot


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

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

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

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

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

на обоих новых хостах
address=/primary.broker.ecss/10.0.10.51
address=/secondary.broker.ecss/10.0.10.52

При необходимости изменить - использовать команду sudo dpkg-reconfigure ecss-dns-env

glusterfs

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

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

sudo apt install -y glusterfs-server attr
BASH

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

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

sudo systemctl start glusterd
BASH

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

на новом ssw_ecss1

sudo gluster peer probe ecss2
BASH

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

на новом ssw_ecss2

sudo gluster peer status
BASH

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

на новом ssw_ecss2
sudo gluster peer status
Number of Peers: 1

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

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

на новом ssw_ecss1
sudo gluster peer status
Number of Peers: 1

Hostname: ecss2
Uuid: f405dbb1-4f6d-4f2f-a116-f56197d18788
State: Peer in Cluster (Connected)


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

на новом ssw_ecss1

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

на новом ssw_ecss1

sudo gluster volume start ecss_volume
BASH

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

sudo gluster volume info
BASH

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

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

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

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

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

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

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

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

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

sudo systemctl enable glusterd.service
BASH

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

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

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

sudo mkdir /var/lib/ecss/restfs
BASH
  • Если хосты не могут быть перезагружены, то можно выполнить следующие команды на обоих хостах:

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

sudo systemctl daemon-reload
BASH

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

sudo systemctl restart ecss-glusterfs-mount.service
BASH

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

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

df -h
CODE


на обоих новых хостах
df -h

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

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

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

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

ecss-restfs

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

sudo apt install -y ecss-restfs
BASH

Установка ecss-restfs.  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


ВАЖНО!

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

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

ls -la /var/lib/ecss/restfs/system/sounds/
BASH

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

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

sudo apt --fix-broken install 
CODE

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

ls -la /var/lib/ecss/restfs/system/sounds/
CODE

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

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

 

wget http://ecss1:9990/system/sounds/ai_you.wav
--2026-05-22 09:27:30--  http://ecss1:9990/system/sounds/ai_you.wav
Распознаётся ecss1 (ecss1)… 10.0.10.40
Подключение к ecss1 (ecss1)|10.0.10.40|:9990... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 11670 (11K) [audio/x-wav]
Сохранение в: «ai_you.wav»

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

2026-05-22 09:27:30 (379 MB/s) - «ai_you.wav» сохранён [11670/11670]
BASH

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

rm ai_you.wav
BASH

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

на новом ecss1

sudo rsync -a <ваш_пользователь>@<IP_add_старого_ecss1>:/var/lib/ecss/restfs/domain/ /var/lib/ecss/restfs/domain/
CODE

Пример:

abf@ecss1:/var/lib/ecss/restfs/domain$ ls -la /var/lib/ecss/restfs/domain
итого 8
drwxr-xr-x 2 www-data www-data 4096 апр 22 18:21 .
drwxr-xr-x 7 www-data www-data 4096 мая 28 15:07 ..

abf@ecss1:/var/lib/ecss/restfs/domain$ sudo rsync -a abf@10.0.10.41:/var/lib/ecss/restfs/domain/ /var/lib/ecss/restfs/domain/

abf@ecss1:/var/lib/ecss/restfs/domain$ ls -la test_domain/records/2026_05_28
итого 610
drwxrwxrwx 2 www-data www-data  4096 мая 28 14:56 .
drwxrwxrwx 3 www-data www-data  4096 мая 28 14:27 ..
-rw-r--r-- 1 www-data www-data 71892 мая 28 14:27 2026-05-28_14-27-02_t_42009-42007.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:27 2026-05-28_14-27-02_t_42009-42007.pcm.meta
-rw-r--r-- 1 www-data www-data 71892 мая 28 14:31 2026-05-28_14-31-19_o_42007-42009.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:31 2026-05-28_14-31-19_o_42007-42009.pcm.meta
-rw-r--r-- 1 www-data www-data 63904 мая 28 14:55 2026-05-28_14-55-24_o_42007-42009.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:55 2026-05-28_14-55-24_o_42007-42009.pcm.meta
-rw-r--r-- 1 www-data www-data 39940 мая 28 14:55 2026-05-28_14-55-31_o_42007-42009.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:55 2026-05-28_14-55-31_o_42007-42009.pcm.meta
-rw-r--r-- 1 www-data www-data 15976 мая 28 14:55 2026-05-28_14-55-37_o_42007-42009.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:55 2026-05-28_14-55-37_o_42007-42009.pcm.meta
-rw-r--r-- 1 www-data www-data 79880 мая 28 14:55 2026-05-28_14-55-48_o_42007-42009.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:55 2026-05-28_14-55-48_o_42007-42009.pcm.meta
-rw-r--r-- 1 www-data www-data 55916 мая 28 14:56 2026-05-28_14-55-59_o_42007-42009.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:55 2026-05-28_14-55-59_o_42007-42009.pcm.meta
-rw-r--r-- 1 www-data www-data 47928 мая 28 14:56 2026-05-28_14-56-04_o_42007-42009.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:56 2026-05-28_14-56-04_o_42007-42009.pcm.meta
-rw-r--r-- 1 www-data www-data 31952 мая 28 14:56 2026-05-28_14-56-28_t_42009-42007.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:56 2026-05-28_14-56-28_t_42009-42007.pcm.meta
-rw-r--r-- 1 www-data www-data 31952 мая 28 14:56 2026-05-28_14-56-37_t_42009-42007.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:56 2026-05-28_14-56-37_t_42009-42007.pcm.meta
-rw-r--r-- 1 www-data www-data 95856 мая 28 14:56 2026-05-28_14-56-42_t_42009-42007.pcm
-rw-rw-rw- 1 www-data www-data    86 мая 28 14:56 2026-05-28_14-56-42_t_42009-42007.pcm.meta
CODE

ecss-media-server

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

sudo apt install -y ecss-media-server
BASH

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

Внимание

Указать IP адреса старого SSW версии 3.14.16 (в примере 10.0.20.41).
Вопросы ecss-media-serverОтветы для ecss1Ответы для ecss2Пример
[ MSR SIP ] Введите bind-ip адрес (Enter)10.0.20.41 (необходимо ввести)10.0.20.42 (необходимо ввести)


[MSR Control-Channel] Введите bind-ip-адрес10.0.20.41 (необходимо ввести)10.0.20.42 (необходимо ввести)


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

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


Внутри лежит конфигурация для msr: config.xml, в директории conf.d лежит конфигурация default.xml.

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

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

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

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

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

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

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

cat /etc/ecss/ecss-media-server/conf.d/default.xml
BASH
<?xml version="1.0"?>
<config>
      <accounts>
            <dynamic msr_name="msr.ecss1" realm="sip:127.0.0.1:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>
      </accounts>
</config>

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

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

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

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

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

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

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

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

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

sudo systemctl restart ecss-media-server
CODE

В данный момент вы увидите ошибку- это нормально. Указаны IP адреса старого ssw и в текущей конфигурации они пока недоступны.

sudo systemctl restart ecss-media-server
Job for ecss-media-server.service failed because the control process exited with error code.
See "systemctl status ecss-media-server.service" and "journalctl -xeu ecss-media-server.service" for details.



ecss-web-conf

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

sudo apt install ecss-web-conf
CODE

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

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

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

Отключение SSW версии 3.14.16

Для отключения из обслуживания старого SSW версии 3.14.16 выполнить следующие команды:

на старых ecss1/ecss2

sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
CODE

на старых хостах ecss1/ecss2

sudo systemctl stop keepalived.service
CODE

на старых ecss1/ecss2

sudo nano /etc/netplan/ecss.yaml
CODE

Изменить IP адреса 10.0.10.41/10.0.20.41 и 10.0.10.42/10.0.20.42 на временные неиспользуемые на сети (для примера на 10.0.10.61/10.0.20.61 и 10.0.10.62/10.0.20.62):

Было:

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

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    enp0s3: # Название интерфейса ВМ к интернет
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
        addresses: [192.168.56.41/24]
    enp0s8: # Название интерфейса для SSW
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: enp0s3
        addresses: [10.0.10.41/24]
    net.20: # Интерфейс для VoIP
        id: 20
        link: enp0s8
        addresses: [10.0.20.41/24]
CODE

Стало:

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

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    enp0s3: # Название интерфейса ВМ к интернет
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
        addresses: [192.168.56.61/24]
    enp0s8: # Название интерфейса для SSW
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: enp0s3
        addresses: [10.0.10.61/24]
    net.20: # Интерфейс для VoIP
        id: 20
        link: enp0s8
        addresses: [10.0.20.61/24]
CODE

на ecss1

sudo netplan apply
CODE

Переключение нового SSW на рабочие IP адреса

Изменение IP адресов в Postgres

Выполнить изменение IP адресов в Postgres.
Создайте файл new_ip.sh на новом ecss1:

на новом ssw_ecss1

nano new_ip.sh
CODE
на новом ssw_ecss1
#!/bin/bash


function askIps() {
echo "Enter OLD master ip please"
echo "Like 10.0.10.15"
read MASTERIP
echo "Enter OLD slave ip please"
echo "Like 10.0.10.16"
read SLAVEIP
echo "Enter NEW master ip please"
echo "Like 10.0.10.95"
read NEW_MASTERIP
echo "Enter NEW slave ip please"
echo "Like 10.0.10.96"
read NEW_SLAVEIP
}

case $1 in
    "new")
        askIps
        echo "Press enter with empty password"
        echo "Просто щелкайте Enter не вводя пароль"
        echo "q - выход из просмотра таблицы (если необходимо)"
        export PGPASSWORD=postgres1
        echo "проверка записей"
        psql -U postgres -h $MASTERIP -p 5439 -w ecss_storekeeper_db -c "update bdr.bdr_nodes set node_local_dsn = 'host=$NEW_MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1' where node_local_dsn = 'host=$MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'"
        psql -U postgres -h $SLAVEIP -p 5439 -w ecss_storekeeper_db -c "update bdr.bdr_nodes set node_local_dsn = 'host=$NEW_MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1' where node_local_dsn = 'host=$MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'"
        psql -U postgres -h $MASTERIP -p 5439 -w ecss_storekeeper_db -c "update bdr.bdr_nodes set node_local_dsn = 'host=$NEW_SLAVEIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1',
node_init_from_dsn = 'host=$NEW_MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1' 
where node_local_dsn = 'host=$SLAVEIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1';" 
        psql -U postgres -h $SLAVEIP -p 5439 -w ecss_storekeeper_db -c "update bdr.bdr_nodes set node_local_dsn = 'host=$NEW_SLAVEIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1',
node_init_from_dsn = 'host=$NEW_MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1' 
where node_local_dsn = 'host=$SLAVEIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1';"
        psql -U postgres -h $SLAVEIP -p 5439 -w ecss_storekeeper_db -c "update bdr.bdr_connections set conn_dsn = 'host=$NEW_MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1' where conn_dsn = 'host=$MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'"
        psql -U postgres -h $MASTERIP -p 5439 -w ecss_storekeeper_db -c "update bdr.bdr_connections set conn_dsn = 'host=$NEW_MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1' where conn_dsn = 'host=$MASTERIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'"
        psql -U postgres -h $MASTERIP -p 5439 -w ecss_storekeeper_db -c "update bdr.bdr_connections set conn_dsn = 'host=$NEW_SLAVEIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1' where conn_dsn = 'host=$SLAVEIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'"
        psql -U postgres -h $SLAVEIP -p 5439 -w ecss_storekeeper_db -c "update bdr.bdr_connections set conn_dsn = 'host=$NEW_SLAVEIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1' where conn_dsn = 'host=$SLAVEIP port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'"
        psql -U postgres -h $MASTERIP -p 5439 -w ecss_storekeeper_db -c "SELECT bdr.bdr_connections_changed();"
        psql -U postgres -h $SLAVEIP -p 5439 -w ecss_storekeeper_db -c "SELECT bdr.bdr_connections_changed();"
        ;;
esac

Сделать файл исполняемым, выполнив команду:

на новом ssw_ecss1

chmod 754 new_ip.sh
CODE

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

на новом ssw_ecss1

./new_ip.sh new
CODE

Пример:

./test.sh new
Enter master ip please
Like 10.0.10.15
10.0.10.51
Enter slave ip please
Like 10.0.10.16
10.0.10.52
Enter NEW master ip please
Like 10.0.10.95
10.0.10.41
Enter NEW slave ip please
Like 10.0.10.96
10.0.10.42
Press enter with empty password
Просто щелкайте Enter не вводя пароль
q - выход из просмотра таблицы (если необходимо)
проверка записей
UPDATE 1
UPDATE 0
UPDATE 1
UPDATE 0
UPDATE 1
UPDATE 0
UPDATE 1
UPDATE 0
 bdr_connections_changed 
-------------------------
 
(1 строка)

 bdr_connections_changed 
-------------------------
 
(1 строка)
CODE

Изменение IP адресов на интерфейсах

После освобождения рабочих IP адресов со старого SSW можно подключить их к новому SSW. Выполнить команду:

на новом ssw

sudo nano /etc/netplan/ecss.yaml
CODE

Изменить IP адреса 10.0.10.51/10.0.20.51 и 10.0.10.52/10.0.20.52 на используемые на сети для SSW (в примере 10.0.10.41/10.0.20.41 и 10.0.10.42/10.0.20.42):

Пример Было:

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

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    enp0s3: # Название интерфейса ВМ к интернет
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
        addresses: [192.168.56.51/24]
    enp0s8: # Название интерфейса для SSW
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: enp0s3
        addresses: [10.0.10.51/24]
    net.20: # Интерфейс для VoIP
        id: 20
        link: enp0s8
        addresses: [10.0.20.51/24]
CODE

Пример Стало:

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

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    enp0s3: # Название интерфейса ВМ к интернет
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
        addresses: [192.168.56.41/24]
    enp0s8: # Название интерфейса для SSW
        dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
        dhcp6: no
  vlans:
    net.10: # Интерфейс управления
        id: 10
        link: enp0s3
        addresses: [10.0.10.41/24]
    net.20: # Интерфейс для VoIP
        id: 20
        link: enp0s8
        addresses: [10.0.20.41/24]
CODE

на новом ssw

sudo netplan apply
CODE

Изменение /etc/hosts

Изменить IP адреса, на адреса старого ssw в файле /etc/hosts,  выполнив команду:

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

sudo nano /etc/hosts
CODE
Пример: было
127.0.0.1       localhost
10.0.10.51      ecss1
10.0.10.52      ecss2

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Пример: стало
127.0.0.1       localhost
10.0.10.41      ecss1
10.0.10.42      ecss2

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Изменение конфигурации ecss-dns-env

Выполнить команду изменения конфигурации брокера на IP адреса старого ssw:

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

sudo dpkg-reconfigure ecss-dns-env
CODE

Выполните обновление в конфигурации брокера :

ВопросОтвет для ecss1/ecss2
Выберите пункты, которые хотите настроить:broker
[Primary broker] Введите адрес: Указать IP адрес старого ecss1 (в примере - 10.0.10.41)

[Secondary broker] Введите адрес: Указать IP адрес старого ecss2 (в примере - 10.0.10.42)

 

Включение VRRP для SIP-адаптера на новых хостах ecss1/ecss2

Для Astra Linux

Если ECSS-10 установлен на Astra Linux, то необходимо изменить скрипт проверки доступности контрольного SIP-порта /usr/bin/ecss_pa_sip_port:

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

sudo nano /usr/bin/ecss_pa_sip_port
CODE
на обоих новых хостах
#!/bin/bash
netstat -plane | grep $1
#nc -z 127.0.0.1 $1

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

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

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

sudo nano /etc/keepalived/keepalived.conf 
BASH

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

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

include /etc/keepalived/sip.conf

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

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

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

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

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

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

    track_script { 
        check_sip
    }
}

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

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

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

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

}
BASH

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

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

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

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

}

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

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

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

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

    track_script {
        check_sip
    }
}
BASH


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

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

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

sudo systemctl restart keepalived.service
BASH

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

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

sudo ifconfig
CODE

Пример: ecss1

sudo ifconfig 

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

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

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


Повторная миграция БД MySQL – Postgres

Выполнить на старом SSW повторный backup БД MySQL, используя команду:

на старом SSW

sudo mysqldump -uroot -p --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers --databases ecss_address_book ecss_audit ecss_calls_db ecss_dialer_db ecss_meeting_db ecss_numbers_db ecss_statistics ecss_subscribers ecss_system web_conf history_db > ./all_dump.sql
CODE

Скопировать повторный  backup БД MySQL на новый SSW, выполнив команду (в примере IP-адрес_старого_ssw поменялся на 10.0.10.30):

на новом ssw_ecss1

scp <ваш_пользователь>@<IP-временный_адрес_старого_ssw>:/home/<ваш_пользователь>/all_dump.sql .
CODE

Подготовить backup файл версии 3.14.16 к загрузки, выполнить команду:

на новом ssw_ecss1

sed -i.bak "s| DATA DIRECTORY='/var/lib/ecss-mysql/'||g" all_dump.sql
CODE


Востановить базу данных с  backup файла (загружаем информацию измененную за время выполнения обновлений):

на новом ssw

sudo mysql -uroot -p < all_dump.sql
CODE

Выполнить проверку:

на новом ssw
sudo mysql 


mysql> SHOW DATABASES; 
+--------------------+
| Database           |
+--------------------+
| ecss_address_book  |
| ecss_audit         |
| ecss_calls_db      |
| ecss_dialer_db     |
| ecss_meeting_db    |
| ecss_numbers_db    |
| ecss_statistics    |
| ecss_subscribers   |
| ecss_system        |
| history_db         |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| web_conf           |
+--------------------+
15 rows in set (0.00 sec)mysql> quit

Выполнить миграцию таблиц audit, следующей командой:

на новом ssw_ecss1

/usr/bin/migrate_cocon.exs
CODE

На время выполнения миграции отключить сервисы на ecss2 выполнив команду:

на новом ssw_ecss2

sudo systemctl stop ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-media-server
CODE

Выполните повторную миграции всех таблиц DB командой (подробно описано выше):

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

/system/postgresql/migration/do <DATABASE> <table> 
где DATABASE:


  • address_book
  • audit
  • calls
  • dialer
  • history
  • meetings
  • subscribers

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

на новом ssw_ecss2

sudo systemctl start ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-media-server
CODE

Проверка обновления

После выполнения обновления проверьте работу всех сервисов SSW.

7. Удаление MySQL

  1. Удалите MySQL, выполнив следующие команды:

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

    sudo apt purge ecss-mysql
    CODE

    На вопросы об удалении БД → положительно отвечаем на вопросы - удалить все базы данных