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

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

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

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

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

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

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

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

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

    ELM лицензия

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


  2. Подготовка gluster volume к процедуре обновления.
    В случае недоступности одной из нод кластера могут возникнуть проблемы с файлами. После восстановления работы они будут находиться в сплите, из-за чего собственноручно придется запускать синхронизацию между нодами.
    Для того чтобы решить данную проблему, потребуется воспользоваться ключом cluster.favorite-child-policy.
    При его включении все файлы, находящиеся в сплите, будут автоматически синхронизированы между собой по заданному правилу.
    Включение данного параметра производится командой:

    на ecss1

    sudo gluster volume set ecss_volume cluster.favorite-child-policy size
    CODE
    Результат:
    sudo gluster volume set ecss_volume cluster.favorite-child-policy size
    volume set: success

    Результат:
    sudo gluster volume info
     
    Volume Name: ecss_volume
    Type: Replicate
    Volume ID: 4bc875b1-f966-44e2-9b3f-04f3a7af83f3
    Status: Started
    Snapshot Count: 0
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: 10.0.10.51:/var/lib/ecss/glusterfs
    Brick2: 10.0.10.52:/var/lib/ecss/glusterfs
    Options Reconfigured:
    cluster.favorite-child-policy: size
    performance.client-io-threads: off
    nfs.disable: on
    transport.address-family: inet
    storage.fips-mode-rchecksum: on
    cluster.granular-entry-heal: on
    
  3. При обновлении кластера следует обновлять сервера по очереди. Таким образом, при обновлении один из серверов будет всегда запущен и работа сервисов не будет прервана. Для разделения кластера следует использовать инструмент ecss-control на обоих серверах (описание команд утилиты приведено в «Приложении Н»).
    Обмен SIP-сигнализацией происходит через SIP-VRRP IP-адрес. Этот функционал реализован для возможности миграции IP-адреса на другой хост в случае падения/отключения/техобслуживания основного хоста. Контроль миграции IP-адресов осуществляется сервисом keepalive на каждом хосте.
    Для перевода трафика на первый сервер (ecss1) необходимо выключить keepalive на втором хосте (ecss2). В этом случае оба SIP-VRRP IP-адреса будут находиться на первом хосте (ecss1). Выполнить следующую команду:

    на ecss2

    sudo systemctl disable --now keepalived.service
    CODE
  4. Командой ifconfig проверить, что все VRRP IP-адреса находятся на ecss1 (VRRP-SIP1/VRRP-SIP2):

    на ecss1

    ifconfig
    CODE
  5. Необходимо замаскировать все ноды на сервере, который будет обновляться первым, отключаем автозапуск нод:

    на ecss2

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

    При выполнении приложенной команды будет уведомление.

    Warning: The unit file, source configuration file or drop-ins of ecss-ds.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    Warning: The unit file, source configuration file or drop-ins of ecss-mycelium.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    Warning: The unit file, source configuration file or drop-ins of ecss-mediator.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    Warning: The unit file, source configuration file or drop-ins of ecss-core.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    Warning: The unit file, source configuration file or drop-ins of ecss-pa-sip.service changed on disk. Run 'systemctl daemon-reload' to reload units.

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

  6. На ecss1 выполнить разделение SSW на два независимых сервера следующей командой:

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


    на ecss1

    sudo ecss-control detach
    CODE
    Проверить статус:

    на ecss1

    sudo ecss-control status
    CODE

    Результат:
    sudo ecss-control detach
    detach host: ecss2, ip: 10.0.10.52
    complete
    sudo ecss-control status
    locked ip: 10.0.10.52

    Нода sorm идет одна на кластер. В случае её работы на ecss1 при выполнении приложенной команды появится уведомление.

    Unit /etc/systemd/system/ecss-sorm.service is masked, ignoring.

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

  7. На ecss1 отключить сервис ecss-elm-adapter, выполнив команду:

    на ecss1

    sudo systemctl stop ecss-elm-adapter.service
    CODE


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

  1. Актуализировать репозиторий ssw:

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

    sudo sh -c "echo deb [arch=amd64]  http://archive.eltex.org/ssw/jammy/3.18 stable main extras external > /etc/apt/sources.list.d/eltex-ecss10-stable.list"
    CODE
  2. Выполнить обновление пакетов:

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

    sudo apt update
    CODE

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

  1. Внимание

    Выполнить полный «бэкап» (см. «Регламентное обслуживание и резервное копирование»).
  2. Обновление PostgreSQL:
    1. Проверить на каких адресах подключена БД Postgres, выполнить команду:

      на ecss2

      psql -Upostgres -decss_storekeeper_db -h localhost -p5439 -c "SELECT node_local_dsn FROM bdr.bdr_nodes;"
      CODE

      Пример: пароль по умолчанию "postgres1"

      psql -Upostgres -decss_storekeeper_db -h localhost -p5439 -c "SELECT node_local_dsn FROM bdr.bdr_nodes;"
      Password for user postgres: 
                                          node_local_dsn                                     
      ---------------------------------------------------------------------------------------
       host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
       host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
      (2 rows)
      
      CODE
    2. Выключить docker-контейнер:

      на ecss2

      sudo docker compose -f /srv/ecss/ecss-postgres-bdr-ssw/docker-compose.container.yml down
      CODE

      Пример:
      sudo docker compose -f /srv/ecss/ecss-postgres-bdr-ssw/docker-compose.container.yml down
      [+] down 2/2
       ✔ Container ecss-postgres-bdr-ssw-postgres-container-1 Removed                                                                                                                           
       ✔ Network ecss-postgres-bdr-ssw_default                Removed 
    3. Удалить старый deb-пакет, т. к опция upgrade не поддержана:

      на ecss2

      sudo apt remove ecss-postgres-bdr-ssw
      CODE

      !!Важно!!

      Выполнить именно remove, а не purge, т. к remove сохраняет директорию volumes c таблицами нашей БД.


      Пример:
      sudo apt remove ecss-postgres-bdr-ssw
      Чтение списков пакетов… Готово
      . . .
      Следующие пакеты будут УДАЛЕНЫ:
        ecss-postgres-bdr-ssw
      . . .
      Хотите продолжить? [Д/н] y
      Удаляется ecss-postgres-bdr-ssw (17.1.0.59+ssw) …
    4. Установить новый deb-пакет:

      на ecss2

      sudo apt install ecss-postgres-bdr-ssw 
      CODE

      !!Важно!!

      Во время установки будут заданы вопросы как при первоначальной установке:
      Ответы должны точно соответствовать указанным в процедуре, иначе будет выполнена попытка создать новую базу данных и установка завершится ошибкой.

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

      Текущий IP-адрес сетевого интерфейса.

      Выберите IP: Такой-же как и при первоначальной установке,
      т. к репликация завязана на конкретные IP. 

      (проверили в пункте "а", в примере 10.0.10.52).

      10.0.10.52 (необходимо выбрать)

      Установка в кластере? 
      Выберите <Да>, если пакет устанавливается на узле кластера.
      Да (значение по умолчанию)

      Является ли этот узел мастером?

      Важно!

      НЕТ! Иначе он попытается создать новую bdr,
      чего сделать не сможет и установка завершиться с ошибкой).



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

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

      Важно!

      IP соседней ноды (который указывали при её установке, проверяли в пункте "а", в примере 10.0.10.51).




      10.0.10.51 (необходимо указать)


      При успешной установке на этапе поднятия репликации увидим:

      sudo apt install ecss-postgres-bdr-ssw
      . . .
      =============================
       Checking replication status 
      =============================
      Репликация BDR настроена корректно: данные совпадают.
      . . .
      =======================================================
      =======================================================
       ecss-postgres-bdr-ssw successfully installed/updated! 
      =======================================================
      =======================================================
      
      
      ┏┓┏┓┏┓┏┳┓┏┓┳┓┏┓┏┓  ┳┓┳┓┳┓  ┏┓┏┓┓ ┏
      ┃┃┃┃┗┓ ┃ ┃┓┣┫┣ ┗┓  ┣┫┃┃┣┫  ┗┓┗┓┃┃┃
      ┣┛┗┛┗┛ ┻ ┗┛┛┗┗┛┗┛  ┻┛┻┛┛┗  ┗┛┗┛┗┻┛
      CODE
    5. После установки проверить, что подтянулся новый image и стартовал docker, выполнить команду:

      на ecss2

      docker ps
      CODE

      Пример:

      docker ps
      CONTAINER ID   IMAGE                                           COMMAND                  CREATED         STATUS         PORTS                                         NAMES
      80ef72d3b125   git.eltex.loc:4567/ecss/ecss-postgresbdr:3.18   "/docker-entrypoint.…"   8 minutes ago   Up 8 minutes   0.0.0.0:5439->5432/tcp, [::]:5439->5432/tcp   ecss-postgres-bdr-ssw-postgres-container-1
      CODE
  3. Обновление SSW.
    1. Обновление пакета ecss-dns-env:

      на ecss2

      sudo apt install ecss-dns-env
      CODE

      После обновления нужно актуализировать конфигурацию, выполнив команду. Ответы на вопросы аналогичны процедуре инсталляции:

      на ecss2

      sudo dpkg-reconfigure ecss-dns-env
      CODE
    2. Выполнить обновление пакета ecss-user:

      на ecss2

      sudo apt install ecss-user
      CODE
    3. Выполнить обновление пакета ecss-utils:

      на ecss2

      sudo apt install ecss-utils
      CODE
    4. Установить пакет LO:

      на ecss2

      sudo apt install ecss-license-officer
      CODE

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

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

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

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

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

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

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

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

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


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

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

      Конфигурация License Officer (LO)

      Сервис ecss-license-officer использует два конфигурационных файла: /etc/ecss/ecss-license-officer/config.env и /etc/ecss/ecss-license-officer/config.yaml.

      В файл config.env информация сохраняется в момент установки пакета ecss-license-officer.

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

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

      elm_addresses: []
      licenses: []
      ecss_nodes: []
      CODE
      Для заполнения данных полей откройте файл конфигурации ecss-elm-adapter используемого в версии 3.17 /etc/ecss/ecss-elm-adapter/config.env:

      на ecss2

      сat /etc/ecss/ecss-elm-adapter/config.env 
      ELM_HOST=192.168.83.220
      ELM_PORT=8099
      ECSS_PRODUCT_ID=ECSS2000000
      ECSS_LICENSE_KEY=ssw987654
      LOG_LEVEL=info
      LICENCE_FAIL_TIMER_SECONDS=10
      LICENCE_PULL_TIMER_SECONDS=360
      CODE

      В поле elm_adresses нужно прописать список серверов ELM, к которым мы хотим подключаться для получения лицензий. Первый адрес в списке используется как основной. Дополнительные строки с адресами работают как резерв.
      пример:
      - "elm-1.eltex.loc:8099"
      - "192.168.111.22:8099"
      - "elm-3.eltex.loc:8099"

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

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

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

      Блок ecss_nodes

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

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

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

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

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

      Пример: файла config.yaml на основе данных из файла /etc/ecss/ecss-elm-adapter/config.env

      elm_addresses:
       - "192.168.83.220:8099"
      licenses:
       - id: 0
         kind: SSW
         type: elm
         license_key: "ssw987654"
         product_id: "ECSS2000000"
      ecss_nodes:
       - id: eltex1.test
         kind: SSW
         license_id: 0
      CODE

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

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

      sudo systemctl restart ecss-license-officer.service
      CODE

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

    5. Выполнить обновление пакета ecss-node:

      на ecss2

      sudo apt install ecss-node
      CODE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


  4. Включаем ноды.
    Включить сервисы ssw следующими командами: 

    на ecss2

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

    на ecss2

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

    Внимание

    Перед запуском нод SSW изменяем имя кластера (на любое другое, главное чтобы оно не совпадало с соседом (ecss1)/любой другой потенциальной АТС в вашей сети, иначе он попробует к ней подключится). Для этого правим в файле /etc/ecss/ecss-mycelium/mycelium.config строчку "{cluster_name, 'eltex.test'}," для примера на "{cluster_name, 'eltex1.test'},"

    на ecss2

    sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
    CODE
    Пример:
    [
        {mycelium_broker, [
            {cluster_name, 'eltex1.test'},
            {compress_module, elx_data_nif},
            {session_gc_timeout, 3000},
            {queue_gc_timeout, infinity}
    . . .


  5. Запуск SSW на ecss2. Запустить следующие сервисы:
    ecss-mycelium

    на ecss2

    sudo systemctl start ecss-mycelium
    CODE
    ecss-ds

    на ecss2

    sudo systemctl start ecss-ds
    CODE
    ecss-core

    на ecss2

    sudo systemctl start ecss-core
    CODE
    ecss-mediator

    на ecss2

    sudo systemctl start ecss-mediator
    CODE

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

    на ecss2

    sudo systemctl start ecss-sorm
    CODE

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

    на ecss2

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



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

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

    /domain/<Имя_домена>/sorm3/set extractor_node sorm1@ecss2
    CODE


    Для примера:

    /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!!!

  6. Проверить статус сервисов, для этого выполнить в CoCon команду system-status:
    выполняется в CoCon
    /system-status 
    Checking...
    ┌─┬───────────────┬────────────────────────┬───────────────┬────────────┬──────┐
    │ │     Node      │        Release         │ Erlang nodes  │Mnesia nodes│Uptime│
    ├─┼───────────────┼────────────────────────┼───────────────┼────────────┼──────┤
    │ │core1@ecss2    │ecss-core-3.18.0.217    │core1@ecss2    │not running │1m 28s│
    │ │ds1@ecss2      │ecss-ds-3.18.0.217      │ds1@ecss2      │ds1@ecss2   │1m 32s│
    │ │md1@ecss2      │ecss-mediator-3.18.0.217│md1@ecss2      │md1@ecss2   │1m 23s│
    │ │mycelium1@ecss2│ecss-mycelium-3.18.0.217│mycelium1@ecss2│not running │1m 37s│
    │ │sorm1@ecss2    │ecss-sorm-3.18.0.217    │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.17.1.0.27 │ connected │ 00:00:14  │
    │             │ msr.ecss2 │ 3.17.1.0.27 │ connected │ 00:00:16  │
    └─────────────┴───────────┴─────────────┴───────────┴───────────┘
  7. Выполнить конфигурацию подключения SSW к LO следующей командой в CoCon, (в примере LO установлен в кластере, IPadd хостов 10.0.10.51 и 10.0.10.52. Значение порта из файла /etc/ecss/ecss-license-officer/config.env по умолчанию 4321):

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

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

    В случае установки LO на хостах SSW указывать IPadd OAM.

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

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

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

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

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

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

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

    Данное поведение применимо только при работе в elm-режиме.

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

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

    /cluster/storage/ds1/licence/request
    CODE

    type=elm

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

    type=elm

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


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


  8. Обновление пакета ecss-restfs.
    Принять все новые конфигурационные файлы, выбирая Y.

    на ecss2

    sudo apt install ecss-restfs
    CODE
  9. Обновление пакета ecss-media-server.

    Если использовались не дефолтные имена файлов конфигурации, то при установке создадутся (при отсутствии) новые файлы с дефолтными именами и при запуске media-server будет использовать именно их. 
    В случае использования дефолтных имен в процессе установки ecss-media-server выполнит backup конфигурационных файлов, создав файлы с расширением .dpkg-old. Во вновь созданных файлах конфигурации часть конфигураций окажется удаленной/измененной на дефолтные значения (например, ice-параметры необходимые для elph, stun-сервер, адрес сервера с метриками).
    Поэтому при необходимости скорректировать параметры перед вводом media-server в эксплуатацию, добавив из backup config-файлов *.dpkg-old нужные данные. 
    Если использовались не дефолтные имена файлов конфигурации, новосозданные дефолтные файлы нужно в обязательно порядке удалить.


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

    на ecss2

    sudo apt install ecss-media-server
    CODE

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


    Актуализировать конфигурацию:

    на ecss2

    sudo dpkg-reconfigure ecss-media-server
    CODE
  10. Обновление пакета ecss-media-resources:

    на ecss2

    sudo apt install ecss-media-resources
    CODE
  11. Обновление пакета ecss-web-conf

    на ecss2

    sudo apt install ecss-web-conf
    CODE

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

    на ecss2

    sudo dpkg -l | grep ecss
    CODE
    Пример:
    sudo dpkg -l | grep ecss
    ii  ecss-cc-ui                             17.1.0.36+cc-ui                         amd64        Eltex/ECSS-10 UI and API for call center
    ii  ecss-dns-env                           18.0.0                                  amd64        Eltex/ECSS-10 Configuration settings for domain service
    ii  ecss-media-resources                   18.0.0                                  amd64        Eltex/ECSS-10 Media resources
    ii  ecss-media-server                      18.0.7                                  amd64        Eltex/ECSS-10 Media server
    ii  ecss-node                              18.0.217                                amd64        Eltex/ECSS-10 Node services
    ii  ecss-peeper-client                     17.1.0.23                               amd64        Eltex/ECSS-10 peeper client
    ii  ecss-postgres-bdr-ssw                  18.0.0+ssw                              amd64        Eltex/Postgres BDR
    ii  ecss-restfs                            18.0.21                                 amd64        Eltex/ECSS-10 RestFS API interface for filesystem
    ii  ecss-teleconference-ui                 17.1.0.23                               amd64        Eltex/ECSS-10 UI and API for Teleconference
    ii  ecss-user                              18.0.0                                  amd64        Eltex/ECSS-10 SSW user environment
    ii  ecss-utils                             18.0.0                                  amd64        Eltex/ECSS-10 Utilities for reading binary logs
    ii  ecss-web-conf                          18.0.31                                 amd64        Eltex/ECSS-10 Web configurator

    По результатам выполнения команды переустановить пакеты имеющие версию 17.1.* . В данном примере – ecss-cc-ui/ecss-peeper-client/ecss-teleconference-ui.

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

    на ecss2

    sudo apt install ecss-teleconference-ui
    CODE

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

    на ecss2

    sudo apt install ecss-crm-server
    CODE

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

    на ecss2

    sudo apt install ecss-cc-ui
    CODE

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

    на ecss2

    sudo apt install ecss-call-api
    CODE

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

    на ecss2

    sudo apt install ecss-peeper-client
    CODE
  13. Запуск сервиса keepalived
    Перед запуском сервиса keepalived необходимо стартовать сервис ecss-pa-sip:

    на ecss2

    sudo systemctl start ecss-pa-sip
    CODE

    на ecss2

    sudo systemctl enable --now keepalived
    CODE
  14. Удалить более неиспользуемый пакет ecss-elm-adapter командой:

    на ecss2

    sudo apt purge ecss-elm-adapter
    CODE

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

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

  1. Внимание

    Выполнить полный «бэкап» (см. Регламентное обслуживание и резервное копирование).
  2. Подготовить ecss1 к обновлению, для этого перевести весь трафик на ecss2 (команда выполняется на ecss1):

    на ecss1

    sudo systemctl disable --now keepalived.service
    CODE
  3. Командой ifconfig проверьте, что все VRRP-адреса (VRRP IP-SIP1 / VRRP IP-SIP2) находятся на ecss2.

    на ecss2

    ifconfig
    CODE
  4. После разделения кластера необходимо выключить все ноды на сервере ecss1:

    на ecss1

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

    При выполнении приложенной команды будет уведомление.

    Warning: The unit file, source configuration file or drop-ins of ecss-ds.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    Warning: The unit file, source configuration file or drop-ins of ecss-mycelium.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    Warning: The unit file, source configuration file or drop-ins of ecss-mediator.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    Warning: The unit file, source configuration file or drop-ins of ecss-core.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    Warning: The unit file, source configuration file or drop-ins of ecss-pa-sip.service changed on disk. Run 'systemctl daemon-reload' to reload units.

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

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

  1. Выполнить на ecss1 объединение в кластер:

    Команда ecss-control attach выполняется на этом шаге для возможности создания репликации БД Postgres. Такое поведение безопасно, потому что нода уже выведена из эксплуатации.


    на ecss1

    sudo ecss-control attach
    CODE
  2. Активация сервиса keepalived.

    VRRP-SIP завязан на сервиса ecss-pa-sip. Если демон ecss-pa-sip выключен, адрес не мигрирует на ecss1.


    на ecss1

    sudo systemctl enable --now keepalived
    CODE
  3. Обновление PostgreSQL:
    1. Проверить, на каких адресах подключена БД Postgres, выполнить команду:

      на ecss1

      psql -Upostgres -decss_storekeeper_db -h localhost -p5439 -c "SELECT node_local_dsn FROM bdr.bdr_nodes;"
      CODE

      Пример: пароль по умолчанию "postgres1"

      psql -Upostgres -decss_storekeeper_db -h localhost -p5439 -c "SELECT node_local_dsn FROM bdr.bdr_nodes;"
      Password for user postgres: 
                                          node_local_dsn                                     
      ---------------------------------------------------------------------------------------
       host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
       host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
      (2 rows)
      
      CODE
    2. Выключаем docker-контейнер:

      на ecss1

      sudo docker compose -f /srv/ecss/ecss-postgres-bdr-ssw/docker-compose.container.yml down
      CODE

      Пример:
      sudo docker compose -f /srv/ecss/ecss-postgres-bdr-ssw/docker-compose.container.yml down
      [+] down 2/2
       ✔ Container ecss-postgres-bdr-ssw-postgres-container-1 Removed                                                                                                                           
       ✔ Network ecss-postgres-bdr-ssw_default                Removed 
    3. Удаляем старый deb-пакет, т. к опция upgrade не поддержана:

      на ecss1

      sudo apt remove ecss-postgres-bdr-ssw
      CODE

      !!Важно!!

      Выполнить именно remove, а не purge, т. к remove сохраняет директорию volumes c таблицами нашей БД.


      Пример:
      sudo apt remove ecss-postgres-bdr-ssw
      Чтение списков пакетов… Готово
      . . .
      Следующие пакеты будут УДАЛЕНЫ:
        ecss-postgres-bdr-ssw
      . . .
      Хотите продолжить? [Д/н] y
      Удаляется ecss-postgres-bdr-ssw (17.1.0.59+ssw) …
    4. Устанавливаем новый deb-пакет:

      на ecss1

      sudo apt install ecss-postgres-bdr-ssw 
      CODE

      !!Важно!!

      Во время установки будут заданы вопросы как при первоначальной установке:
      Ответы должны точно соответствовать указанным в процедуре, иначе будет выполнена попытка создать новую базу данных и установка завершится ошибкой.

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

      Текущий IP-адрес сетевого интерфейса.

      Выберите IP: Такой же как и при первоначальной установке,
      т. к. репликация завязана на конкретные IP.

      (проверили в пункте "а", в примере 10.0.10.51)

      10.0.10.51 (необходимо выбрать)

      Установка в кластере? 
      Выберите <Да>, если пакет устанавливается на узле кластера.
      Да (значение по умолчанию)

      Является ли этот узел мастером?

      НЕТ! (!!Важно!!, иначе он попытается создать новую bdr,
      чего сделать не сможет и установка завершится с ошибкой)



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

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

      IP соседней ноды (который указывали при её установке,

      проверяли в пункте "а", в примере 10.0.10.52)

      10.0.10.52 (необходимо указать)


      При успешной установке, на этапе поднятия репликации увидим:

      sudo apt install ecss-postgres-bdr-ssw
      . . .
      =============================
       Checking replication status 
      =============================
      Репликация BDR настроена корректно: данные совпадают.
      . . .
      =======================================================
      =======================================================
       ecss-postgres-bdr-ssw successfully installed/updated! 
      =======================================================
      =======================================================
      
      
      ┏┓┏┓┏┓┏┳┓┏┓┳┓┏┓┏┓  ┳┓┳┓┳┓  ┏┓┏┓┓ ┏
      ┃┃┃┃┗┓ ┃ ┃┓┣┫┣ ┗┓  ┣┫┃┃┣┫  ┗┓┗┓┃┃┃
      ┣┛┗┛┗┛ ┻ ┗┛┛┗┗┛┗┛  ┻┛┻┛┛┗  ┗┛┗┛┗┻┛
      CODE
    5. После установки проверить, что подтянулся новый image и стартовал docker, выполнить команду:

      на ecss1

      docker ps
      CODE

      Пример:

      docker ps
      CONTAINER ID   IMAGE                                           COMMAND                  CREATED         STATUS         PORTS                                         NAMES
      f53bd28c78ff   git.eltex.loc:4567/ecss/ecss-postgresbdr:3.18   "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes   0.0.0.0:5439->5432/tcp, [::]:5439->5432/tcp   ecss-postgres-bdr-ssw-postgres-container-1
      CODE
  4. Обновление пакета ecss-dns-env.

    на ecss1

    sudo apt install ecss-dns-env
    CODE

    При обновлении принимать новые конфигурационные файлы -Y.
    После обновления актуализировать конфигурацию командой:

    на ecss1

    sudo dpkg-reconfigure ecss-dns-env
    CODE
  5. Обновление пакета ecss-user:

    на ecss1

    sudo apt install ecss-user
    CODE
  6. Обновление пакета ecss-utils:

    на ecss1

    sudo apt install ecss-utils
    CODE
  7. Установить пакет LO:

    на ecss2

    sudo apt install ecss-license-officer
    CODE

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

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

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

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

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

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

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

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

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


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

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

    Конфигурация Llicense Officer (LO)

    Сервис ecss-license-officer использует два конфигурационных файла: /etc/ecss/ecss-license-officer/config.env и /etc/ecss/ecss-license-officer/config.yaml.

    В файл config.env информация сохраняется в момент установки пакета ecss-license-officer.

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

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

    elm_addresses: []
    licenses: []
    ecss_nodes: []
    CODE
    Для заполнения данных полей откройте файл конфигурации ecss-elm-adapter используемого в версии 3.17 /etc/ecss/ecss-elm-adapter/config.env:

    на ecss2

    сat /etc/ecss/ecss-elm-adapter/config.env 
    ELM_HOST=192.168.83.220
    ELM_PORT=8099
    ECSS_PRODUCT_ID=ECSS2000000
    ECSS_LICENSE_KEY=ssw987654
    LOG_LEVEL=info
    LICENCE_FAIL_TIMER_SECONDS=10
    LICENCE_PULL_TIMER_SECONDS=360
    CODE

    В поле elm_adresses нужно прописать список серверов ELM, к которым мы хотим подключаться для получения лицензий. Первый адрес в списке используется как основной. Дополнительные строки с адресами работают как резерв.
    пример:
    - "elm-1.eltex.loc:8099"
    - "192.168.111.22:8099"
    - "elm-3.eltex.loc:8099"

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

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

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

    Блок ecss_nodes

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

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

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

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

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

    Пример: файла config.yaml на основе данных из файла /etc/ecss/ecss-elm-adapter/config.env

    elm_addresses:
     - "192.168.83.220:8099"
    licenses:
     - id: 0
       kind: SSW
       type: elm
       license_key: "ssw987654"
       product_id: "ECSS2000000"
    ecss_nodes:
     - id: eltex1.test
       kind: SSW
       license_id: 0
    CODE

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

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

    sudo systemctl restart ecss-license-officer.service
    CODE

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

  8. Обновление пакета ecss-node:

    на ecss1

    sudo apt install ecss-node
    CODE

    на ecss1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


  9. Включить сервисы ssw: 

    на ecss1

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

    на ecss1

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

    Внимание

    Перед запуском нод SSW, изменяем имя кластера (на любое другое, главноеЮ чтобы оно не совпадало с соседом (ecss1)/любой другой потенциальной АТС в вашей сети, иначе он попробует к ней подключится). Для этого правим в файле /etc/ecss/ecss-mycelium/mycelium.config строчку "{cluster_name, 'eltex.test'}," для примера на "{cluster_name, 'eltex1.test'},"

    на ecss1

    sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
    CODE
    Пример:
    [
        {mycelium_broker, [
            {cluster_name, 'eltex1.test'},
            {compress_module, elx_data_nif},
            {session_gc_timeout, 3000},
            {queue_gc_timeout, infinity}
    . . .


  10. Сервис ecss-sorm на ecss1 сразу замаскировать, т. к. у нас заявлена работа ecss-sorm на одном хосте в кластере. 

    на ecss1

    sudo systemctl mask ecss-sorm
    CODE
  11. На ecss1 запустите сервис mycelium и в CoCon проверьте, что сервис поднялся и видно ноды mycelium хостов ecss1/ ecss2:

    на ecss1

    sudo systemctl start ecss-mycelium
    CODE

    выполняется в CoCon
    /system-status                                              
    Checking...
    ┌─┬───────────────┬────────────────────────┬───────────────────────────────┬─────────────────────┬───────┐
    │ │     Node      │        Release         │         Erlang nodes          │    Mnesia nodes     │Uptime │
    ├─┼───────────────┼────────────────────────┼───────────────────────────────┼─────────────────────┼───────┤
    │ │core1@ecss2    │ecss-core-3.18.0.249    │core1@ecss1,core1@ecss2        │not running          │12m 12s│
    │ │ds1@ecss2      │ecss-ds-3.18.0.249      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │12m 12s│
    │ │md1@ecss2      │ecss-mediator-3.18.0.249│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │12m 12s│
    │ │mycelium1@ecss1│ecss-mycelium-3.18.0.249│mycelium1@ecss1,mycelium1@ecss2│not running          │12m 14s│
    │ │mycelium1@ecss2│ecss-mycelium-3.18.0.249│mycelium1@ecss1,mycelium1@ecss2│not running          │12m 13s│
    │ │sip1@ecss2     │ecss-pa-sip-3.18.0.249  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│12m 13s│
    └─┴───────────────┴────────────────────────┴───────────────────────────────┴─────────────────────┴───────┘
    
    All services are started.
    
      Active media resource selected list specific:
    ┌─────────────┬───────────┬─────────────┬───────────┬───────────┐
    │    Node     │    MSR    │     MSR     │ Cc-status │ Cc-uptime │
    │             │           │   version   │           │           │
    ├─────────────┼───────────┼─────────────┼───────────┼───────────┤
    │ core1@ecss2 │ msr.ecss1 │ 3.17.1.0.27 │ connected │ 00:10:50  │
    │             │ msr.ecss2 │ 3.18.0.7    │ connected │ 00:10:51  │
    └─────────────┴───────────┴─────────────┴───────────┴───────────┘
  12. На ecss1 запустите сервис ds и в CoCon проверить, что сервис ds доступен на обоих хостах ecss1/ ecss2:

    на ecss1

    sudo systemctl start ecss-ds
    CODE

    выполняется в CoCon
    /system-status                                              
    Checking...
    ┌─┬───────────────┬────────────────────────┬───────────────────────────────┬─────────────────────┬───────┐
    │ │     Node      │        Release         │         Erlang nodes          │    Mnesia nodes     │Uptime │
    ├─┼───────────────┼────────────────────────┼───────────────────────────────┼─────────────────────┼───────┤
    │ │core1@ecss2    │ecss-core-3.18.0.249    │core1@ecss1,core1@ecss2        │not running          │12m 12s│
    │ │ds1@ecss1      │ecss-ds-3.18.0.249      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │12m 14s│
    │ │ds1@ecss2      │ecss-ds-3.18.0.249      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │12m 12s│
    │ │md1@ecss2      │ecss-mediator-3.18.0.249│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │12m 12s│
    │ │mycelium1@ecss1│ecss-mycelium-3.18.0.249│mycelium1@ecss1,mycelium1@ecss2│not running          │12m 14s│
    │ │mycelium1@ecss2│ecss-mycelium-3.18.0.249│mycelium1@ecss1,mycelium1@ecss2│not running          │12m 13s│
    │ │sip1@ecss2     │ecss-pa-sip-3.18.0.249  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│12m 13s│
    └─┴───────────────┴────────────────────────┴───────────────────────────────┴─────────────────────┴───────┘
    
    All services are started.
    
      Active media resource selected list specific:
    ┌─────────────┬───────────┬─────────────┬───────────┬───────────┐
    │    Node     │    MSR    │     MSR     │ Cc-status │ Cc-uptime │
    │             │           │   version   │           │           │
    ├─────────────┼───────────┼─────────────┼───────────┼───────────┤
    │ core1@ecss2 │ msr.ecss1 │ 3.17.1.0.27 │ connected │ 00:10:50  │
    │             │ msr.ecss2 │ 3.18.0.7    │ connected │ 00:10:51  │
    └─────────────┴───────────┴─────────────┴───────────┴───────────┘
  13. Далее такими же действиями запустить сервисы: ecss-mediator, ecss-pa-sip, ecss-core следующими командами:

    на ecss1

    sudo systemctl start ecss-core
    CODE

    на ecss1

    sudo systemctl start ecss-mediator
    CODE

    на ecss1

    sudo systemctl start ecss-pa-sip
    CODE
    Проверить статус в CoCom:
    Результат:
    /system-status                                              
    Checking...
    ┌─┬───────────────┬────────────────────────┬───────────────────────────────┬─────────────────────┬───────┐
    │ │     Node      │        Release         │         Erlang nodes          │    Mnesia nodes     │Uptime │
    ├─┼───────────────┼────────────────────────┼───────────────────────────────┼─────────────────────┼───────┤
    │ │core1@ecss1    │ecss-core-3.18.0.249    │core1@ecss1,core1@ecss2        │not running          │12m 14s│
    │ │core1@ecss2    │ecss-core-3.18.0.249    │core1@ecss1,core1@ecss2        │not running          │12m 12s│
    │ │ds1@ecss1      │ecss-ds-3.18.0.249      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │12m 14s│
    │ │ds1@ecss2      │ecss-ds-3.18.0.249      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │12m 12s│
    │ │md1@ecss1      │ecss-mediator-3.18.0.249│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │12m 14s│
    │ │md1@ecss2      │ecss-mediator-3.18.0.249│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │12m 12s│
    │ │mycelium1@ecss1│ecss-mycelium-3.18.0.249│mycelium1@ecss1,mycelium1@ecss2│not running          │12m 14s│
    │ │mycelium1@ecss2│ecss-mycelium-3.18.0.249│mycelium1@ecss1,mycelium1@ecss2│not running          │12m 13s│
    │ │sip1@ecss1     │ecss-pa-sip-3.18.0.249  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│12m 14s│
    │ │sip1@ecss2     │ecss-pa-sip-3.18.0.249  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│12m 13s│
    └─┴───────────────┴────────────────────────┴───────────────────────────────┴─────────────────────┴───────┘
    
    All services are started.
    
      Active media resource selected list specific:
    ┌─────────────┬───────────┬─────────────┬───────────┬───────────┐
    │    Node     │    MSR    │     MSR     │ Cc-status │ Cc-uptime │
    │             │           │   version   │           │           │
    ├─────────────┼───────────┼─────────────┼───────────┼───────────┤
    │ core1@ecss1 │ msr.ecss1 │ 3.17.1.0.27 │ connected │ 00:10:51  │
    │             │ msr.ecss2 │ 3.18.0.7    │ connected │ 00:10:48  │
    │ core1@ecss2 │ msr.ecss1 │ 3.17.1.0.27 │ connected │ 00:10:50  │
    │             │ msr.ecss2 │ 3.18.0.7    │ connected │ 00:10:51  │
    └─────────────┴───────────┴─────────────┴───────────┴───────────┘
  14. Выполнить конфигурацию подключения SSW к LO следующей командой в CoCon, (в примере LO установлен в кластере, IPadd хостов 10.0.10.51 и 10.0.10.52. значение порта из файла /etc/ecss/ecss-license-officer/config.env по умолчанию 4321):

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

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

    В случае установки LO на хостах SSW указывать IPadd OAM.

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

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

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

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

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

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

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

    Данное поведение применимо только при работе в elm-режиме.

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

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

    /cluster/storage/ds1/licence/request
    CODE

    type=elm

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

    type=elm

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



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

  15. Обновление пакета ecss-restfs:

    на ecss1

    sudo apt install ecss-restfs
    CODE
  16. Обновление пакета ecss-media-server:

    на ecss1

    sudo apt install ecss-media-server
    CODE
    Актуализировать конфигурацию:

    на ecss1

    sudo dpkg-reconfigure ecss-media-server
    CODE
    Проверить и при необходимости исправить вручную файл → /etc/ecss/ecss-media-server/config.xml
    на 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>


  17. Обновление пакета ecss-media-resources:

    на ecss1

    sudo apt install ecss-media-resources
    CODE
  18. Обновление пакета ecss-web-conf:

    на ecss1

    sudo apt install ecss-web-conf
    CODE
  19. Проверить список установленных сервисов командой:

    на ecss2

    sudo dpkg -l | grep ecss
    CODE
    Пример:
    sudo dpkg -l | grep ecss
    ii  ecss-cc-ui                             17.1.0.53+cc-ui                         amd64        Eltex/ECSS-10 UI and API for call center
    ii  ecss-dns-env                           18.0.0                                  amd64        Eltex/ECSS-10 Configuration settings for domain service
    ii  ecss-license-master                    1.0.77                                  amd64        Eltex/ECSS-10 license master
    ii  ecss-media-resources                   18.0.0                                  amd64        Eltex/ECSS-10 Media resources
    ii  ecss-media-server                      18.0.7                                  amd64        Eltex/ECSS-10 Media server
    ii  ecss-node                              18.0.249                                amd64        Eltex/ECSS-10 Node services
    ii  ecss-peeper-client                     17.1.0.23                               amd64        Eltex/ECSS-10 peeper client
    ii  ecss-postgres-bdr-ssw                  18.0.0+ssw                              amd64        Eltex/Postgres BDR
    ii  ecss-restfs                            18.0.22                                 amd64        Eltex/ECSS-10 RestFS API interface for filesystem
    ii  ecss-teleconference-ui                 17.1.0.31                               amd64        Eltex/ECSS-10 UI and API for Teleconference
    ii  ecss-user                              18.0.0                                  amd64        Eltex/ECSS-10 SSW user environment
    ii  ecss-utils                             18.0.0                                  amd64        Eltex/ECSS-10 Utilities for reading binary logs
    ii  ecss-web-conf                          18.0.31                                 amd64        Eltex/ECSS-10 Web configurator

    По результатам выполнения команды переустановить пакеты имеющие версию 17.1.* . В данном примере – ecss-cc-ui/ecss-peeper-client/ecss-teleconference-ui.

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

    на ecss1

    sudo apt install ecss-teleconference-ui
    CODE

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

    на ecss1

    sudo apt install ecss-cc-ui
    CODE

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

    на ecss2

    sudo apt install ecss-peeper-client
    CODE
  20. Удалить более неиспользуемый пакет ecss-elm-adapter командой:

    на ecss2

    sudo apt purge ecss-elm-adapter
    CODE

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


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

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