Обновление с версии 3.14.16 на 3.17

1 Подготовка хостов к обновлению

В процессе обновления с версии 3.14.16 на версию 3.17  будет заменена База Данных с MySQL на PostgreSQL. Для работы  PostgreSQL требуется отдельный раздел дискового пространства - партиция, которая должна быть смонтирована в директорию → "/srv/ecss/ecss-postgres-bdr-ssw". В версии 3.14.16 такая партиция не предусматривалась, поэтому ее требуется создать. Размерность данной партиции от 100G и более.

Вариантов несколько:

 Данную операцию необходимо выполнить для двух хостов поочередно (порядок не важен).


2 Подготовительные действия на ecss2

  1. Если нужны последние данные биллинга, то необходимо финализировать текущую cdr и скачать CDR файлы на удаленный сервер:
    /domain/test_domain/cdr/make_finalize_cdr 
    Created file(s): cdr_20260122_11_51_16_1_c.csv
  2. Включить настройку для автоматической синхронизации файлов, находящихся в сплите (по большему размеру). Подробнее см. "Проблемы связанные с возникновением split-brain" .
    sudo gluster volume set ecss_volume cluster.favorite-child-policy size
  3. Остановить репликации MySQL.
    Убедитесь, что значения параметров Slave_IO_Running и Slave_SQL_Running равны No.
    sudo mysql -uroot -p -e 'STOP SLAVE;'

    sudo 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
    . . .
  4. При обновлении кластера следует обновлять сервера по очереди. Таким образом, при обновлении один из серверов будет всегда запущен и работа сервисов не будет прервана. Для разделения кластера следует использовать инструмент ecss-control на обоих серверах (Описание команд утилиты приведено в «Приложении Н»).
    Обмен sip сигнализацией происходит через SIP-VRRP IP адрес. Аналогичным образом, через MySQL-VRRP IP адрес, происходит подключение к MySQL. Этот функционал реализован для возможности миграции Ip адреса на другой хост в случае падения/отключения/техобслуживания основного хоста. Контроль миграции IP адресов осуществляется сервисом keepalive на каждом хосте. Для перевода трафика на первый сервер (ecss1), необходимо выключить keepalive на втором хосте (ecss2). В этом случае оба SIP-VRRP IP адреса, а так же  MySQL-VRRP IP адрес, будут находится на первом хосте (ecss1). Выполнить следующую команду:
    sudo systemctl disable --now keepalived.service
  5. Командой ifconfig проверить, что все VRRP IP-адреса находятся на ecss1 (VRRP-mysql/VRRP-SIP1/VRRP-SIP2).
    ifconfig
  6. Необходимо замаскировать все ноды на сервере, который будет обновляться первым,  отключаем автозапуск нод:
    sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
  7. На ecss1 выполнить разделение SSW на два независимых сервера следующей командой:

    Команда ecss-control работает со стандартными именами хостов : ecss1/ecss2.


    sudo ecss-control detach
    Проверить статус:
    sudo 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.

    Данное сообщение не является ошибкой. Продолжать выполнение процедуры.

3 Подготовка к обновлению сервисов SSW на ecss2

  1. Актуализировать репозиторий 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"
  2. Выполнить обновление пакетов:
    sudo apt update

4 Обновление сервисов SSW на ecss2

  1. Устанавливаем новую БД Postgres (сначала на ecss1, далее на ecss2)
    sudo 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
    sudo apt install ecss-postgres-bdr-ssw

    В процессе установки будут заданы вопросы:

    -- Выбираем адрес для репликации из списка (на двух хостах  )
    -- хотим установку в кластере (на двух хостах)
    -- да я мастер (на ecss1)/ нет я не мастер (на ecss2)
    -- на ecss2,  указываем адрес мастера, (указанный в ответе на вопрос 1 для ecss1)

  2. Проверить корректность настройки репликации.
    Во время установки в директорию /srv/ecss/ecss-postgres-bdr-ssw устанавливаются скрипт postgresbdr_ssw.sh.
    Для проверки репликации выполнить следующие команды:
    cd /srv/ecss/ecss-postgres-bdr-ssw

    sudo ./postgresbdr_ssw.sh check

    Вывод на хостах ecss1/ecss2 должен быль одинаковый.

    sudo ./postgresbdr_ssw.sh check
    Enter master ip please
    Like 10.150.150.15
    10.0.10.81
    Enter slave ip please
    10.0.10.82
    Press enter with empty password
    Просто щелкайте Enter не вводя пароль
    q - выход из просмотра таблицы (если необходимо)
    таблица нод на мастере по 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)
  3. Обновление пакета ecss-dns-env:
    sudo apt install ecss-dns-env

    При обновлении нужно применить новые конфигурационные файлы (подтверждением -Y)

    После обновления, нужно актуализировать конфигурацию, выполнив команду. Ответы на вопросы аналогичны процедуре инсталляции:
    sudo dpkg-reconfigure ecss-dns-env
  4. Выполнить обновление пакета ecss-user:
    sudo apt install ecss-user
  5. Выполнить обновление пакета ecss-utils:
    sudo apt install ecss-utils
  6. Выполнить обновление пакета ecss-node:
    sudo apt install ecss-node

    ВОПРОСЫ НА УСТАНОВКУ ecss-node:

    * ECSS-node ID in DNS format: <Согласно лицензии>.
    * Default configuration: yes
    * Global config: yes

    !!!Принимаем все изменения файлов конфигурации.!!

  7. Выполнить миграцию пользователей cocon(audit_database):
    /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):
    В скобках, указаны дефолтные значения (соответственно, вводим свои, при использовании не дефолтных).
  8. Включаем ноды.
    Включить сервисы ssw следующими командами: 
    sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

    sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
  9. Запуск SSW на ecss2. Запустить следующие сервисы:
    ecss-mycelium
    sudo systemctl start ecss-mycelium
    ecss-ds
    sudo systemctl start ecss-ds
    ecss-core
    sudo systemctl start ecss-core
    ecss-mediator
    sudo systemctl start ecss-mediator

    Если лицензия поддерживает СОРМ3, то запустить также сервис ecss-sorm.

    sudo systemctl start ecss-sorm

    Если сервис ecss-sorm оказался замаскирован, то выполнить следующие команды:

    sudo systemctl unmask ecss-sorm
    sudo systemctl start ecss-sorm



    Для корректной работы SORM3 необходимо выполнить коррекцию команды для sorm экстрактора. Данную команду необходимо выполнить для каждого домена в SSW. 

    /domain/<Имя_домена>/sorm3/set extractor_node sorm1@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@ecss1
    └──────────────────┴───────────┴───────────┘

    /domain/test_domain/sorm3/set extractor_node sorm1@ecss2
    Property "extractor_node" successfully changed from: 
    sorm1@ecss1
       to
    sorm1@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!!!

  10. Проверить статус сервисов, для этого выполнить в CoCon команду system-status:
    /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  │
    └─────────────┴───────────┴─────────────┴───────────┴───────────┘
  11. Выполнить миграции таблиц DB подробное описание:
    Проверить, какие данные доступны для переноса, можно командой:

    /system/postgresql/migration/check <DATABASE> *
    где DATABASE:

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

    /system/postgresql/migration/check address_book * --hostname ecss1 --username ******* --password *******                
    ┌────────────┬────────────────┬────────────────────────────────────┬───────────────────────────────┐
    │     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                  │                               │
    └────────────┴────────────────┴────────────────────────────────────┴───────────────────────────────┘

    Миграцию выполнить командой:
    /system/postgresql/migration/do <DATABASE> <TABLE> --hostname ecss1
    Проверить прохождение миграции можно командой:
    /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    │                   │                   │
    └────┴────────────┴────────────────────┴──────────┴────────────────┴───────────────────┴───────────────────┘
  12. Обновление пакета ecss-restfs.
    Принять все новые конфигурационные файлы, выбирая  Y.

    sudo apt install ecss-restfs
  13. Обновление пакета 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"), следующей командой (добавив <!- - вначале строки , и - -> в конце строки ), следующей командой:
    sudo 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>
    Выполнить обновление:
    sudo apt install ecss-media-server
    Актуализировать конфигурацию:
    sudo dpkg-reconfigure ecss-media-server
    Выполнить проверку, и при необходимости отредактировать файл командой :
    sudo nano /etc/ecss/ecss-media-server/config.xml

    <?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>
  14. Обновление пакета ecss-media-resources:
    sudo apt install ecss-media-resources
  15. Обновление пакета ecss-web-conf
    sudo apt install ecss-web-conf

  16. Обновление пакета ecss-teleconference-ui

    sudo apt install ecss-teleconference-ui

    Обновление пакета ecss-crm-server

    sudo apt install ecss-crm-server

    Обновление пакета ecss-cc-ui

    sudo apt install ecss-cc-ui

    Обновление пакета ecss-call-api

    sudo apt install ecss-call-api

    Обновление пакета ecss-peeper-client

    sudo apt install ecss-peeper-client
  17. Переносим актуальные регистрации абонентов:
    Перед переводом keepalived на обновленный хост необходимо скопировать актуальную базу ds с ecss1 (иначе база регистраций будет пустая). Поэтому сначала делаем backup БД Mnesia на ecss1:
    /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:
    sudo systemctl stop ecss-ds
    Командой scp копируем backup c ecss1 на ecss2.
    scp -r ecss@ecss1:/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys
    Выполняем локальную копию текущей конфигурации:
    sudo cp -a /var/lib/ecss/oasys/Mnesia.ds1@ecss2 /var/lib/ecss/oasys/Mnesia.ds1@ecss2-bkp
    Заменяем локальную конфигурацию на конфигурацию backup c ecss1:
    sudo mv /var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys/Mnesia.ds1@ecss2

    sudo chown -R ssw:ssw /var/lib/ecss/oasys
    Запустить ecss-ds и ecss-pa-sip (чтобы подгрузились актуальные регистрации абонентов):

    sudo systemctl start ecss-ds

    sudo systemctl start ecss-pa-sip
    Проверить статус сервисов командой /system-status :
    /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  │
    └─────────────┴───────────┴─────────────┴───────────┴───────────┘
    Выполнить проверку переезда активных регистраций на обновленный хост. Для этого выполнить контроль зарегистрированы абонентов на одном(3.114.16) и втором (3.17) хостах. выполнить команду в CoCon:
    /domain/test_domain/sip/user/registered sip *            
    450 make users list ...
    [**********************************************************************] 28mks    
    450 users information read ...
    [**********************************************************************] 1ms      
    Executed on the sip1@ecss2
    ┌───────────────┐
    │ elements: 436 │
    └───────────────┘

    /domain/test_domain/sip/user/registered sip *            
    450 make users list ...
    [**********************************************************************] 28mks    
    450 users information read ...
    [**********************************************************************] 1ms      
    Executed on the sip1@ecss1
    ┌───────────────┐
    │ elements: 438 │
    └───────────────┘
  18. Запуск сервиса keepalived
    sudo systemctl enable --now keepalived

5 Подготовительные действия на ecss1

  1. Подготовить ecss1 к обновлению, для этого, перевести весь трафик на ecss2 (команда выполняется на ecss1):
    sudo systemctl disable --now keepalived.service
  2. Командой ifconfig проверьте, что все VRRP адреса  (VRRP IP-mysql / VRRP IP-SIP1 / VRRP IP-SIP2) находятся на ecss2.
    ifconfig
  3. После разделения кластера необходимо выключить все ноды на сервере ecss1:
    sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
  4. Выполнить миграции таблиц DB подробное описание:
    Проверить, какие данные доступны для переноса, можно командой:

    /system/postgresql/migration/check <DATABASE> *
    где DATABASE:

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

    /system/postgresql/migration/check address_book * --username ******* --password *******                
    ┌────────────┬────────────────┬────────────────────────────────────┬───────────────────────────────┐
    │     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                  │                               │
    └────────────┴────────────────┴────────────────────────────────────┴───────────────────────────────┘

    Миграцию выполнить командой:
    /system/postgresql/migration/do <DATABASE> <TABLE>
    Проверить прохождение миграции можно командой:
    /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    │                   │                   │
    └────┴────────────┴────────────────────┴──────────┴────────────────┴───────────────────┴───────────────────┘

6 Обновление сервисов SSW на ecss1

  1. Выполнить на ecss2 объединение в кластер:
    sudo ecss-control attach
  2. Активация сервиса Keepalived.
    sudo systemctl enable --now keepalived
  3. Обновление пакета ecss-dns-env.
    sudo apt install ecss-dns-env

    При обновлении принимать новые конфигурационные файлы -Y.
    После обновления актуализировать конфигурацию командой:
    sudo dpkg-reconfigure ecss-dns-env
  4. Обновление пакета ecss-user:
    sudo apt install ecss-user
  5. Обновление пакета ecss-utils:
    sudo apt install ecss-utils
  6. Обновление пакета ecss-node:
    sudo apt install ecss-node

    ВОПРОСЫ НА УСТАНОВКУ ecss-node:

    * ECSS-node ID in DNS format: <Согласно лицензии>.
    * Default configuration: yes
    * Global config: yes

    !!!Принимаем все изменения файлов конфигурации.!!

  7. Включить сервисы ssw: 
    sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

    sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
  8. Сервис ecss-sorm на ecss1 сразу замаскировать, т.к. у нас заявлена работа ecss-sorm на одном хосте в кластере. 
    sudo systemctl mask ecss-sorm
  9. На ecss1 запустите сервис mycelium и в CoCon проверьте, что сервис поднялся и видно ноды mycelium хостов ecss1/ ecss2:
    sudo systemctl start ecss-mycelium

    /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  │
    └─────────────┴───────────┴───────────────┴───────────┴───────────┘
  10. Перед запуском ecss-ds на ecss1 необходимо сделать backup директории /var/lib/ecss/oasys и удалить ее, для того чтобы с другого хоста загрузить актуальную БД. Сделать это можно переименовав существующую директорию:

    После этого ecss-ds на хосте ecss1 загрузит БД с хоста ecss2.


    sudo mv /var/lib/ecss/oasys /var/lib/ecss/oasys-$(date +%Y%m%d-%H_%M)
  11. На ecss1 запустите сервис ds и в CoCon проверить, что сервис ds доступен на обоих хостах ecss1/ ecss2:
    sudo systemctl start ecss-ds

    /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  │
    └─────────────┴───────────┴───────────────┴───────────┴───────────┘
  12. Далее такими же действиями запустить сервисы: ecss-mediator, ecss-pa-sip, ecss-core следующими командами:
    sudo systemctl start ecss-core

    sudo systemctl start ecss-mediator

    sudo systemctl start ecss-pa-sip
    Проверить статус в CoCom:
    /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  │
    └─────────────┴───────────┴───────────────┴───────────┴───────────┘
  13. Обновление пакета ecss-restfs:
    sudo apt install ecss-restfs
  14. Обновление пакета ecss-media-server:
    sudo apt install ecss-media-server
    Актуализировать конфигурацию:
    sudo dpkg-reconfigure ecss-media-server
    Проверить и при необходимости исправить вручную файл → /etc/ecss/ecss-media-server/config.xml
    <?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>


    Так же, для регистрации media-server`a с ecss2 на ecss1 надо убрать ранее добавленные комментирование из файла /etc/ecss/ecss-media-server/conf.d/default.xml на 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>
    После чего перезапустить сервис:
    sudo systemctl restart ecss-media-server.service
  15. Обновление пакета ecss-media-resources:
    sudo apt install ecss-media-resources
  16. Обновление пакета ecss-web-conf:
    sudo apt install ecss-web-conf
  17. Обновление пакета ecss-teleconference-ui

    sudo apt install ecss-teleconference-ui

    Обновление пакета ecss-crm-server

    sudo apt install ecss-crm-server

    Обновление пакета ecss-cc-ui

    sudo apt install ecss-cc-ui

    Обновление пакета ecss-call-api

    sudo apt install ecss-call-api

    Обновление пакета ecss-peeper-client

    sudo apt install ecss-peeper-client


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

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