Обновление с версии 3.14.16 на 3.17
1 Подготовительные действия на ecss2
- Если нужны последние данные биллинга, то необходимо финализировать текущую cdr и скачать CDR файлы на удаленный сервер:
/domain/test_domain/cdr/make_finalize_cdr Created file(s): cdr_20260122_11_51_16_1_c.csv
- Включить настройку для автоматической синхронизации файлов, находящихся в сплите (по большему размеру). Подробнее см. "Проблемы, связанные с возникновением split-brain".на ecss1
sudo gluster volume set ecss_volume cluster.favorite-child-policy size
- Остановить репликации MySQL.
Убедитесь, что значения параметровSlave_IO_RunningиSlave_SQL_RunningравныNo.на ecss1/ecss2sudo mysql -uroot -p -e 'STOP SLAVE;'
на ecss1/ecss2sudo mysql -uroot -p -e 'SHOW SLAVE STATUS \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"
Пример: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 . . . При обновлении кластера следует обновлять серверы по очереди. Таким образом, во время обновления один из серверов будет всегда запущен и работа сервисов не прервётся. Для разделения кластера следует использовать инструмент
ecss-controlна обоих серверах (описание команд утилиты приведено в «Приложении Н»).Обмен SIP-сигнализацией происходит через SIP-VRRP-IP-адрес. Аналогичным образом, через MySQL-VRRP-IP-адрес происходит подключение к MySQL. Этот функционал реализован для возможности миграции IP-адреса на другой хост в случае падения/отключения/техобслуживания основного хоста. Контроль миграции IP-адресов осуществляется сервисом
keepaliveна каждом хосте. Для перевода трафика на первый сервер (ecss1) необходимо выключитьkeepaliveна втором хосте (ecss2). В этом случае оба SIP-VRRP-IP-адреса, а также MySQL-VRRP-IP-адрес будут находиться на первом хосте (ecss1). Выполнить следующую команду:на ecss2sudo systemctl disable --now keepalived.service
- Командой
ifconfigпроверить, что все VRRP-IP-адреса находятся на ecss1 (VRRP-mysql/VRRP-SIP1/VRRP-SIP2).на ecss1ifconfig
- Необходимо замаскировать все ноды на сервере, который будет обновляться первым. Отключаем автозапуск нод:на ecss2
sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
- На ecss1 выполнить разделение SSW на два независимых сервера следующей командой:
Команда ecss-control работает со стандартными именами хостов: ecss1/ecss2.
Проверить статус:на ecss1sudo ecss-control detach
на ecss1sudo ecss-control status
Результат: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
- Актуализировать репозиторий SSW:на обоих хостах
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"
- Выполнить обновление пакетов:на обоих хостах
sudo apt update
3 Обновление сервисов SSW на ecss2
- Подготовка партиции на ecss1 для работы с PostgreSQL:
Просмотр монтирования партиции для ecss-mysql:
на ecss1cat /etc/fstab
Пример вывода:# /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
Создаём новую директорию
/srv/ecss/ecss-postgres-bdr-sswдля PostgreSQL:на обоих хостахsudo mkdir -p /srv/ecss/ecss-postgres-bdr-ssw
Монтируем партицию в новую директорию
/srv/ecss/ecss-postgres-bdr-sswдля PostgreSQL:Обновляем файлна обоих хостахsudo mount --bind /var/lib/ecss-mysql /srv/ecss/ecss-postgres-bdr-ssw
/etc/fstab→ добавляем новую директорию для монтирования (/var/lib/ecss-mysql /srv/ecss/ecss-postgres-bdr-ssw none defaults,bind 0 0):на обоих хостахsudo nano /etc/fstab
Пример вывода:# /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, далее на ecss2):
на обоих хостах, сначала на ecss1, потом на ecss2sudo apt install ecss-postgres-bdr-ssw
!!!Если при установке пакета выдается:!!!
ecss-postgres-bdr-ssw : Depends: docker-compose-plugin but it is not installable
выполнить следующие команды (на всех хостах):
на всех хостахsudo install -m 0755 -d /etc/apt/keyrings
на всех хостахsudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
на всех хостахsudo chmod a+r /etc/apt/keyrings/docker.asc
на всех хостах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на всех хостахsudo apt update
на обоих хостах, сначала на ecss1, потом на ecss2sudo apt install ecss-postgres-bdr-ssw
В процессе установки будут заданы вопросы:
- выберите адрес для репликации из списка (на двух хостах);
- подтвердите установку в кластере (на двух хостах);
- укажите «да, я мастер» (на ecss1) или «нет, я не мастер» (на ecss2);
- на ecss2 укажите адрес мастера (указанный в ответе на вопрос 1 для ecss1).
- Проверить корректность настройки репликации.
Во время установки в директорию/srv/ecss/ecss-postgres-bdr-sswустанавливается скриптpostgresbdr_ssw.sh.
Для проверки репликации выполнить следующие команды:Для проверки репликации выполнить команду на обоих хостах:cd /srv/ecss/ecss-postgres-bdr-ssw
Для проверки репликации выполнить команду на обоих хостах:sudo ./postgresbdr_ssw.sh check
Вывод на хостах ecss1/ecss2 должен быть одинаковый.
Пример вывода (сокращён):таблица нод на мастере по ecss_storekeeper_db таблица нод на слейве по ecss_storekeeper_db таблица коннекций на мастер по 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) таблица коннекций на слейве по 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) Обновление пакета
ecss-dns-env:на ecss2sudo apt install ecss-dns-env
При обновлении нужно применить новые конфигурационные файлы (подтверждением -Y).
После обновления нужно актуализировать конфигурацию, выполнив команду. Ответы на вопросы аналогичны процедуре инсталляции:
на ecss2sudo dpkg-reconfigure ecss-dns-env
Выполнить обновление пакета
ecss-user:на ecss2sudo apt install ecss-user
Выполнить обновление пакета
ecss-utils:на ecss2sudo apt install ecss-utils
Выполнить обновление пакета
ecss-node:на ecss2sudo apt install ecss-node
ВОПРОСЫ НА УСТАНОВКУ ecss-node:
- ECSS-node ID in DNS format: <Согласно лицензии>.
- Default configuration: yes
- Global config: yes
Принимаем все изменения файлов конфигурации.
Выполнить миграцию пользователей
СoCon(audit_database):на ecss2/usr/bin/migrate_cocon.exs
В скобках указаны значения по умолчанию. Введите свои, если они отличаются.
MySQL database hostname (cocon.mysql.ecss):
MySQL database port (3306):
ecss_audit database username (audit):
ecss_audit database password (audit):- Включаем ноды.
Включить сервисы SSW следующими командами:
на ecss2sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
на ecss2sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
- Запуск SSW на ecss2. Запустить следующие сервисы:
ecss-myceliumecss-dsна ecss2sudo systemctl start ecss-mycelium
ecss-coreна ecss2sudo systemctl start ecss-ds
ecss-mediatorна ecss2sudo systemctl start ecss-core
на ecss2sudo systemctl start ecss-mediator
Если лицензия поддерживает СОРМ3, то запустить также сервис
ecss-sorm:на ecss2sudo systemctl start ecss-sorm
Если сервис
ecss-sormоказался замаскирован, то выполнить следующие команды:на ecss2sudo systemctl unmask ecss-sorm sudo systemctl start ecss-sorm
Для корректной работы SORM3 необходимо выполнить коррекцию команды для SORM-экстрактора. Данную команду необходимо выполнить для каждого домена в SSW:
выполняется в CoCon/domain/<Имя_домена>/sorm3/set extractor_node sorm1@ecss2
Пример для домена 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!
Проверить статус сервисов, для этого выполнить в CoCon команду
system-status:выполняется в 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 (подробное описание)
Проверить, какие данные доступны для переноса, можно командой:выполняется в CoCon/system/postgresql/migration/check <DATABASE> *
где DATABASE:
address_book, audit, calls, dialer, history, meetings, subscribers.Пример вывода:/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>
выполняется в CoCon/system/postgresql/migration/info <DATABASE> <TABLE>
Пример вывода:/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-restfs.Принять все новые конфигурационные файлы, выбирая Y.на ecss2sudo 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"), добавив<!--в начале строки и-->в конце:на ecss2sudo nano /etc/ecss/ecss-media-server/conf.d/default.xml
Выполнить обновление:пример<?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>Актуализировать конфигурацию:на ecss2sudo apt install ecss-media-server
Выполнить проверку, и при необходимости отредактировать файл командой:на ecss2sudo dpkg-reconfigure ecss-media-server
на ecss2sudo nano /etc/ecss/ecss-media-server/config.xml
Обновление пакета
ecss-media-resources:на ecss2sudo apt install ecss-media-resources
Обновление пакета
ecss-web-conf:на ecss2sudo apt install ecss-web-conf
- Переносим актуальные регистрации абонентов:
Перед переводом keepalived на обновленный хост необходимо скопировать актуальную базу ds с ecss1 (иначе база регистраций будет пустая). Поэтому сначала делаем backup БД Mnesia на ecss1:выполняется в 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:
на ecss2sudo systemctl stop ecss-ds
Командой scp копируем backup c ecss1 на ecss2:
на ecss2scp -r ecss@ecss1:/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys
Выполняем локальную копию текущей конфигурации:
на ecss2sudo cp -a /var/lib/ecss/oasys/Mnesia.ds1@ecss2 /var/lib/ecss/oasys/Mnesia.ds1@ecss2-bkp
Заменяем локальную конфигурацию на конфигурацию backup c ecss1:
на ecss2sudo mv /var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys/Mnesia.ds1@ecss2
на ecss2sudo chown -R ssw:ssw /var/lib/ecss/oasys
Запустить ecss-ds и ecss-pa-sip (чтобы подгрузились актуальные регистрации абонентов):
на ecss2sudo systemctl start ecss-ds
на ecss2sudo systemctl start ecss-pa-sip
Проверить статус сервисов командой
/system-status:Проверить перенос активных регистраций на обновлённый хост. Для этого выполнить контроль зарегистрированных абонентов на одном (3.14.16) и втором (3.17) хостах. Выполнить команду в CoCon:выполняется в 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 │ └─────────────┴───────────┴─────────────┴───────────┴───────────┘
выполняется в 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 │ └───────────────┘
выполняется в 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:на ecss2sudo systemctl enable --now keepalived
4 Подготовительные действия на ecss1
Подготовить ecss1 к обновлению: для этого перевести весь трафик на ecss2 (команда выполняется на ecss1):
на ecss1sudo systemctl disable --now keepalived.service
Командой ifconfig проверьте, что все VRRP-адреса (VRRP IP-mysql / VRRP IP-SIP1 / VRRP IP-SIP2) находятся на ecss2:
на ecss2ifconfig
- После разделения кластера необходимо выключить все ноды на сервере ecss1:на ecss1
sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
- Выполнить миграции таблиц DB (подробное описание).
Проверить, какие данные доступны для переноса, можно командой:выполняется в CoCon/system/postgresql/migration/check <DATABASE> *где DATABASE:address_bookauditcallsdialerhistorymeetingssubscribers
Пример:/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>
выполняется в CoCon/system/postgresql/migration/info <DATABASE> <TABLE>
Пример:/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 │ │ │ └────┴────────────┴────────────────────┴──────────┴────────────────┴───────────────────┴───────────────────┘
5 Обновление сервисов SSW на ecss1
- Выполнить на ecss2 объединение в кластер:на ecss2
sudo ecss-control attach
- Активация сервиса keepalived:на ecss1
sudo systemctl enable --now keepalived
Обновление пакета
ecss-dns-env:на ecss1sudo apt install ecss-dns-env
После обновления актуализировать конфигурацию командой:При обновлении принимать новые конфигурационные файлы -Y.на ecss1sudo dpkg-reconfigure ecss-dns-env
Обновление пакета
ecss-user:на ecss1sudo apt install ecss-user
Обновление пакета
ecss-utils:на ecss1sudo apt install ecss-utils
Обновление пакета
ecss-node:на ecss1sudo apt install ecss-node
на ecss1
ВОПРОСЫ НА УСТАНОВКУ ecss-node:
- ECSS-node ID in DNS format: <Согласно лицензии>.
- Default configuration: yes
- Global config: yes
Принимаем все изменения файлов конфигурации !
Включить сервисы SSW:
на ecss1sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
на ecss1sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
Сервис
ecss-sormна ecss1 сразу замаскировать, так как у нас заявлена работа ecss-sorm на одном хосте в кластере:на ecss1sudo systemctl mask ecss-sorm
На ecss1 запустите сервис mycelium и в CoCon проверьте, что сервис поднялся и видны ноды mycelium хостов ecss1/ecss2:
на ecss1sudo systemctl start ecss-mycelium
выполняется в 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 (создав резервную копию), чтобы загрузить актуальную БД с другого хоста.
на ecss1sudo 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:на ecss1
sudo systemctl start ecss-ds
выполняется в 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 следующими командами:на ecss1
sudo systemctl start ecss-core
на ecss1sudo systemctl start ecss-mediator
Проверить статус в CoCon:на ecss1sudo systemctl start ecss-pa-sip
Результат:/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:на ecss1sudo apt install ecss-restfs
- Обновление пакета
ecss-media-server:Актуализировать конфигурацию:на ecss1sudo apt install ecss-media-server
на ecss1sudo dpkg-reconfigure ecss-media-server
Проверить и при необходимости исправить вручную файл
Также, для регистрации media-сервера с ecss2 на ecss1 надо убрать ранее добавленные комментарии из файла/etc/ecss/ecss-media-server/config.xml./etc/ecss/ecss-media-server/conf.d/default.xmlна ecss2:После чего перезапустить сервис:на ecss2sudo systemctl restart ecss-media-server.service
Обновление пакета
ecss-media-resources:на ecss1sudo apt install ecss-media-resources
Обновление пакета
ecss-web-conf:на ecss1sudo apt install ecss-web-conf
6. Проверка обновления
После выполнения обновления проверить работу всех сервисов SSW.
7. Удаление MySQL
- Удалите MySQL, выполнив следующие команды:на обоих хостах
sudo apt purge ecss-mysql
На вопросы об удалении БД → положительно отвечаем на вопросы - удалить все базы данных