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

SSW 3.14.15 до обновления

Шаг первый - "подготовительные действия на ecss2"

Шаг второй - обновление операционной системы Ubuntu 18.04 на ecss2

Шаг третий - подготовка к обновлению сервисов SSW на ecss2

Шаг четвертый - обновление сервисов SSW на ecss2

Шаг пятый - подготовительные действия на ecss1

Шаг шестой - обновление  операционной системы  Ubuntu 18.04 на ecss1

Шаг седьмой - подготовка к обновлению сервисов SSW на ecss1

Шаг восьмой - обновление сервисов SSW на ecss1









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

    1. Выполнить полный «бэкап» (см. «Регламентное обслуживание и резервное копирование»).
    2. Если нужны последние данные биллинга, то необходимо финализировать текущую cdr и скачать CDR файлы на удаленный сервер:
      /domain/test_domain/cdr/make_finalize_cdr 
      Created file(s): cdr_20250822_11_51_16_1_c.csv
    3. Включить настройку для автоматической синхронизации файлов, находящихся в сплите (по большему размеру). Подробнее см. "Проблемы связанные с возникновением split-brain" .
      на ecss1
      sudo gluster volume set ecss_volume cluster.favorite-child-policy size
    4. Остановить репликации MySQL.
      Убедитесь, что значения параметров Slave_IO_Running и Slave_SQL_Running равны No.
      на ecss1/ecss2
      sudo mysql -uroot -p -e 'STOP SLAVE;'
      на ecss1/ecss2
      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
      . . .
    5. При обновлении кластера следует обновлять сервера по очереди. Таким образом, при обновлении один из серверов будет всегда запущен и работа сервисов не будет прервана. Для разделения кластера следует использовать инструмент ecss-control на обоих серверах (Описание команд утилиты приведено в «Приложении Н»).
      Обмен sip сигнализацией происходит через SIP-VRRP IP адрес. Аналогичным образом, через MySQL-VRRP IP адрес, происходит подключение к MySQL. Этот функционал реализован для возможности миграции Ip адреса на другой хост в случае падения/отключения/техобслуживания основного хоста. Контроль миграции IP адресов осуществляется сервисом keepalive на каждом хосте. Для перевода трафика на первый сервер (ecss1), необходимо выключить keepalive на втором хосте (ecss2). В этом случае оба SIP-VRRP IP адреса, а так же  MySQL-VRRP IP адрес, будут находится на первом хосте (ecss1). Выполнить следующую команду:
      на ecss2
      sudo systemctl disable --now keepalived.service
    6. Командой ifconfig проверить, что все VRRP IP-адреса находятся на ecss1 (VRRP-mysql/VRRP-SIP1/VRRP-SIP2).
      на ecss1
      ifconfig
    7. На ecss1 выполнить разделение SSW на два независимых сервера следующей командой:

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


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

      Если после разделения на первом хосте при попытке вызова/регистрации появляется ошибка "503 Service Unavailable". То на проблемном хосте выполните следующие команды:  ecss-attach ecss-pa-sip

      ecss-attach ecss-pa-sip
      *********************************************************************************
      ! You attached to systemd-service ecss-pa-sip: sip1@ecss1.                         !
      ! To exit, press Ctrl+C, Ctrl+C.                                                   !
      *********************************************************************************
      Erlang/OTP 21 [erts-10.3.5.10] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
       
      Eshell V10.3.5.10  (abort with ^G)
      (sip1@ecss1)1> sip_config:tring_is_connected().
      false
      (sip1@ecss1)2> sip_config:tring_is_connected(true).
      ok
      (sip1@ecss1)3> sip_config:tring_is_connected().   
      true


    8. После разделения кластера необходимо замаскировать все ноды на сервере, который будет обновляться первым:
      на ecss2
      sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

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

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

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

    9. Выполнить резервное копирование баз данных.

      ВАЖНО! Корректность данных в резервной копии

      Перед созданием резервной копии убедитесь, что в вашей БД таблица tolltickets не содержит устаревших полей командой:

      sudo mysql -uroot -p -e "SHOW CREATE TABLE ecss_calls_db.tolltickets\G;" | grep 'ss_info' || echo "Поле не найдено"

      Если команда показала "`ss_info` text COLLATE latin1_general_ci,", то приведите таблицу к актуальному состоянию командой:

      sudo mysql -uroot -p -e "ALTER TABLE ecss_calls_db.tolltickets DROP COLUMN ss_info;"



      на ecss2
      sudo mysqldump -uroot -p --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers --databases ecss_address_book ecss_audit ecss_calls_db ecss_dialer_db ecss_meeting_db ecss_numbers_db ecss_statistics ecss_subscribers ecss_system web_conf history_db > ./all_dump.sql
    10. Добавить в конфигурацию mysql параметры skip-log-bin и skip-slave-start на ecss2 (чтобы избежать записи в бинарные логи процесса удаления БД), выполнив команду :
      на ecss2
      sudo sed -i  '40i\skip-log-bin\nskip-slave-start' /etc/mysql/mysql.conf.d/mysqld.cnf
    11. Удалить резервный файл конфигурации (чтобы при удалении, ecss-mysql не загрузил конфигурацию из него):
      на ecss2
      sudo rm /var/lib/ecss/ecss-mysql/backup/mysqld.cnf
    12. Перезапустить ecss-mysql с новой конфигурацией:
      на ecss2
      sudo systemctl restart mysql.service
    13. Для корректной работы репликации после обновления необходимо сохранить конфигурационные файлы ecss-mysql, поэтому делаем отдельный backup для файлов до обновления:
      на ecss2
      sudo cp -a /etc/ecss/ecss-mysql ~/ecss-mysql-etc-backup
    14. Удалить ecss-web-conf и ecss-mysql, вместе с конфигурационными файлами (чтобы не было ошибок конфигураций при обновлении):

      В вопросах измените IP MySQL на локальный IP БД

      на ecss2
      sudo dpkg-reconfigure ecss-web-conf

      на ecss2
      sudo apt purge ecss-web-conf

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

      на ecss2
      sudo apt purge ecss-mysql
    15. Проверьте, что БД удалены, выполнив команду, в выводе не должно быть других БД кроме системных ('information_schema','mysql','performance_schema','sys'):
      на ecss2
      sudo mysql -uroot -p -e "SHOW DATABASES;"
    16. Если используется ecss-call-api и ecss-elph-api, то их нужно удалить (чтобы не было конфликтов зависимостей при обновлении).
      на ecss2
      sudo apt-get remove ecss-call-api
      sudo apt-get remove ecss-elph-api
    17. Удалить skip-log-bin из файла конфигурации:
      на ecss2
      sudo sed -i '/skip-log-bin/d' /etc/mysql/mysql.conf.d/mysqld.cnf
    18. Зафиксировать пакеты mysql (чтобы пакетный менеджер при обновлении системы не удалил mysql):
      на ecss2
      sudo apt-mark hold mysql-*
    19. Установить версию пакета nodejs (чтобы корректно было выполнено обновление дистрибутива):
      на ecss2
      sudo apt install nodejs=8.10.*

2 Обновление операционной системы Ubuntu 18.04 на ecss2

    1. Обновление с Ubuntu 18.04 (Bionic) до Ubuntu 20.04 (Focal)
      на ecss2
      do-release-upgrade -m server

      на ecss2

      В случае получения сообщения:

      Checking for a new Ubuntu release
      Please install all available updates for your release before upgrading.

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

      на ecss2
      sudo apt update
      на ecss2
      sudo apt upgrade
      на ecss2
      sudo apt dist-upgrade

      так же может потребоваться обновить пакет ecss-user следующей командой:

      на ecss2
      sudo apt install ecss-user

      и затем повторить команду do-release-upgrade -m server:

      на ecss2
      do-release-upgrade -m server



      Ответы на вопросы во время обновления

      Во время обновления принять все новые конфигурации пакетов ecss.


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

    2. Проверка сервиса dnsmasq.
      Если после обновления сервис dnsmasq не находится в активном состоянии :
      на ecss2
      systemctl is-active dnsmasq

      пример
      systemctl is-active dnsmasq
      failed
      Выполнить следующие команды:
      Удалить оставшийся конфигурационный файл:
      на ecss2
      sudo rm /etc/dnsmasq.d/lxd
      Перезапустить сервис dnsmasq :
      на ecss2
      sudo systemctl restart dnsmasq
      Проверить статус сервиса:
      пример
      systemctl is-active dnsmasq
      active

      После этих действий, сервис должен быть активным и работать без ошибок.

    3. Обновление пакетов mysql.
      Отключить фиксацию пакетов:
      на ecss2
      sudo apt-mark unhold mysql-*
      Обновить mysql до версии 8.0:
      на ecss2
      sudo apt install mysql-server

      Ответы на вопросы пакетного менеджера

      Важно! Во время обновления mysql необходимо оставить старую конфигурацию файла /etc/mysql/mysql.conf.d/mysqld.conf, чтобы не потерять выставленные флаги.

      После обновления необходимо актуализировать настройки mysql для версии 8.0:
      на ecss2
      sudo sed -i -e 's/^max_allowed_packet.*/max_allowed_packet = 64M/' \
             -e 's/^thread_stack.*/thread_stack = 256K/' /etc/mysql/mysql.conf.d/mysqld.cnf
    4. Закончить обновление хоста следующей  командой:
      на ecss2
      sudo apt full-upgrade
      Проверить версию Ubuntu следующей командой:
      на ecss2
       lsb_release -a

      Результат:
      lsb_release -a
      No LSB modules are available.
      Distributor ID:	Ubuntu
      Description:	Ubuntu 20.04.6 LTS
      Release:	20.04
      Codename:	focal
    5. Обновление c Ubuntu 20.04 (Focal) до Ubuntu 22.04 (Jammy)
      на ecss2
      do-release-upgrade -m server

      При сообщении системы:

      do-release-upgrade -m server
      Checking for a new Ubuntu release
      You have not rebooted after updating a package which requires a reboot. Please reboot before upgrading.

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

      на ecss2
      sudo reboot

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

      на ecss2
      do-release-upgrade -m server



      Ответы на вопросы во время обновления

      Во время обновления принять все новые конфигурации пакетов ecss.

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

    6. После завершения обновления выполнить команду:
      на ecss2
      sudo apt autoremove

      Данный шаг может выполняться достаточно долго


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

    1. Выполнить сплит на ecss2:

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


      на ecss2
      sudo ecss-control detach
    2. Актуализировать репозиторий ssw:
      на ecss2
      sudo sh -c "echo deb [arch=amd64] http://archive.eltex.org/ssw/jammy/3.14.16.1 stable main extras external > /etc/apt/sources.list.d/eltex-ecss10-stable.list"
    3. Временно зафиксировать версию пакетов ecss-*, на которые надо будет обновиться:
      на ecss2
      sudo sh -c "echo 'Package: ecss-*\nPin: version 14.16.1.*\nPin-Priority: 1001\n\nPackage: erlang*\nPin: version 2:24.3.10*\nPin-Priority: 1001' >> /etc/apt/preferences.d/eltex-ecss10"
    4. Выполнить обновление пакетов:
      на ecss2
      sudo apt update
    5. Выключаем nginx сервис:
      на ecss2
      sudo systemctl disable --now nginx

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

    1. Обновление пакета ecss-dns-env:
      на ecss2
      sudo apt install ecss-dns-env

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


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

      на ecss2
      sudo apt install ecss-user
    3. Обновление пакета ecss-mysql:

      Перед обновлением пакета  ecss-mysql для сохранения совместимости с mysql v5.7, надо включить в конфигурации mysql, по умолчанию, устаревший плагин :

      на ecss2
      sudo sh -c "echo '[mysqld]\ndefault_authentication_plugin = mysql_native_password' >>  /etc/mysql/conf.d/plugin.cnf"


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

      на ecss2
      sudo systemctl restart mysql

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

      на ecss2
      sudo apt install ecss-mysql

      При установке на вопрос "Path for external data-directory, where will be created tables of databases" надо указать внешнюю директорию хранения таблиц баз данных, либо принять значение по умолчанию. 

      ответы на вопросы  конфигураторa
      Обратно переместить backup конфигурационных файлов ecss-mysql (сохраненный ранее):

      на ecss2
      sudo rm -rf /etc/ecss/ecss-mysql && sudo cp -a ~/ecss-mysql-etc-backup /etc/ecss/ecss-mysql

      Проверьте и при необходимости актуализируйте параметры в "/etc/ecss/ecss-mysql/mysql-checker.conf".

      Переменная "MASTER_HOST_IP" - это VRRP-адрес для MySQL, определенный в конфигурации keepalived .

    4. Включите ecss-mysql-checker.timer:
      на ecss2
      sudo systemctl enable --now ecss-mysql-checker.timer
    5. Загрузка резервной копии баз данных:
      Перед загрузкой резервной копии необходимо модифицировать его, указав внешнюю директорию хранения таблиц баз данных. Так как таблицы баз данных ecss-mysql устанавливаются в отдельной директории (/var/lib/ecss-mysql), необходимо для всех таблиц в резервной копии указать внешнюю директорию, иначе они будут создаваться в стандартной data-директории (/var/lib/mysql). Также при загрузке резервной копии отключаем запись бинарных логов.
      на ecss2
      sudo sed -E "s/(ENGINE=(MyISAM|InnoDB))/\1 DATA DIRECTORY = '\/var\/lib\/ecss-mysql'/g" all_dump.sql | (echo "SET sql_log_bin = 0;"; cat -) | sudo mysql -uroot -p
      После загрузки резервной копии сделайте реконфигурирование пакета ecss-mysql, чтобы прошли необходимые миграции v3.14.16, которые отсутствуют в резервной копии.
      на ecss2
      sudo dpkg-reconfigure ecss-mysql
      Перезапустить репликацию командой и убедится, что slave сервер подтянул все изменения от мастера (дождаться, пока переменная "Seconds_Behind_Master" не станет равна 0, а значение Relay_Master_Log_File должно сойтись со значением Master_Log_File).
      на ecss2
      sudo mysql -uroot -p -e "START SLAVE;"
      на ecss2
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
      пример
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
      [sudo] password for abf: 
                    Master_Log_File: server-mysql-bin.001152
              Relay_Master_Log_File: server-mysql-bin.001152
              Seconds_Behind_Master: 0

      Удалить параметр skip-slave-start из конфигурации mysql и резервного файла:
      на ecss2
      sudo sed -i '/skip-slave-start/d' /etc/mysql/mysql.conf.d/mysqld.cnf 
      sudo sed -i '/skip-slave-start/d' /var/lib/ecss/ecss-mysql/backup/mysqld.cnf

      Перезапускать mysql не обязательно - данная опция влияет только на состояние SLAVE при старте mysql, а его запустили напрямую.

    6. Обновление Erlang и SSW.
      Перед обновлением включить сервисы ssw следующими командами: 
      на ecss2
      sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

      на ecss2
      sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

      Перед обновлением, удалить устаревшую версию Erlang. Команда ниже обновит Erlang до версии 24.3, а также обновит до новейшей версии пакеты ecss-node и ecss-utils:
      на ecss2
      sudo apt remove erlang-base-hipe

      Если Erlang  не обновился, удалением старого пакета, то сначала обновить ecss-node и ecss-utils, а затем обновить весь Erlang:

      на ecss2
      sudo apt install ecss-node ecss-utils
      на ecss2
      sudo apt install erlang


      После обновления Erlang демаскировать сервис, который был маскирован при удалении erlang-base-hipe:
      на ecss2
      sudo systemctl unmask epmd.socket epmd.service
    7. Запуск SSW на ecss2.
      Перед запуском изменить имя кластера на отличное от имени кластера указанном на ecss1. Например, добавьте постфикс upd в имя кластера:

      Требуется по причине того, что mycelium1 и mycelium2 находят друг друга и в случае разных версий  - mycelium на ecss2 падает. 

      на ecss2
      sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
      на ecss2
      {mycelium_broker, [
          {cluster_name, 'test_cluster_upd'},
      Так же меняем значение таймера для ds сервиса:
      на ecss2
      sed -i 's/{cluster_timeout, 60000}/{cluster_timeout, 10800000}/g' /etc/ecss/ecss-ds/ds1.config
      запустить следующие сервисы:
      ecss-mycelium
      на ecss2
      sudo systemctl start ecss-mycelium
      ecss-ds
      на ecss2
      sudo systemctl start ecss-ds
      ecss-core
      на ecss2
      sudo systemctl start ecss-core

      !!!ПОКА НЕ ЗАПУСКАЕМ PA-SIP!!!

      ecss-mediator
      на ecss2
      sudo systemctl start ecss-mediator

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

      на ecss2
      sudo systemctl start ecss-sorm

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

      на ecss2
      sudo systemctl unmask ecss-sorm
      sudo systemctl start ecss-sorm


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

      выполняется в CoCon
      /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

    8. Проверить статус сервисов, для этого выполнить в CoCon команду system-status:
      выполняется в CoCon
      /system-status 
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────┬────────────┬──────┐
      │ │     Node      │          Release           │ Erlang nodes  │Mnesia nodes│Uptime│
      ├─┼───────────────┼────────────────────────────┼───────────────┼────────────┼──────┤
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss2    │not running │2m 27s│
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss2      │ds1@ecss2   │2m 32s│
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss2      │md1@ecss2   │2m 16s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss2│not running │2m 39s│
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │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.15.243 │ connected │ 00:00:10  │
      │             │ msr.ecss2 │ 3.14.15.243 │ connected │ 00:00:10  │
      └─────────────┴───────────┴─────────────┴───────────┴───────────┘
    9. Обновление пакета ecss-restfs.

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

      на ecss2
      sudo apt install ecss-restfs
    10. Обновление пакета ecss-media-server.
      Предварительно отключить регистрацию на рабочий хост ecss1. Для этого надо закомментировать в конфигурационном файле строку с realm рабочего хоста (в примере realm="sip:10.0.20.81:5000"), следующей командой (добавив <!- - вначале строки , и - -> в конце строки ), следующей командой:
      на ecss2
      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>
      Выполнить обновление:
      на ecss2
      sudo apt install ecss-media-server
      Актуализировать конфигурацию:
      на ecss2
      sudo dpkg-reconfigure ecss-media-server
      Выполнить проверку, и при необходимости отредактировать файл командой :
      на ecss2
      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>
    11. Обновление пакета ecss-media-resources:
      на ecss2
      sudo apt install ecss-media-resources
    12. Обновление пакета ecss-web-conf

      на ecss2
      sudo apt install ecss-web-conf
    13. Обновление пакета ecss-teleconference-ui

      на ecss2
      sudo apt install ecss-teleconference-ui

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

      на ecss2
      sudo apt install ecss-crm-server

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

      на ecss2
      sudo apt install ecss-cc-ui

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

      на ecss2
      sudo apt install ecss-call-api

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

      на ecss2
      sudo apt install ecss-elph-api
    14. Перед переводом keepalived на обновленный хост необходимо скопировать актуальную базу ds с ecss1 (иначе база регистраций будет пустая). Поэтому сначала делаем backup БД Mnesia на ecss1:
      выполняется в CoCon
      /node/ds1@ecss1/oasys/backup
      /node/ds1@ecss1/oasys/backup      
      Backup was successfully created at the path: "/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517"
      Останавливаем ecss-ds на ecss2:
      на ecss2
      sudo systemctl stop ecss-ds
      Командой scp копируем backup c ecss1 на ecss2.
      на ecss2
      scp -r ecss@ecss1:/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys
      Выполняем локальную копию текущей конфигурации:
      на ecss2
      sudo cp -a /var/lib/ecss/oasys/Mnesia.ds1@ecss2 /var/lib/ecss/oasys/Mnesia.ds1@ecss2-bkp
      Заменяем локальную конфигурацию на конфигурацию backup c ecss1:
      на ecss2
      sudo mv /var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys/Mnesia.ds1@ecss2

      на ecss2
      sudo chown -R ssw:ssw /var/lib/ecss/oasys
      Запустить ecss-ds и ecss-pa-sip (чтобы подгрузились актуальные регистрации абонентов):
      на ecss2
      sudo systemctl start ecss-ds
      на ecss2
      sudo systemctl start ecss-pa-sip
      Проверить статус сервисов командой /system-status :
      выполняется в CoCon
      /system-status 
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────┬────────────┬──────┐
      │ │     Node      │          Release           │ Erlang nodes  │Mnesia nodes│Uptime│
      ├─┼───────────────┼────────────────────────────┼───────────────┼────────────┼──────┤
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss2    │not running │2m 27s│
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss2      │ds1@ecss2   │2m 32s│
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss2      │md1@ecss2   │2m 16s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss2│not running │2m 39s│
      │ │sip1@ecss2     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss2     │sip1@ecss2  │2m 22s│
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │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.15.243 │ connected │ 00:00:10  │
      │             │ msr.ecss2 │ 3.14.16.1.0 │ connected │ 00:00:10  │
      └─────────────┴───────────┴─────────────┴───────────┴───────────┘
    15. Запуск сервиса keepalived
      на ecss2
      sudo systemctl enable --now keepalived
    16. После обновления сервисов удалить файл фиксации версии ssw:
      на ecss2
      sudo rm /etc/apt/preferences.d/eltex-ecss10


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

    1. Выполнить полный «бэкап» (см. «Регламентное обслуживание и резервное копирование»).
    2. Остановка репликации MySQL (на ecss2). Убедится, что значения параметров Slave_IO_Running и Slave_SQL_Running равны No.  
      на ecss2
      sudo mysql -uroot -p -e 'STOP SLAVE;'
      на ecss2
      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
      . . .
    3. Подготовить ecss1 к обновлению, для этого, перевести весь трафик на ecss2 (команда выполняется на ecss1):
      на ecss1
      sudo systemctl disable --now keepalived.service
    4. Командой ifconfig проверьте, что все VRRP адреса  (VRRP IP-mysql / VRRP IP-SIP1 / VRRP IP-SIP2) находятся на ecss2.
      на ecss2
      ifconfig

      Если после переключения на ecss2, при попытке вызова/регистрации появляется ошибка "503 Service Unavailable". То на проблемном хосте выполните следующие команды: ecss-attach ecss-pa-sip

      ecss-attach ecss-pa-sip
      *********************************************************************************
      ! You attached to systemd-service ecss-pa-sip: sip1@ecss1.                         !
      ! To exit, press Ctrl+C, Ctrl+C.                                                   !
      *********************************************************************************
      Erlang/OTP 21 [erts-10.3.5.10] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
       
      Eshell V10.3.5.10  (abort with ^G)
      (sip1@ecss1)1> sip_config:tring_is_connected().
      false
      (sip1@ecss1)2> sip_config:tring_is_connected(true).
      ok
      (sip1@ecss1)3> sip_config:tring_is_connected().   
      true


    5. После разделения кластера необходимо выключить все ноды на сервере ecss1:
      на ecss1
      sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
    6. Резервное копирование баз данных (на ecss1):

      ВАЖНО! Корректность данных в резервной копии

      Перед созданием резервной копии убедитесь, что в вашей БД таблица tolltickets не содержит устаревших полей командой:

      sudo mysql -uroot -p -e "SHOW CREATE TABLE ecss_calls_db.tolltickets\G;" | grep 'ss_info' || echo "Поле не найдено"

      Если команда показала "`ss_info` text COLLATE latin1_general_ci,", то приведите таблицу к актуальному состоянию командой:

      sudo mysql -uroot -p -e "ALTER TABLE ecss_calls_db.tolltickets DROP COLUMN ss_info;"



      на ecss1
      sudo mysqldump -uroot -p --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers --databases ecss_address_book ecss_audit ecss_calls_db ecss_dialer_db ecss_meeting_db ecss_numbers_db ecss_statistics ecss_subscribers ecss_system web_conf history_db > ./all_dump.sql
    7. Добавить в конфигурацию mysql параметры skip-log-bin и skip-slave-start на ecss1 (чтобы избежать записи в бинарные логи процесса удаления БД):
      на ecss1
      sudo sed -i '40i\skip-log-bin\nskip-slave-start' /etc/mysql/mysql.conf.d/mysqld.cnf
    8. Удалить резервный файл конфигурации (чтобы при удалении, ecss-mysql не загрузил конфигурацию из него):
      на ecss1
      sudo rm /var/lib/ecss/ecss-mysql/backup/mysqld.cnf
    9. Перезапустить mysql с новой конфигурацией:
      на ecss1
      sudo systemctl restart mysql.service
    10. Для корректной работы репликации после обновления необходимо сохранить конфигурационные файлы ecss-mysql, поэтому создать отдельный backup для файлов до обновления:
      на ecss1
      sudo cp -a /etc/ecss/ecss-mysql ~/ecss-mysql-etc-backup
    11. Удалить ecss-web-conf и ecss-mysql вместе с конфигурационными файлами (чтобы не было ошибок конфигураций при обновлении):

      В вопросах измените IP MySQL на локальный IP БД


      на ecss1
      sudo dpkg-reconfigure ecss-web-conf

      на ecss1
      sudo apt purge ecss-web-conf

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


      на ecss1
      sudo apt purge ecss-mysql
    12. Проверьте, что БД удалены командой:

      В выводе не должно быть других БД кроме системных ('information_schema','mysql','performance_schema','sys').


      на ecss1
      sudo mysql -uroot -p -e "SHOW DATABASES;"
    13. Если используется ecss-call-api и ecss-elph-api, то удалите (чтобы не было конфликтов зависимостей при обновлении):
      на ecss1
      sudo apt remove ecss-call-api
      sudo apt remove ecss-elph-api
    14. Удалить skip-log-bin из файла конфигурации:
      на ecss1
      sudo sed -i '/skip-log-bin/d' /etc/mysql/mysql.conf.d/mysqld.cnf
    15. Зафиксировать пакеты mysql (чтобы пакетный менеджер при обновлении системы не удалил mysql):
      на ecss1
      sudo apt-mark hold mysql-*
    16. Установить версию пакета nodejs (чтобы корректно было выполнено обновление дистрибутива):
      на ecss1
      sudo apt install nodejs=8.10.*

6 Обновление  операционной системы  Ubuntu 18.04 на ecss1

    1. Обновление c Ubuntu 18.04 (Bionic) до Ubuntu 20.04 (Focal)
      на ecss1
      do-release-upgrade -m server

      В случае получения сообщения:

      Checking for a new Ubuntu release
      Please install all available updates for your release before upgrading.

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

      на ecss1
      sudo apt update
      на ecss1
      sudo apt upgrade
      на ecss1
      sudo apt dist-upgrade

      так же может потребоваться обновить пакет ecss-user следующей командой:

      на ecss1
      sudo apt install ecss-user

      и затем повторить команду do-release-upgrade -m server:

      на ecss1
      do-release-upgrade -m server



      Ответы на вопросы во время обновления

      Во время обновления принять все новые конфигурации пакетов ecss.

    2. Проверка сервиса dnsmasq
      Проверка сервиса dnsmasq
      • Если после обновления сервис dnsmasq не находится в активном состоянии :
        на ecss1
        systemctl is-active dnsmasq

        пример
        systemctl is-active dnsmasq
        failed

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

        на ecss1
        sudo rm /etc/dnsmasq.d/lxd

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

        на ecss1
        sudo systemctl restart dnsmasq

        Проверить статус сервиса:

        пример
        systemctl is-active dnsmasq
        active

        После данных шагов, сервис должен быть активным и работать без ошибок.


      Обновление пакетов mysql.
      Убрать фиксацию пакетов:
    3. на ecss1
      sudo apt-mark unhold mysql-*
      Обновить mysql до версии 8.0:
      на ecss1
      sudo apt install mysql-server

      Ответы на вопросы пакетного менеджера

      Важно! Во время обновления mysql необходимо оставить старую конфигурацию файла /etc/mysql/mysql.conf.d/mysqld.conf, чтобы не потерять выставленные флаги.

      После обновления необходимо актуализировать настройки mysql для версии 8.0:
      на ecss1
      sudo sed -i -e 's/^max_allowed_packet.*/max_allowed_packet = 64M/' \
             -e 's/^thread_stack.*/thread_stack = 256K/' /etc/mysql/mysql.conf.d/mysqld.cnf
    4. Закончить обновление хоста командой:
      на ecss1
      sudo apt full-upgrade
    5. Обновление с Ubuntu 20.04 (Focal) до Ubuntu 22.04 (Jammy)
      на ecss1
      do-release-upgrade -m server

      Ответы на вопросы во время обновления

      Во время обновления принять все новые конфигурации пакетов ecss.

    6. После завершения обновления выполните:
      на ecss1
      sudo apt autoremove

      Данный шаг может выполняться достаточно долго


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

    1. Перед обновлением актуализировать репозиторий ssw:
      на ecss1
      sudo sh -c "echo deb [arch=amd64] http://archive.eltex.org/ssw/jammy/3.14.16.1 stable main extras external > /etc/apt/sources.list.d/eltex-ecss10-stable.list"
    2. Временно зафиксировать версию пакетов ecss-*, на которые надо будет обновиться:
      на ecss1
      sudo sh -c "echo 'Package: ecss-*\nPin: version 14.16.1.*\nPin-Priority: 1001\n\nPackage: erlang*\nPin: version 2:24.3.10*\nPin-Priority: 1001' >> /etc/apt/preferences.d/eltex-ecss10"
    3. Обновить пакеты командой:
      на ecss1
      sudo apt update


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

    1. Обновление пакета ecss-dns-env.
      на ecss1
      sudo apt install ecss-dns-env
      При обновлении принимать новые конфигурационные файлы -Y.
       
      После обновления актуализировать конфигурацию командой:
      на ecss1
      sudo dpkg-reconfigure ecss-dns-env
    2. Обновление пакета ecss-user:
      на ecss1
      sudo apt install ecss-user
    3. Обновление пакета ecss-mysql:
      Т.к. оба хоста обновятся до mysql v8.0, надо отключить плагин по умолчанию в конфигурации mysql и поменять плагин пользователей на ecss2
      на ecss2
      sudo rm /etc/mysql/conf.d/plugin.cnf
      на ecss2
      sudo mysql -uroot -p -N -e "SELECT CONCAT('ALTER USER \`', user, '\`@\`', host, '\` IDENTIFIED WITH caching_sha2_password;')
      FROM mysql.user
      WHERE plugin='mysql_native_password'  AND user NOT IN ('root','replica','debian-sys-maint','mysql.session','mysql.sys');" | sudo mysql

      Ни в коем случае не делать рестарт MySQL сервиса!

      Далее установить пакет ecss-mysql:
      на ecss1
      sudo apt install ecss-mysql
      ответы на вопросы  конфигураторa

      При установке на вопрос "Path for external data-directory, where will be created tables of databases" надо указать внешнюю директорию хранения таблиц баз данных, либо принять значение по умолчанию.

      Обратно переместить backup конфигурационных файлов ecss-mysql (сохраненный ранее):
      на ecss1
      sudo rm -rf /etc/ecss/ecss-mysql && sudo cp -a ~/ecss-mysql-etc-backup /etc/ecss/ecss-mysql
      Проверьте и при необходимости актуализируйте параметры в "/etc/ecss/ecss-mysql/mysql-checker.conf":

      Переменная "MASTER_HOST_IP" - это VRRP-адрес для MySQL, определенный в конфигурации keepalived.

    4. Включить ecss-mysql-checker.timer
      на ecss1
      sudo systemctl enable --now ecss-mysql-checker.timer
    5. Загрузка резервной копии баз данных. Перед загрузкой резервной копии необходимо модифицировать еe, указав внешнюю директорию хранения таблиц баз данных. Так как таблицы баз данных ecss-mysql устанавливаются в отдельной директории (/var/lib/ecss-mysql), необходимо для всех таблиц в резервной копии указать внешнюю директорию, иначе они будут создаваться в стандартной data-директории (/var/lib/mysql). Также при загрузке резервной копии отключаем запись бинарных логов.
      на ecss1
      sed -E "s/(ENGINE=(MyISAM|InnoDB))/\1 DATA DIRECTORY = '\/var\/lib\/ecss-mysql'/g" all_dump.sql | (echo "SET sql_log_bin = 0;"; cat -) | sudo mysql -uroot -p
      После загрузки резервной копии сделайте реконфигурирование пакета ecss-mysql, чтобы прошли необходимые миграции v3.14.16, которые отсутствуют в резервной копии.
      на ecss1
      sudo dpkg-reconfigure ecss-mysql
      После этого запустить репликацию командой и убедится, что slave подтянул все изменения от мастера (Seconds_Behind_Master - должна быть равна 0, а значение Relay_Master_Log_File должно сойтись со значением Master_Log_File).
      на ecss1
      sudo mysql -uroot -p -e "START SLAVE"
      на ecss1
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
      пример
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
                    Master_Log_File: server-mysql-bin.001152
              Relay_Master_Log_File: server-mysql-bin.001152
              Seconds_Behind_Master: 0
      

      Удалить параметр skip-slave-start из конфигурации mysql и резервного файла:
      на ecss1
      sudo sed -i '/skip-slave-start/d' /etc/mysql/mysql.conf.d/mysqld.cnf 
      на ecss1
      sudo sed -i '/skip-slave-start/d' /var/lib/ecss/ecss-mysql/backup/mysqld.cnf
      Перезапускать mysql не обязательно - данная опция влияет только на состояние SLAVE при старте mysql, а его запустили напрямую.


    6. Восстановить репликацию master-master, запустив репликацию на ecss2 и убедится, что slave подтянул все изменения от мастера (Seconds_Behind_Master - должна быть равна 0, а значение Relay_Master_Log_File должно сойтись со значением Master_Log_File):
      на ecss2
      sudo mysql -uroot -p -e "START SLAVE;"
      на ecss2
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep "Seconds_Behind_Master"

      пример
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
                    Master_Log_File: server-mysql-bin.001152
              Relay_Master_Log_File: server-mysql-bin.001152
              Seconds_Behind_Master: 0
    7. Обновление Erlang и SSW.

      Перед обновлением включить сервисы ssw: 

      на ecss1
      sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
      на ecss1
      sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

      Для обновления удалить устаревшую версию Erlang. Команда ниже обновит Erlang до версии 24.3, а также обновит до новейшей версии пакеты ecss-node и ecss-utils:

      на ecss1
      sudo apt remove erlang-base-hipe

      Если erlang не обновился удалением старого пакета, то сначала обновить ecss-node и ecss-utils и далее обновить весь erlang командами:

      на ecss1
      sudo apt install ecss-node ecss-utils
      на ecss1
      sudo apt install erlang


       После обновления Erlang демаскировать сервис, который был маскирован при удалении erlang-base-hipe:

      на ecss1
      sudo systemctl unmask epmd.socket epmd.service


    8. Запуск SSW на первом хосте.
      Перед запуском изменить имя кластера на то же, которое было установлено на ecss2 на предыдущем шаге.
      на ecss1
      sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
      на ecss1
      {mycelium_broker, [
          {cluster_name, 'test_cluster_upd'},
      Так же меняем значение таймера для ds сервиса:
      на ecss1
      sed -i 's/{cluster_timeout, 60000}/{cluster_timeout, 10800000}/g' /etc/ecss/ecss-ds/ds1.config
    9. Сервис ecss-sorm на ecss1 сразу замаскировать, т.к. у нас заявлена работа ecss-sorm на одном хосте в кластере. 
      на ecss1
      sudo systemctl mask ecss-sorm
    10. Выполнить на ecss2 объединение в кластер:
      на ecss2
      sudo ecss-control attach
        
    11. Активация сервиса Keepalived.
      на ecss1
      sudo systemctl enable --now keepalived
    12. На ecss1 запустите сервис mycelium и в CoCon проверьте, что сервис поднялся и видно ноды mycelium хостов ecss1/ ecss2:
      на ecss1
      sudo systemctl start ecss-mycelium
      выполняется в CoCon
      /system-status
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬────────────┬───────┐
      │ │     Node      │          Release           │         Erlang nodes          │Mnesia nodes│Uptime │
      ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼────────────┼───────┤
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss2                    │not running │3h 5m  │
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss2                      │ds1@ecss2   │3h 5m  │
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss2                      │md1@ecss2   │3h 5m  │
      │ │mycelium1@ecss1│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running │10m 42s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running │3h 5m  │
      │ │sip1@ecss2     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss2                     │sip1@ecss2  │3h 5m  │
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │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.15.243   │ connected │ 00:21:09  │
      │             │ msr.ecss2 │ 3.14.16.1.0   │ connected │ 00:00:59  │
      └─────────────┴───────────┴───────────────┴───────────┴───────────┘
    13. Перед запуском ecss-ds на ecss1 необходимо сделать backup директории /var/lib/ecss/oasys и удалить ее, для того чтобы с другого хоста загрузить актуальную БД. Сделать это можно переименовав существующую директорию:

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


      на ecss1
      sudo mv /var/lib/ecss/oasys /var/lib/ecss/oasys-$(date +%Y%m%d-%H_%M)
    14. На ecss1 запустите сервис ds и в CoCon проверить, что сервис ds доступен на обоих хостах ecss1/ ecss2:
      на ecss1
      sudo systemctl start ecss-ds
      выполняется в CoCon
      /system-status
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬───────────────────┬───────┐
      │ │     Node      │          Release           │         Erlang nodes          │   Mnesia nodes    │Uptime │
      ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼───────────────────┼───────┤
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss2                    │not running        │3h 13m │
      │ │ds1@ecss1      │ecss-ds-3.14.16.1.130       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2│12s    │
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2│3h 13m │
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss2                      │md1@ecss2          │3h 13m │
      │ │mycelium1@ecss1│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running        │18m 33s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running        │3h 13m │
      │ │sip1@ecss2     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss2                     │sip1@ecss2         │3h 13m │
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │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.15.243   │ connected │ 00:29:01  │
      │             │ msr.ecss2 │ 3.14.16.1.0   │ connected │ 00:08:50  │
      └─────────────┴───────────┴───────────────┴───────────┴───────────┘
    15. Далее такими же действиями запустить сервисы: ecss-mediator, ecss-pa-sip, ecss-core следующими командами:
      на ecss1
      sudo systemctl start ecss-mediator

      на ecss1
      sudo systemctl start ecss-pa-sip

      на ecss1
      sudo systemctl start ecss-core
      Проверить статус в CoCom:
      Результат:
      /system-status 
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬─────────────────────┬──────┐
      │ │     Node      │          Release           │         Erlang nodes          │    Mnesia nodes     │Uptime│
      ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼─────────────────────┼──────┤
      │ │core1@ecss1    │ecss-core-3.14.16.1.130     │core1@ecss1,core1@ecss2        │not running          │3m 50s│
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss1,core1@ecss2        │not running          │3h 22m│
      │ │ds1@ecss1      │ecss-ds-3.14.16.1.130       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │9m 42s│
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │3h 22m│
      │ │md1@ecss1      │ecss-mediator-3.14.16.1.130 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │5m 22s│
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │3h 22m│
      │ │mycelium1@ecss1│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running          │28m 4s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running          │3h 23m│
      │ │sip1@ecss1     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│4m 40s│
      │ │sip1@ecss2     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│3h 22m│
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │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.15.243   │ connected │ 00:02:37  │
      │ core1@ecss2 │ msr.ecss1 │ 3.14.15.243   │ connected │ 00:38:31  │
      │             │ msr.ecss2 │ 3.14.16.1.0   │ connected │ 00:18:20  │
      └─────────────┴───────────┴───────────────┴───────────┴───────────┘
    16. Обновление пакета ecss-restfs:
      на ecss1
      sudo apt install ecss-restfs
    17. Обновление пакета ecss-media-server:
      на ecss1
      sudo apt install ecss-media-server
      Актуализировать конфигурацию:
      на ecss1
      sudo dpkg-reconfigure ecss-media-server
      Проверить и при необходимости исправить вручную файл → /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" 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>
      После чего перезапустить сервис:
      на ecss2
      sudo systemctl restart ecss-media-server.service
    18. Обновление пакета ecss-media-resources:
      на ecss1
      sudo apt install ecss-media-resources
    19. Обновление пакета ecss-web-conf:
      на ecss1
      sudo apt install ecss-web-conf
    20. Обновление пакета ecss-teleconference-ui

      на ecss1
      sudo apt install ecss-teleconference-ui

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

      на ecss1
      sudo apt install ecss-crm-server

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

      на ecss1
      sudo apt install ecss-cc-ui


    21. После обновления сервисов удалить файл фиксации версии ssw:
      на ecss1
      sudo rm /etc/apt/preferences.d/eltex-ecss10

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

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



  • Нет меток