Регламент обновления/деинсталляции ECSS
Обновление с версии 3.14.14 на 3.14.15
Рекомендуется производить обновление с новой установки операционный системы (Ubuntu Server 18.04.x LTS 64bit) и новой разметки дискового пространства.
В данном разделе описан процесс обновления операционной системы и программных компонентов ECSS-10, когда по каким-либо причинам новая установка невозможна.
Подготовка к обновлению системы
Выполнить полный «бэкап» (см. «Регламентное обслуживание и резервное копирование»).
Если нужны последние данные биллинга, то необходимо финализировать текущую cdr и скачать в надежное место, например:
/domain/bsk.test/cdr/make_finalize_cdr bsk3 Created file(s): cdrbsk3_20210330_11_05_38_t.csv
Посмотреть, сколько зарегистрированных абонентов, пример:
/domain/bsk.test/sip/user/registered * .... ┌───────────────┐ │ elements: 320 │ └───────────────┘
При обновлении кластера следует обновлять сервера по очереди. Таким образом, при обновлении один из серверов будет всегда запущен и работа сервисов не будет прервана. Для разделения кластера следует использовать инструмент ecss-control на обоих серверах (Описание команд утилиты приведено в «Приложении Н»).
Переведите трафик на второй сервер, выключив keepalive на первом хосте:
на ecss1
sudo systemctl stop keepalived.service
Командой ifconfig проверьте, что все IP-адреса находятся на ecss2.
Выполните разделение SSW на два независимых сервера следующей командой:
на ecss1
sudo ecss-control detach
sudo ecss-control detach detach host: ecss2, ip: 10.10.0.2 complete sudo ecss-control status locked ip: 10.10.0.2
После разделения кластера необходимо выключить все ноды на сервере, который будет обновляться первым:
на ecss1
sudo systemctl stop ecss-mediator.service
sudo systemctl stop ecss-pa-sip.service
sudo systemctl stop ecss-core.service
sudo systemctl stop ecss-ds.service
sudo systemctl stop ecss-mycelium.service
Выполнить обновление:
на ecss1
sudo apt update
Установка ECSS-10 версии 3.14.15
Подробнее в разделе «Инсталляция пакетов ECSS».
Установка ecss-mysql
Обновите ecss-mysql на первом хосте:
sudo apt install ecss-mysql
Если возникла проблема с какой-либо базой данных, следует произвести перезагрузку сервиса aparmor, затем удалить базу данных из mysql, а после снова установить ecss-mysql:
sudo systemctl restart apparmor.service mysql -uroot -p<root_mysql_password> -e 'DROP DATABASE <проблемная база данных>' sudo apt install ecss-mysql
- Произведите мониторинг состояния реплики с помощью SHOW SLAVE STATUS; и дождитесь, пока показатель Seconds_Behind_Master станет равным "0";
Установка ecss-node
Установить пакет ecss-node:
sudo apt install ecss-node
В процессе установки будут задаваться вопросы о сохранении текущих версий конфигурационных файлов. Рекомендуется ставить новые, т. е. отвечать «Y».
на ecss1
во время установки пакета ecss-node , система сбросит конфигурацию кластера на дефолтное значение. Поэтому потребуется отредактировать файл /etc/ecss/ecss-mycelium/mycelium1.config.
выполните команду :
sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
пропишите имя кластера, в примере "test_cluster"
%%% -*- mode:erlang -*- %%% Warning - this config file *must* end with <dot><whitespace> [ {mycelium_broker, [ {cluster_name, test_cluster}, %{cluster_nodes, []}, % additional nodes %{tcp_port, 5672}, %{auto_discoverer, true}, {compress_module, elx_data_nif}, %% elx_data_nif | elx_data {session_gc_timeout, 3000}, {queue_gc_timeout, infinity} %{info_realm, {local, "/ssw", "ssw", "ssw", 1, [{localhost, 0, {host, "localhost"}, 5672, 10}]}}, %{bind_ip_addresses, [{127,0,0,1}]} % do not forget to include lo interface ]},
Установка остальных пакетов
Установить пакеты, содержащие основные подсистемы:
sudo apt upgrade
При установке ecss-media-server рекомендуется ответить на вопрос о конфигурировании утвердительно.
В процессе установки будут задаваться вопросы о сохранении текущих версий конфигурационных файлов. Рекомендуется ставить новые, т. е. отвечать «Y».
Запустите сервисы следующими командами:
на ecss1
sudo systemctl start ecss-mycelium.service
sudo systemctl start ecss-ds.service
sudo systemctl start ecss-core.service
sudo systemctl start ecss-pa-sip.service
sudo systemctl start ecss-mediator.service
проверить статус сервисов командой:
systemctl is-active ecss-core ecss-pa-sip ecss-ds ecss-mediator ecss-mycelium
Проверить состояние сервисов в CoCon:
выполняется в CoCon
/system-status
Checking...
┌─┬───────────────┬──────────────────────────┬───────────────┬────────────┬──────┐
│ │ Node │ Release │ Erlang nodes │Mnesia nodes│Uptime│
├─┼───────────────┼──────────────────────────┼───────────────┼────────────┼──────┤
│ │core1@ecss1 │ecss-core-3.14.15.1163 │core1@ecss1 │not running │3m 45s│
│ │ds1@ecss1 │ecss-ds-3.14.15.1163 │ds1@ecss1 │ds1@ecss1 │3m 51s│
│ │md1@ecss1 │ecss-mediator-3.14.15.1163│md1@ecss1 │md1@ecss1 │3m 32s│
│ │mycelium1@ecss1│ecss-mycelium-3.14.15.1163│mycelium1@ecss1│not running │3m 58s│
│ │sip1@ecss1 │ecss-pa-sip-3.14.15.1163 │sip1@ecss1 │sip1@ecss1 │3m 39s│
└─┴───────────────┴──────────────────────────┴───────────────┴────────────┴──────┘
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.221 │ connected │ 00:02:28 │
│ │ msr.ecss2 │ 3.14.14.24 │ connected │ 00:02:28 │
└─────────────┴───────────┴─────────────┴───────────┴───────────┘
В версии 3.14.15 появилась возможность использовать любые имена хостов, поэтому нужно указать какие имена мы будем использовать, для этого выполните следующую команду (в примере имена хостов ecss1/ecss2):
выполняется в CoCon
/system/clusters/set [ecss1, ecss2]
/system/clusters/set [ecss1, ecss2] Success: System initialized on hosts: ["ecss2","ecss1"] /system/clusters/list ┌────────┬──────────────┬──────────────┐ │ Role │ Cluster │ Nodes │ ├────────┼──────────────┼──────────────┤ │storage │ds1 │ds1@ecss2 │ │ │ │ds1@ecss1 │ │core │core1 │core1@ecss2 │ │ │ │core1@ecss1 │ │adapter │sip1 │sip1@ecss2 │ │ │ │sip1@ecss1 │ │adapter │megaco1 │megaco1@ecss2 │ │ │ │megaco1@ecss1 │ │adapter │sigtran1 │sigtran1@ecss2│ │ │ │sigtran1@ecss1│ │adapter │sorm1 │sorm1@ecss2 │ │ │ │sorm1@ecss1 │ │mediator│md1 │md1@ecss2 │ │ │ │md1@ecss1 │ │virtual │.system_bridge│ │ │virtual │.virtual │ │ └────────┴──────────────┴──────────────┘
В случае использования для сигнальной сети нескольких vlan-ов , необходимо скорректировать конфигурационный файл /etc/ecss/ecss-media-server/config.xml описав параметр "via":
via — задается список интерфейсов, которые могут быть отправлены в сообщении "SIP REGISTER" поле "Via":
- dynamic-ifaces — значение = "yes" или "no";
если dynamic-ifaces="no":
- при мастер-регистрации всё как раньше
- в ином случае регистрация проходит ТОЛЬКО если интерфейс перечислен в списке via в конфиге
если dynamic-ifaces="yes" или атрибут не указан, то остаётся поведение, реализованное ранее. - iface name — имя интерфейса;
ip — ip адрес интерфейса.
- если указанный в конфиге в разделе via ip-адрес не существует, он не обрабатывается (пропускается)
- если указан верный ip, то он прикрепляется для регистрации в заголовок Via
- при отсутствии интерфейса в конфиге в via при мастер-регистрации указывается bind-address из конфига, при при не-мастер регистрации поведение прежнее.
пример для одиночного хоста
<?xml version="1.0" encoding="utf-8"?>
<config date="14:39:00 10.03.2023">
<general log-level="3" log-rotate="yes" max-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="192.168.1.40" 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"/>
<codec pcma="1" pcmu="2" ilbc="0" gsm="0" g722="3" 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:192.168.1.40:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
<via dynamic-ifaces="no">
<iface name="bond1.75" ip="192.168.1.27"/>
<iface name="bond1.20" ip="192.168.1.28"/>
<iface name="bond1.35" ip="192.168.1.29"/>
<iface name="bond1.36" ip="192.168.1.30"/>
</via>
</dynamic>
</accounts>
<pbyte>
<mcc bind-addr="192.168.1.40" port="5700"/>
</pbyte>
<conf_dir path="/etc/ecss/ecss-media-server/conf.d"/>
<rtp>
<auto addr-v4=""/>
</rtp>
</config>
пример для кластерной конфигурации
<?xml version="1.0" encoding="utf-8"?>
<config date="14:39:00 10.03.2023">
<general log-level="3" log-rotate="yes" max-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="192.168.1.40" 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"/>
<codec pcma="1" pcmu="2" ilbc="0" gsm="0" g722="3" 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:192.168.1.40:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
<via dynamic-ifaces="no">
<iface name="bond1.75" ip="192.168.1.27"/>
<iface name="bond1.20" ip="192.168.1.28"/>
<iface name="bond1.35" ip="192.168.1.29"/>
<iface name="bond1.36" ip="192.168.1.30"/>
</via>
</dynamic>
<dynamic msr_name="msr.name" realm="sip:192.168.1.50:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
<via dynamic-ifaces="no">
<iface name="bond1.75" ip="192.168.1.27"/>
<iface name="bond1.20" ip="192.168.1.28"/>
<iface name="bond1.35" ip="192.168.1.29"/>
<iface name="bond1.36" ip="192.168.1.30"/>
</via>
</dynamic>
</accounts>
<pbyte>
<mcc bind-addr="192.168.1.40" port="5700"/>
</pbyte>
<conf_dir path="/etc/ecss/ecss-media-server/conf.d"/>
<rtp>
<auto addr-v4=""/>
</rtp>
</config>
Хост ecss1 обновлен , активизируем трафик командой:
на ecss1
sudo systemctl start keepalived.service
Обновление второго сервера, если система в кластере
Чтобы перевести трафик на обновленный сервер, нужно на втором сервере остановить службу keepalived:
на ecss2
sudo systemctl stop keepalived.service
Если нужны последние данные биллинга, то необходимо финализировать текущую cdr и скачать в надежное место, например:
admin@mycelium1@ecss1:/$ domain/bsk.test/cdr/make_finalize_cdr bsk3 Created file(s): cdrbsk3_20220128_10_06_40_t.csv
Выключить все ноды на сервере, который будет обновляться вторым:
на ecss2
sudo systemctl stop ecss-mediator.service
sudo systemctl stop ecss-pa-sip.service
sudo systemctl stop ecss-core.service
sudo systemctl stop ecss-ds.service
sudo systemctl stop ecss-mycelium.service
Выполнить обновление:
на ecss2
sudo apt update
Установка ecss-mysql
Обновите ecss-mysql на втором хосте:
на ecss2
sudo apt install ecss-mysql
Если возникла проблема с какой-либо базой данных, следует произвести перезагрузку сервиса aparmor, затем удалить базу данных из mysql, а после снова установить ecss-mysql:
sudo systemctl restart apparmor.service mysql -uroot -p<root_mysql_password> -e 'DROP DATABASE <проблемная база данных>' sudo apt install ecss-mysql
- Произведите мониторинг состояния реплики с помощью SHOW SLAVE STATUS; и дождитесь, пока показатель Seconds_Behind_Master станет равным "0";
Установка ecss-node
Установить пакет ecss-node:
на ecss2
sudo apt install ecss-node
В процессе установки будут задаваться вопросы о сохранении текущих версий конфигурационных файлов. Рекомендуется ставить новые, т. е. отвечать «Y».
на ecss2
Во время установки пакета ecss-node система сбросит конфигурацию кластера на дефолтное значение. Поэтому потребуется отредактировать файл /etc/ecss/ecss-mycelium/mycelium1.config.
Выполните команду:
sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
Пропишите имя кластера, в примере "test_cluster":
%%% -*- mode:erlang -*- %%% Warning - this config file *must* end with <dot><whitespace> [ {mycelium_broker, [ {cluster_name, test_cluster}, %{cluster_nodes, []}, % additional nodes %{tcp_port, 5672}, %{auto_discoverer, true}, {compress_module, elx_data_nif}, %% elx_data_nif | elx_data {session_gc_timeout, 3000}, {queue_gc_timeout, infinity} %{info_realm, {local, "/ssw", "ssw", "ssw", 1, [{localhost, 0, {host, "localhost"}, 5672, 10}]}}, %{bind_ip_addresses, [{127,0,0,1}]} % do not forget to include lo interface ]},
Установка остальных пакетов
Установите пакеты, содержащие основные подсистемы:
на ecss2
sudo apt upgrade
При установке ecss-media-server рекомендуется ответить на вопрос о конфигурировании утвердительно.
В процессе установки будут задаваться вопросы о сохранении текущих версий конфигурационных файлов. Рекомендуется ставить новые, т. е. отвечать «Y».
Проверьте статус сервисов командой:
на ecss2
systemctl is-active ecss-core ecss-pa-sip ecss-ds ecss-mediator ecss-mycelium
Сервисы должны быть в статусе "inactive":
/systemctl is-active ecss-core ecss-pa-sip ecss-ds ecss-mediator ecss-mycelium
inactive
inactive
inactive
inactive
inactive
Сборка кластера
После действий в предыдущем разделе можно открывать серверы друг другу, чтобы свести в кластер. На первом сервере выполните команду sudo ecss-control attach. Описание команд утилиты приведено в «Приложении Н».
Пример:
на ecss1
sudo ecss-control attach
unlock ip: 10.10.0.2, rules: 7
complete
sudo ecss-control status
all nodes attached
Запустите сервисы следующими командами:
на ecss2
sudo systemctl start ecss-mycelium.service
sudo systemctl start ecss-ds.service
sudo systemctl start ecss-core.service
sudo systemctl start ecss-pa-sip.service
sudo systemctl start ecss-mediator.service
Проверка работы системы в кластере
Проверьте выполнение обновления. Команда CLI system-status должна показать, что все ноды в кластере, версии подсистем одинаковые.
/system-status Checking... ┌─┬───────────────┬──────────────────────────┬───────────────────────────────┬─────────────────────┬──────┐ │ │ Node │ Release │ Erlang nodes │ Mnesia nodes │Uptime│ ├─┼───────────────┼──────────────────────────┼───────────────────────────────┼─────────────────────┼──────┤ │ │core1@ecss1 │ecss-core-3.14.15.1163 │core1@ecss1,core1@ecss2 │not running │1h 5m │ │ │core1@ecss2 │ecss-core-3.14.15.1163 │core1@ecss1,core1@ecss2 │not running │3m 8s │ │ │ds1@ecss1 │ecss-ds-3.14.15.1163 │ds1@ecss1,ds1@ecss2 │ds1@ecss1,ds1@ecss2 │1h 5m │ │ │ds1@ecss2 │ecss-ds-3.14.15.1163 │ds1@ecss1,ds1@ecss2 │ds1@ecss1,ds1@ecss2 │59s │ │ │md1@ecss1 │ecss-mediator-3.14.15.1163│md1@ecss1,md1@ecss2 │md1@ecss1,md1@ecss2 │1h 5m │ │ │md1@ecss2 │ecss-mediator-3.14.15.1163│md1@ecss1,md1@ecss2 │md1@ecss1,md1@ecss2 │2m 53s│ │ │mycelium1@ecss1│ecss-mycelium-3.14.15.1163│mycelium1@ecss1,mycelium1@ecss2│not running │1h 5m │ │ │mycelium1@ecss2│ecss-mycelium-3.14.15.1163│mycelium1@ecss1,mycelium1@ecss2│not running │3m 17s│ │ │sip1@ecss1 │ecss-pa-sip-3.14.15.1163 │sip1@ecss1,sip1@ecss2 │sip1@ecss1,sip1@ecss2│1h 5m │ │ │sip1@ecss2 │ecss-pa-sip-3.14.15.1163 │sip1@ecss1,sip1@ecss2 │sip1@ecss1,sip1@ecss2│2m 57s│ └─┴───────────────┴──────────────────────────┴───────────────────────────────┴─────────────────────┴──────┘ 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.221 │ connected │ 01:04:13 │ │ │ msr.ecss2 │ 3.14.15.221 │ connected │ 00:15:04 │ │ core1@ecss2 │ msr.ecss1 │ 3.14.15.221 │ connected │ 00:01:59 │ │ │ msr.ecss2 │ 3.14.15.221 │ connected │ 00:01:57 │ └─────────────┴───────────┴─────────────┴───────────┴───────────┘
Хост ecss2 обновлен, запустите трафик командой:
на ecss2
sudo systemctl start keepalived.service
Убедитесь, что абоненты зарегистрированы. Проверьте количество зарегистрированных абонентов, оно должно быть приблизительно тем же, что и в начале обновления:
/domain/bsk.test/sip/user/registered * 320 make users list ... [**********************************************************************] 223mks 320 users information read ... [**********************************************************************] 22ms Executed on the sip1@ecss1 ┌──────────────────┬────────┬─────────┬─────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────┐ │ Interface │ Number │ Dynamic │ Contact │ Registration info │ ├──────────────────┼────────┼─────────┼─────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤ ... ┌───────────────┐ │ elements: 320 │ └───────────────┘
Вызовы проходят во всех направлениях, CFC проигрывает сообщения, Web-conf и прочие web-сервисы запускаются, в системный журнал не пишется ошибок. Команда shell:
journalctl -f
Деинсталляция компонентов ECSS
Удаление ecss-mysql
Для удаления пакета ecss-mysql с сохранением используйте команду:
sudo apt remove ecss-mysql
При этом базы и конфигурационные файлы не удаляются.
Для полного удаления пакета вместе с базами и конфигурационными файлами используйте ключ purge:
sudo apt purge ecss-mysql
При этом по каждой базе нужно подтверждение удаления. После этого каталог /var/lib/ecss-mysql/ будет очищен.
Если нужно полностью удалить все пакеты mysql* :
Удаление пакетов mysql-* удалит также пакеты ecss-web-conf и ecss-restfs.
При удалении ecss-restfs задается вопрос об удалении записей разговоров:
А также об удалении всех БД MySQL:
sudo apt purge mysql-*
Удаление пакета ecss-node
Для удаления пакета используйте команду:
sudo apt purge ecss-node
Удаление пакета ecss-media-server
Для удаления пакета с сохранением конфигурационных файлов используйте команду:
sudo apt remove ecss-media-server
При этом в каталоге /etc/ecss/ecss-media-server/ остаются файлы конфигурации.
Для полного удаления используйте команду:
sudo apt purge ecss-media-server
Удаление ненужных пакетов
Для удаления остальных пакетов, которые больше не требуются, используйте ключ autoremove:
sudo apt autoremove
Удаление пакетов по маске
Для удаления сразу нескольких пакетов можно пользоваться масками (см. man apt).
Пример команды для удаления всех пакетов ecss:
sudo apt purge ecss-*
Команды полной деинсталляции ECSS
Для полного удаления всех компонентов ECSS выполните 3 команды:
sudo apt purge ecss-* sudo apt purge mysql-* sudo apt autoremove
После следует перезагрузить сервер для удаления некоторых процессов из оперативной памяти.
В каталоге /var/log/ecss/security/ в служебных целях остаются логи. Их нельзя удалить штатными средствами. Если необходима очистка этого каталога, следует обратиться в техническую поддержку.
Debconf
В некоторых случаях вместо переустановки пакета требуется только изменение конфигурации. Здесь следует применять команду dpkg-reconfigure <имя_пакета>. Также при необходимости можно использовать команды пакета debconf-utils.
Описание приведено на странице «Приложение В».