...
- If the latest billing data is needed, the current CDR must be finalized and the CDR files must be downloaded to a remote server:
Без форматирования /domain/test_domain/cdr/make_finalize_cdr Created file(s): cdr_20260122_11_51_16_1_c.csv
- Enable the setting to automatically synchronize files that are in a split (based on the larger file size). For more information, see "Проблемы, связанные с возникновением split-brain".
Блок кодаnoformat title на on ecss1 sudo gluster volume set ecss_volume cluster.favorite-child-policy size
- Остановить репликации Stop MySQL replication.
Убедитесь, что значения параметров Make sure that values of theSlave_IO_RunningиandSlave_SQL_Runningравныparameters areNo.Блок кода title на on ecss1/ecss2 sudo mysql -uroot -p -e 'STOP SLAVE;'
Блок кода title на on ecss1/ecss2 sudo mysql -uroot -p -e 'SHOW SLAVE STATUS \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"
Без форматированияcode title Пример:Example sudo mysql -uroot -p -e 'SHOW SLAVE STATUS \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:" . . . Slave_IO_Running: No Slave_SQL_Running: No . . . When updating the cluster, update the servers one at a time. This ensures that one of the servers will always be running during the update, and service operation will not be interrupted. To split the cluster, use the
ecss-controltool on both servers.SIP signaling is exchanged via the SIP-VRRP IP address. Similarly, the connection to MySQL is established via the MySQL-VRRP IP address. This functionality is implemented to enable IP address migration to another host in the event of a failure, shutdown, or maintenance of the primary host. IP address migration is monitored by the
keepaliveservice on each host. To redirect traffic to the first server (ecss1),keepalivemust be disabled on the second host (ecss2). In this case, both SIP-VRRP IP addresses, as well as the MySQL-VRRP IP address, will be located on the first host (ecss1). Execute the following command:Блок кода title on При обновлении кластера следует обновлять серверы по очереди. Таким образом, во время обновления один из серверов будет всегда запущен и работа сервисов не прервётся. Для разделения кластера следует использовать инструмент
ecss-controlна обоих серверах (описание команд утилиты приведено в «Приложении Н»).Обмен SIP-сигнализацией происходит через SIP-VRRP-IP-адрес. Аналогичным образом, через MySQL-VRRP-IP-адрес происходит подключение к MySQL. Этот функционал реализован для возможности миграции IP-адреса на другой хост в случае падения/отключения/техобслуживания основного хоста. Контроль миграции IP-адресов осуществляется сервисом
keepaliveна каждом хосте. Для перевода трафика на первый сервер (ecss1) необходимо выключитьkeepaliveна втором хосте (ecss2). В этом случае оба SIP-VRRP-IP-адреса, а также MySQL-VRRP-IP-адрес будут находиться на первом хосте (ecss1). Выполнить следующую команду:Блок кода title на ecss2 sudo systemctl disable --now keepalived.service
- Командой
ifconfigпроверить, что все VRRP-IP-адреса находятся на Use the `ifconfig` command to verify that all VRRP IP addresses are on ecss1 (VRRP-mysql/VRRP-SIP1/VRRP-SIP2).Блок кода title на on ecss1 ifconfig
- It is necessary to mask all nodes on the server that will be updated first. Disable the nodes' automatic startup:Необходимо замаскировать все ноды на сервере, который будет обновляться первым. Отключаем автозапуск нод:
Блок кода title на on ecss2 sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm - На On ecss1 выполнить разделение SSW на два независимых сервера следующей командой, split SSW into two independent servers using the following command:
Предупреждение Команда The ecss-control работает со стандартными именами хостов: control command uses the standard hostnames: ecss1/ecss2.
Проверить статусCheck the status:Блок кода title на on ecss1 sudo ecss-control detach
Блок кода title на on ecss1 sudo ecss-control status
Без форматированияcode title Результат:Result sudo ecss-control detach detach host: ecss2, ip: 10.0.10.82 complete sudo ecss-control status locked ip: 10.0.10.82
Предупреждение Нода
sormидёт одна на кластер. В случае её работы на ecss1, при выполнении приложенной команды будет уведомление.Без форматирования Unit /etc/systemd/system/ecss-sorm.service is masked, ignoring.Данное сообщение не является ошибкой. Продолжать выполнение процедуры.
2 Подготовка к обновлению сервисов SSW на ecss2
2 Preparing to update SSW services on ecss2
- Update the SSW repository:
Актуализировать репозиторий SSW:Блок кода title on both hosts sudo sh -c "echo deb [Блок кода title на обоих хостах sudo sh -c "echo deb [arch=amd64] http://archive.eltex.org/ssw/jammy/3.17 stable main extras external > /etc/apt/sources.list.d/eltex-ecss10-stable.list" - Выполнить обновление пакетовPerform the packet update:
Блок кода title на обоих хостахon both hosts sudo apt update
3
...
Updating SSW
...
services on ecss2
- Подготовка партиции на ecss1 для работы с Preparing the ecss1 partition for use with PostgreSQL:
Просмотр монтирования партиции для Viewing the partition mounting for ecss-mysql:
Блок кода title на on ecss1 cat /etc/fstab
Без форматированияcode title Пример вывода:Output example # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda4 during curtin installation /dev/disk/by-uuid/e2750125-8839-491d-b650-8e8cc33627b5 / ext4 defaults 0 1 # /var/lib/mysql was on /dev/sda2 during curtin installation /dev/disk/by-uuid/cea75df1-541b-4b40-b943-a387ba8804e8 /var/lib/mysql ext4 defaults 0 1 # /var/lib/ecss-mysql was on /dev/sda3 during curtin installation /dev/disk/by-uuid/162a2b8b-1e14-4bc7-bf40-dbb216ed2c61 /var/lib/ecss-mysql ext4 defaults 0 1
Создаём новую директорию Create a new
/srv/ecss/ecss-postgres-bdr-sswдля directory for PostgreSQL:Блок кода title на обоих хостахon both hosts sudo mkdir -p /srv/ecss/ecss-postgres-bdr-ssw
Монтируем партицию в новую директориюMount the partition into the new
/srv/ecss/ecss-postgres-bdr-sswдля directory for PostgreSQL:
Обновляем файл Update theБлок кода title на обоих хостахon both hosts sudo mount --bind /var/lib/ecss-mysql /srv/ecss/ecss-postgres-bdr-ssw
/etc/fstab→ добавляем новую директорию для монтирования file → add a new directory to mount (/var/lib/ecss-mysql /srv/ecss/ecss-postgres-bdr-ssw none defaults,bind 0 0):Блок кода title на обоих хостахon both hosts sudo nano /etc/fstab
Без форматированияcode title Пример вывода:Output example # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda4 during curtin installation /dev/disk/by-uuid/e2750125-8839-491d-b650-8e8cc33627b5 / ext4 defaults 0 1 # /var/lib/mysql was on /dev/sda2 during curtin installation /dev/disk/by-uuid/cea75df1-541b-4b40-b943-a387ba8804e8 /var/lib/mysql ext4 defaults 0 1 # /var/lib/ecss-mysql was on /dev/sda3 during curtin installation /dev/disk/by-uuid/162a2b8b-1e14-4bc7-bf40-dbb216ed2c61 /var/lib/ecss-mysql ext4 defaults 0 1 /var/lib/ecss-mysql /srv/ecss/ecss-postgres-bdr-ssw none defaults,bind 0 0
Устанавливаем новую БД Postgres (сначала на ecss1, далее на Install the new Postgres database (first on ecss1, then on ecss2):
Блок кода title на обоих хостах, сначала на ecss1, потом на both hosts: first on ecss1, then on ecss2 sudo apt install ecss-postgres-bdr-ssw
Предупреждение !!!Если при установке пакета выдаетсяIf the following error occurs when installing the package:!!!
ecss-postgres-bdr-ssw : Depends: docker-compose-plugin but it is not installable
выполнить следующие команды (на всех хостахrun the following commands (on all hosts):
Блок кода title на всех хостахon all hosts sudo install -m 0755 -d /etc/apt/keyrings
Блок кода title на всех хостахon all hosts sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
Блок кода title на всех хостахon all hosts sudo chmod a+r /etc/apt/keyrings/docker.asc
Блок кода title на всех хостахon all hosts echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullБлок кода title на всех хостахon all hosts sudo apt update
Блок кода title на обоих хостах, сначала на ecss1, потом на on all hosts, first on ecss1, then on ecss2 sudo apt install ecss-postgres-bdr-ssw
Информация В процессе установки будут заданы вопросы:
- выберите адрес для репликации из списка (на двух хостах);
- подтвердите установку в кластере (на двух хостах);
- укажите «да, я мастер» (на ecss1) или «нет, я не мастер» (на ecss2);
- на ecss2 укажите адрес мастера (указанный в ответе на вопрос 1 для ecss1).
During the installation process, you will be asked the following questions:
- Select a replication address from the list (on both hosts);
- Confirm the installation in the cluster (on both hosts);
- Specify “Yes, I am the master” (on ecss1) or “No, I am not the master” (on ecss2);
- On ecss2, specify the master’s address (specified in the answer to question 1 for ecss1).
- Verify that the replication configuration is correct.
During installation, thepostgresbdr_ssw.shscript is installed in the Проверить корректность настройки репликации.
Во время установки в директорию/srv/ecss/ecss-postgres-bdr-sswустанавливается скриптpostgresbdr_ssw.sh.
Для проверки репликации выполнить следующие команды directory.
To check replication, run the following commands:Блок кода title Для проверки репликации выполнить команду на обоих хостахTo check replication, run the following command on both hosts: cd /srv/ecss/ecss-postgres-bdr-ssw
Блок кода title Для проверки репликации выполнить команду на обоих хостахTo check replication, run the following command on both hosts: sudo ./postgresbdr_ssw.sh check
Подсказка Вывод на хостах Output on ecss1/ecss2 должен быть одинаковый hosts should be the same.
Без форматированияcode title Пример вывода Output example (сокращёнshortened): таблицаnode нодtable наon мастереmaster поvia ecss_storekeeper_db таблицаnode нодtable наon слейвеslave поvia ecss_storekeeper_db таблицаconnection коннекцийtable наfor мастерmaster поvia ecss_storekeeper_db conn_sysid | conn_dsn ---------------------+--------------------------------------------------------------------------------------- 7569499877813944343 | host=10.0.10.81 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 7569514001040228374 | host=10.0.10.82 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 (2 rows) таблицаconnection коннекцийtable наfor слейвеslave поvia ecss_storekeeper_db conn_sysid | conn_dsn ---------------------+--------------------------------------------------------------------------------------- 7569499877813944343 | host=10.0.10.81 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 7569514001040228374 | host=10.0.10.82 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 (2 rows)
Обновление пакетаUpdating the
ecss-dns-env package:Блок кода title на on ecss2 sudowsudo apt install ecss-dns-env
Подсказка При обновлении нужно применить новые конфигурационные файлы (подтверждением When updating, you must apply the new configuration files (confirm with -Y).
После обновления нужно актуализировать конфигурацию, выполнив команду. Ответы на вопросы аналогичны процедуре инсталляцииAfter the update, the configuration should be updated by running the command below. The answers to the questions are the same as during the installation procedure:
Блок кода title на on ecss2 sudo dpkg-reconfigure ecss-dns-env
Выполнить обновление пакетаUpdate the
ecss-userpackage:Блок кода title на on ecss2 sudo apt install ecss-user
Выполнить обновление пакета Update the
ecss-utilspackage:Блок кода title на on ecss2 sudo apt install ecss-utils
Выполнить обновление пакета Update the
ecss-nodepackage:Блок кода title на on ecss2 sudo apt install ecss-node
Информация ВОПРОСЫ НА УСТАНОВКУ ecss-node installation questions:
- ECSS-node ID in DNS format: <Согласно лицензии><According to the license>.
- Default configuration: yes
- Global config: yes
Принимаем все изменения файлов конфигурации.
Accept all configuration file changes.
Perform
СoConusers migration Выполнить миграцию пользователейСoCon(audit_database):Блок кода title на on ecss2 /usr/bin/migrate_cocon.exs
Информация title В скобках указаны значения по умолчанию. Введите свои, если они отличаютсяThe values in parentheses are the default ones. Enter your own values if they differ. MySQL database hostname (cocon.mysql.ecss):
MySQL database port (3306):
ecss_audit database username (audit):
ecss_audit database password (audit):- Включаем нодыEnable the nodes.
Включить сервисы SSW следующими командамиEnable the SSW services using the following commands:
Блок кода title на on ecss2 sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sormБлок кода title на on ecss2 sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm - Запуск Starting SSW на on ecss2. Запустить следующие сервисыEnable the following services:
ecss-mycelium
ecss-dsБлок кода title на on ecss2 sudo systemctl start ecss-mycelium
ecss-coreБлок кода title на on ecss2 sudo systemctl start ecss-ds
ecss-mediatorБлок кода title на on ecss2 sudo systemctl start ecss-coreБлок кода title на ecss2 sudo systemctl start ecss-mediatorПодсказка Если лицензия поддерживает СОРМ3, то запустить также сервис
ecss-sorm:Блок кода title на ecss2 sudo systemctl start ecss-sormЕсли сервис
ecss-sormоказался замаскирован, то выполнить следующие команды:Блок кода title на ecss2 sudo systemctl unmask ecss-sorm sudo systemctl start ecss-sormПодсказка Для корректной работы SORM3 необходимо выполнить коррекцию команды для SORM-экстрактора. Данную команду необходимо выполнить для каждого домена в SSW:
Блок кода title выполняется в CoCon /domain/<Имя_домена>/sorm3/set extractor_node sorm1@ecss2панель title Пример для домена test_domain: /domain/test_domain/sorm3/info┌──────────────────┬───────────┬───────────┐│ Property │ Domain │ Value │├──────────────────┼───────────┼───────────┤│adaptation │test_domain│undefined ││enabled │test_domain│false ││entrypoint_profile│test_domain│ ││extractor_ip │test_domain│127.0.0.1 ││extractor_node │test_domain│sorm1@ecss1│└──────────────────┴───────────┴───────────┘/domain/test_domain/sorm3/set extractor_node sorm1@ecss2Property "extractor_node" successfully changed from:sorm1@ecss1tosorm1@ecss2./domain/test_domain/sorm3/info┌──────────────────┬───────────┬───────────┐│ Property │ Domain │ Value │├──────────────────┼───────────┼───────────┤│adaptation │test_domain│undefined ││enabled │test_domain│false ││entrypoint_profile│test_domain│ ││extractor_ip │test_domain│127.0.0.1 ││extractor_node │test_domain│sorm1@ecss2│└──────────────────┴───────────┴───────────┘Команду повторить для всех доменов в SSW
Предупреждение ПОКА НЕ ЗАПУСКАЕМ PA-SIP!
ecss-mediatorecss-coreБлок кода title on ecss2 sudo systemctl start ecss-mediatorПредупреждение DO NOT START PA-SIP YET!
Check the service status by running the
system-statuscommand in CoCon:Блок кода title performed in Проверить статус сервисов, для этого выполнить в CoCon команду
system-status:Без форматирования title выполняется в CoCon /system-status Checking... ┌─┬───────────────┬────────────────────────────┬───────────────┬────────────┬──────┐ │ │ Node │ Release │ Erlang nodes │Mnesia nodes│Uptime│ ├─┼───────────────┼────────────────────────────┼───────────────┼────────────┼──────┤ │ │core1@ecss2 │ecss-core-3.17.1.0.1771 │core1@ecss2 │not running │2m 27s│ │ │ds1@ecss2 │ecss-ds-3.17.1.0.1771 │ds1@ecss2 │ds1@ecss2 │2m 32s│ │ │md1@ecss2 │ecss-mediator-3.17.1.0.1771 │md1@ecss2 │md1@ecss2 │2m 16s│ │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss2│not running │2m 39s│ │ │sorm1@ecss2 │ecss-sorm-3.17.1.0.1771 │sorm1@ecss2 │not running │1m 56s│ └─┴───────────────┴────────────────────────────┴───────────────┴────────────┴──────┘ All services are started. Active media resource selected list specific: ┌─────────────┬───────────┬─────────────┬───────────┬───────────┐ │ Node │ MSR │ MSR │ Cc-status │ Cc-uptime │ │ │ │ version │ │ │ ├─────────────┼───────────┼─────────────┼───────────┼───────────┤ │ core1@ecss2 │ msr.ecss1 │ 3.14.16.1.0 │ connected │ 00:00:10 │ │ │ msr.ecss2 │ 3.14.16.1.0 │ connected │ 00:00:10 │ └─────────────┴───────────┴─────────────┴───────────┴───────────┘
- Выполнить миграции таблиц DB (подробное описание)
Проверить, какие данные доступны для переноса, можно командойMigrate the database tables
To check, which data is available for migration, use the following command:панель title выполняется в performed in CoCon /system/postgresql/migration/check <DATABASE> *
где where DATABASE is:
address_book, audit, calls, dialer, history, meetings, subscribers.
Миграцию выполнить командойБез форматированияcode title Пример вывода:Output example /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 │ │ └────────────┴────────────────┴────────────────────────────────────┴───────────────────────────────┘
Perform migration using the following command:
Проверить прохождение миграции можно командойCheck the migration using the following command:Блок кода title выполняется в performed in CoCon /system/postgresql/migration/do <DATABASE> <TABLE>
Блок кода title выполняется в performed in CoCon /system/postgresql/migration/info <DATABASE> <TABLE>
Без форматированияcode title Пример вывода:Output example /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 │ │ │ └────┴────────────┴────────────────────┴──────────┴────────────────┴───────────────────┴───────────────────┘
- Обновление пакетаUpdating the
ecss-restfspacket.Подсказка Принять все новые конфигурационные файлы, выбирая Accept all new configuration files using Y. Блок кода title на on ecss2 sudo apt install ecss-restfs
Обновление пакета
ecss-media-server.Предупреждение Media Server анализирует конфигурацию в файлах, находящихся в директории /etc/ecss/ecss-media-server/. В версии 3.17 реализована новая функция контроля приоритетности кодеков. Если по какой-либо причине в нескольких файлах секция "codec" содержит повторяющиеся записи одного и того же кодека, после обновления возникнет конфликт, и Media Server не запустится.
Поэтому в конфигурационных файлах одного Media Server не должно быть конфликтов по приоритетам кодеков (запись об одном кодеке должна быть одна и не повторяться в других файлах). Какие именно файлы требуется сконфигурировать — на усмотрение администратора системы.
Предварительно отключить регистрацию на рабочий хост ecss1. Для этого надо закомментировать в конфигурационном файле строку с realm рабочего хоста (в примере realm="sip:10.0.20.81:5000"), добавив<!--в начале строки и-->в конце:Блок кода title на ecss2 sudo nano /etc/ecss/ecss-media-server/conf.d/default.xml
Выполнить обновление:Без форматирования title пример <?xml version="1.0"?> <config> <accounts> <!--<dynamic msr_name="msr.ecss2" realm="sip:10.0.20.81:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>--> <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.82:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/> </accounts> </config>
Актуализировать конфигурацию:Блок кода title на ecss2 sudo apt install ecss-media-server
Выполнить проверку, и при необходимости отредактировать файл командой:Блок кода title на ecss2 sudo dpkg-reconfigure ecss-media-server
Блок кода title на ecss2 sudo nano /etc/ecss/ecss-media-server/config.xml
Раскрыть title пример Блок кода title пример <?xml version="1.0" encoding="utf-8"?> <config date="16:54:35 20.02.2025"> <general log-level="3" log-rotate="yes" max-calls="8192" max-vid-calls="8192" 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.80" 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="2048" 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" 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.82" port="5700"/> </pbyte> <conf_dir path="/etc/ecss/ecss-media-server/conf.d"/> <metrics enable="no" msr_name="msr" port="8100"/> <rtp> <auto addr-v4=""/> </rtp> </config>Обновление пакета
ecss-media-resources:Блок кода title на ecss2 sudo apt install ecss-media-resources
Обновление пакета
ecss-web-conf:Блок кода title на ecss2 sudo apt install ecss-web-conf
Раскрыть title Обновление пакетов опциональных сервисов Обновление пакета
ecss-teleconference-ui:Блок кода title на ecss2 sudo apt install ecss-teleconference-ui
Обновление пакета
ecss-crm-server:Блок кода title на ecss2 sudo apt install ecss-crm-server
Обновление пакета
ecss-cc-ui:Блок кода title на ecss2 sudo apt install ecss-cc-ui
Обновление пакета
ecss-call-api:Блок кода title на ecss2 sudo apt install ecss-call-api
Обновление пакета
ecss-peeper-client:Блок кода title на ecss2 sudo apt install ecss-peeper-client
- Переносим актуальные регистрации абонентов:
Перед переводом keepalived на обновленный хост необходимо скопировать актуальную базу ds с ecss1 (иначе база регистраций будет пустая). Поэтому сначала делаем backup БД Mnesia на ecss1:Блок кода title выполняется в CoCon /node/ds1@ecss1/oasys/backup
Без форматирования /node/ds1@ecss1/oasys/backup Backup was successfully created at the path: "/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517"
Останавливаем ecss-ds на ecss2:
Блок кода title на ecss2 sudo systemctl stop ecss-ds
Командой scp копируем backup c ecss1 на ecss2:
Блок кода title на ecss2 scp -r ecss@ecss1:/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys
Выполняем локальную копию текущей конфигурации:
Блок кода title на ecss2 sudo cp -a /var/lib/ecss/oasys/Mnesia.ds1@ecss2 /var/lib/ecss/oasys/Mnesia.ds1@ecss2-bkp
Заменяем локальную конфигурацию на конфигурацию backup c ecss1:
Блок кода title на ecss2 sudo mv /var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys/Mnesia.ds1@ecss2
Блок кода title на ecss2 sudo chown -R ssw:ssw /var/lib/ecss/oasys
Запустить ecss-ds и ecss-pa-sip (чтобы подгрузились актуальные регистрации абонентов):
Блок кода title на ecss2 sudo systemctl start ecss-ds
Блок кода title на ecss2 sudo systemctl start ecss-pa-sip
Проверить статус сервисов командой
/system-status:
Проверить перенос активных регистраций на обновлённый хост. Для этого выполнить контроль зарегистрированных абонентов на одном (3.14.16) и втором (3.17) хостах. Выполнить команду в CoCon:Блок кода title выполняется в CoCon /system-status Checking... ┌─┬───────────────┬────────────────────────────┬───────────────┬────────────┬──────┐ │ │ Node │ Release │ Erlang nodes │Mnesia nodes│Uptime│ ├─┼───────────────┼────────────────────────────┼───────────────┼────────────┼──────┤ │ │core1@ecss2 │ecss-core-3.17.1.0.1771 │core1@ecss2 │not running │2m 27s│ │ │ds1@ecss2 │ecss-ds-3.17.1.0.1771 │ds1@ecss2 │ds1@ecss2 │2m 32s│ │ │md1@ecss2 │ecss-mediator-3.17.1.0.1771 │md1@ecss2 │md1@ecss2 │2m 16s│ │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss2│not running │2m 39s│ │ │sip1@ecss2 │ecss-pa-sip-3.17.1.0.1771 │sip1@ecss2 │sip1@ecss2 │2m 22s│ │ │sorm1@ecss2 │ecss-sorm-3.17.1.0.1771 │sorm1@ecss2 │not running │1m 56s│ └─┴───────────────┴────────────────────────────┴───────────────┴────────────┴──────┘ All services are started. Active media resource selected list specific: ┌─────────────┬───────────┬─────────────┬───────────┬───────────┐ │ Node │ MSR │ MSR │ Cc-status │ Cc-uptime │ │ │ │ version │ │ │ ├─────────────┼───────────┼─────────────┼───────────┼───────────┤ │ core1@ecss2 │ msr.ecss1 │ 3.14.16.1.0 │ connected │ 00:00:10 │ │ │ msr.ecss2 │ 3.17.1.0.28 │ connected │ 00:00:10 │ └─────────────┴───────────┴─────────────┴───────────┴───────────┘
Блок кода title выполняется в CoCon на ecss2 /domain/test_domain/sip/user/registered sip * 450 make users list ... [**********************************************************************] 28mks 450 users information read ... [**********************************************************************] 1ms Executed on the sip1@ecss2 ┌───────────────┐ │ elements: 436 │ └───────────────┘
Блок кода title выполняется в CoCon на ecss1 /domain/test_domain/sip/user/registered sip * 450 make users list ... [**********************************************************************] 28mks 450 users information read ... [**********************************************************************] 1ms Executed on the sip1@ecss1 ┌───────────────┐ │ elements: 438 │ └───────────────┘
Запуск сервиса
keepalived:Блок кода title на ecss2 sudo systemctl enable --now keepalived
...
Подготовить ecss1 к обновлению: для этого перевести весь трафик на ecss2 (команда выполняется на ecss1):
Блок кода title на ecss1 sudo systemctl disable --now keepalived.service
Командой ifconfig проверьте, что все VRRP-адреса (VRRP IP-mysql / VRRP IP-SIP1 / VRRP IP-SIP2) находятся на ecss2:
Блок кода title на ecss2 ifconfig
- После разделения кластера необходимо выключить все ноды на сервере ecss1:
Блок кода title на ecss1 sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm - Выполнить миграции таблиц DB (подробное описание).
Проверить, какие данные доступны для переноса, можно командой:панель title выполняется в CoCon /system/postgresql/migration/check <DATABASE> *где DATABASE:address_bookauditcallsdialerhistorymeetingssubscribers
Без форматирования title Пример: /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 │ │ └────────────┴────────────────┴────────────────────────────────────┴───────────────────────────────┘
Миграцию выполнить командой:
Проверить прохождение миграции можно командой:Блок кода title выполняется в CoCon /system/postgresql/migration/do <DATABASE> <TABLE>
Блок кода title выполняется в CoCon /system/postgresql/migration/info <DATABASE> <TABLE>
Без форматирования title Пример: /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 │ │ │ └────┴────────────┴────────────────────┴──────────┴────────────────┴───────────────────┴───────────────────┘
...
- Выполнить на ecss2 объединение в кластер:
Блок кода title на ecss2 sudo ecss-control attach
- Активация сервиса keepalived:
Блок кода title на ecss1 sudo systemctl enable --now keepalived
Обновление пакета
ecss-dns-env:Блок кода title на ecss1 sudo apt install ecss-dns-env
После обновления актуализировать конфигурацию командой:Подсказка При обновлении принимать новые конфигурационные файлы -Y. Блок кода title на ecss1 sudo dpkg-reconfigure ecss-dns-env
Обновление пакета
ecss-user:Блок кода title на ecss1 sudo apt install ecss-user
Обновление пакета
ecss-utils:Блок кода title на ecss1 sudo apt install ecss-utils
Обновление пакета
ecss-node:Блок кода title на ecss1 sudo apt install ecss-node
Информация title на ecss1 ВОПРОСЫ НА УСТАНОВКУ ecss-node:
- ECSS-node ID in DNS format: <Согласно лицензии>.
- Default configuration: yes
- Global config: yes
Принимаем все изменения файлов конфигурации !
Включить сервисы SSW:
Блок кода title на ecss1 sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sormБлок кода title на ecss1 sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sormСервис
ecss-sormна ecss1 сразу замаскировать, так как у нас заявлена работа ecss-sorm на одном хосте в кластере:Блок кода title на ecss1 sudo systemctl mask ecss-sormНа ecss1 запустите сервис mycelium и в CoCon проверьте, что сервис поднялся и видны ноды mycelium хостов ecss1/ecss2:
Блок кода title на ecss1 sudo systemctl start ecss-mycelium
Без форматирования title выполняется в CoCon /system-status Checking... ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬────────────┬───────┐ │ │ Node │ Release │ Erlang nodes │Mnesia nodes│Uptime │ ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼────────────┼───────┤ │ │core1@ecss2 │ecss-core-3.17.1.0.1771 │core1@ecss2 │not running │3h 5m │ │ │ds1@ecss2 │ecss-ds-3.17.1.0.1771 │ds1@ecss2 │ds1@ecss2 │3h 5m │ │ │md1@ecss2 │ecss-mediator-3.17.1.0.1771 │md1@ecss2 │md1@ecss2 │3h 5m │ │ │mycelium1@ecss1│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running │10m 42s│ │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running │3h 5m │ │ │sip1@ecss2 │ecss-pa-sip-3.17.1.0.1771 │sip1@ecss2 │sip1@ecss2 │3h 5m │ │ │sorm1@ecss2 │ecss-sorm-3.17.1.0.1771 │sorm1@ecss2 │not running │3h 5m │ └─┴───────────────┴────────────────────────────┴───────────────────────────────┴────────────┴───────┘ All services are started. Active media resource selected list specific: ┌─────────────┬───────────┬───────────────┬───────────┬───────────┐ │ Node │ MSR │ MSR │ Cc-status │ Cc-uptime │ │ │ │ version │ │ │ ├─────────────┼───────────┼───────────────┼───────────┼───────────┤ │ core1@ecss2 │ msr.ecss1 │ 3.14.16.1.0 │ connected │ 00:21:09 │ │ │ msr.ecss2 │ 3.17.1.0.28 │ connected │ 00:00:59 │ └─────────────┴───────────┴───────────────┴───────────┴───────────┘
Перед запуском ecss-ds на ecss1 необходимо переименовать директорию /var/lib/ecss/oasys (создав резервную копию), чтобы загрузить актуальную БД с другого хоста.
Блок кода title на ecss1 sudo mv /var/lib/ecss/oasys /var/lib/ecss/oasys-$(date +%Y%m%d-%H_%M)
Подсказка После этого ecss-ds на хосте ecss1 загрузит БД с ecss2.
- На ecss1 запустите сервис ds и в CoCon проверить, что сервис ds доступен на обоих хостах ecss1/ ecss2:
Блок кода title на ecss1 sudo systemctl start ecss-ds
Без форматирования title выполняется в CoCon /system-status Checking... ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬───────────────────┬───────┐ │ │ Node │ Release │ Erlang nodes │ Mnesia nodes │Uptime │ ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼───────────────────┼───────┤ │ │core1@ecss2 │ecss-core-3.17.1.0.1771 │core1@ecss2 │not running │3h 13m │ │ │ds1@ecss1 │ecss-ds-3.17.1.0.1771 │ds1@ecss1,ds1@ecss2 │ds1@ecss1,ds1@ecss2│12s │ │ │ds1@ecss2 │ecss-ds-3.17.1.0.1771 │ds1@ecss1,ds1@ecss2 │ds1@ecss1,ds1@ecss2│3h 13m │ │ │md1@ecss2 │ecss-mediator-3.17.1.0.1771 │md1@ecss2 │md1@ecss2 │3h 13m │ │ │mycelium1@ecss1│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running │18m 33s│ │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running │3h 13m │ │ │sip1@ecss2 │ecss-pa-sip-3.17.1.0.1771 │sip1@ecss2 │sip1@ecss2 │3h 13m │ │ │sorm1@ecss2 │ecss-sorm-3.17.1.0.1771 │sorm1@ecss2 │not running │3h 12m │ └─┴───────────────┴────────────────────────────┴───────────────────────────────┴───────────────────┴───────┘ All services are started. Active media resource selected list specific: ┌─────────────┬───────────┬───────────────┬───────────┬───────────┐ │ Node │ MSR │ MSR │ Cc-status │ Cc-uptime │ │ │ │ version │ │ │ ├─────────────┼───────────┼───────────────┼───────────┼───────────┤ │ core1@ecss2 │ msr.ecss1 │ 3.14.16.1.0 │ connected │ 00:29:01 │ │ │ msr.ecss2 │ 3.17.1.0.28 │ connected │ 00:08:50 │ └─────────────┴───────────┴───────────────┴───────────┴───────────┘
- Далее такими же действиями запустить сервисы: ecss-mediator, ecss-pa-sip, ecss-core следующими командами:
Блок кода title на ecss1 sudo systemctl start ecss-core
Блок кода title на ecss1 sudo systemctl start ecss-mediator
Проверить статус в CoCon:Блок кода title на ecss1 sudo systemctl start ecss-pa-sip
Без форматирования title Результат: /system-status Checking... ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬─────────────────────┬──────┐ │ │ Node │ Release │ Erlang nodes │ Mnesia nodes │Uptime│ ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼─────────────────────┼──────┤ │ │core1@ecss1 │ecss-core-3.17.1.0.1771 │core1@ecss1,core1@ecss2 │not running │3m 50s│ │ │core1@ecss2 │ecss-core-3.17.1.0.1771 │core1@ecss1,core1@ecss2 │not running │3h 22m│ │ │ds1@ecss1 │ecss-ds-3.17.1.0.1771 │ds1@ecss1,ds1@ecss2 │ds1@ecss1,ds1@ecss2 │9m 42s│ │ │ds1@ecss2 │ecss-ds-3.17.1.0.1771 │ds1@ecss1,ds1@ecss2 │ds1@ecss1,ds1@ecss2 │3h 22m│ │ │md1@ecss1 │ecss-mediator-3.17.1.0.1771 │md1@ecss1,md1@ecss2 │md1@ecss1,md1@ecss2 │5m 22s│ │ │md1@ecss2 │ecss-mediator-3.17.1.0.1771 │md1@ecss1,md1@ecss2 │md1@ecss1,md1@ecss2 │3h 22m│ │ │mycelium1@ecss1│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running │28m 4s│ │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running │3h 23m│ │ │sip1@ecss1 │ecss-pa-sip-3.17.1.0.1771 │sip1@ecss1,sip1@ecss2 │sip1@ecss1,sip1@ecss2│4m 40s│ │ │sip1@ecss2 │ecss-pa-sip-3.17.1.0.1771 │sip1@ecss1,sip1@ecss2 │sip1@ecss1,sip1@ecss2│3h 22m│ │ │sorm1@ecss2 │ecss-sorm-3.17.1.0.1771 │sorm1@ecss2 │not running │3h 22m│ └─┴───────────────┴────────────────────────────┴───────────────────────────────┴─────────────────────┴──────┘ All services are started. Active media resource selected list specific: ┌─────────────┬───────────┬───────────────┬───────────┬───────────┐ │ Node │ MSR │ MSR │ Cc-status │ Cc-uptime │ │ │ │ version │ │ │ ├─────────────┼───────────┼───────────────┼───────────┼───────────┤ │ core1@ecss1 │ msr.ecss1 │ 3.14.16.1.0 │ connected │ 00:02:37 │ │ core1@ecss2 │ msr.ecss1 │ 3.14.16.1.0 │ connected │ 00:38:31 │ │ │ msr.ecss2 │ 3.17.1.0.28 │ connected │ 00:18:20 │ └─────────────┴───────────┴───────────────┴───────────┴───────────┘
- Обновление пакета
ecss-restfs:Блок кода title на ecss1 sudo apt install ecss-restfs
- Обновление пакета
ecss-media-server:
Актуализировать конфигурацию:Блок кода title на ecss1 sudo apt install ecss-media-server
Блок кода title на ecss1 sudo dpkg-reconfigure ecss-media-server
Проверить и при необходимости исправить вручную файл
/etc/ecss/ecss-media-server/config.xml.
Также, для регистрации media-сервера с ecss2 на ecss1 надо убрать ранее добавленные комментарии из файлаРаскрыть title пример Без форматирования title на ecss1 <?xml version="1.0" encoding="utf-8"?> <config date="05:27:38 07.12.2024"> <general log-level="3" log-rotate="yes" max-calls="8192" max-vid-calls="8192" 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.82" 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="2048" 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" 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="3" pcmu="2" ilbc="0" gsm="0" g722="3" g726="0" g729="1" speex="5" l16="0" g7221="6" 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.82" port="5700"/> </pbyte> <conf_dir path="/etc/ecss/ecss-media-server/conf.d"/> <metrics enable="no"/> <rtp> <auto addr-v4=""/> </rtp> </config>/etc/ecss/ecss-media-server/conf.d/default.xmlна ecss2:
После чего перезапустить сервис:Раскрыть title на ecss2 <?xml version="1.0"?> <config> <accounts> <!--<dynamic msr_name="msr.ecss2" realm="sip:10.0.20.81:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>--> <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.82:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/> </accounts> </config>Блок кода title на ecss2 sudo systemctl restart ecss-media-server.service
Обновление пакета
ecss-media-resources:Блок кода title на ecss1 sudo apt install ecss-media-resources
Обновление пакета
ecss-web-conf:Блок кода title на ecss1 sudo apt install ecss-web-conf
Раскрыть title Обновление пакетов опциональных сервисов Обновление пакета
ecss-teleconference-ui:Блок кода title на ecss1 sudo apt install ecss-teleconference-ui
Обновление пакета
ecss-crm-server:Блок кода title на ecss1 sudo apt install ecss-crm-server
Обновление пакета
ecss-cc-ui:Блок кода title на ecss1 sudo apt install ecss-cc-ui
Обновление пакета
ecss-call-api:Блок кода title на ecss2 sudo apt install ecss-call-api
Обновление пакета
ecss-peeper-client:Блок кода title на ecss2 sudo apt install ecss-peeper-client
...
7. Удаление MySQL
...