Настройка RestFS
- RestFS — компонент обеспечивающий HTTP API для работы с файлами.
- GlusterFS — распределенная файловая система, обеспечивающая надежное хранилище (необязательный компонент для систем без резервирования).
На уровне системы существует реестр кластеров RestFS, с которыми может работать система.
По умолчанию в реестре кластеров RestFS есть кластер default, который мапится в URL: http://system.restfs.ecss:9990
Имя кластера RestFS может быть любым, кроме system
, а так же не может начинаться на http://
, https://
, ftp://
, file://
.
Кластер RestFS с именем default не может быть удален.
На уровне системы команды по управлению/мониторингу RestFS располагаются по пути /restfs.
На уровне виртуальной АТС — /domain/<DOMAIN>/restfs/.
Настройки RestFS для одной ноды
Для запуска RestFS в режиме одной ноды достаточно поставить пакет ecss-restfs и запустить сервис restfs.
sudo systemctl start ecss-restfs.service
По умолчанию сервис ожидает HTTP-запросы на порту 9990 и работает с каталогом /var/lib/ecss/restfs.
Настройки RestFS для кластера на базе glusterfs-сервера
Для того чтобы обеспечить репликацию данных между серверами кластера, необходимо настроить glusterfs-server.
В качестве примера приведена система ECSS-10, работающая в кластере, со следующими настройками:
IP-адрес ecss1 — 192.168.118.222;
IP-адрес ecss2 — 192.168.118.224.
Установите gluster-сервер и пакет attr на оба хоста:
sudo aptitude install glusterfs-server attr
Для добавления сервера в пул файловых хранилищ выполните команду на ecss1:
sudo gluster peer probe 192.168.118.224
После этого на ecss2 при выполнении команды
sudo gluster peer status
должна появиться информация о ecss1:Number of Peers: 1 Hostname: 192.168.118.222 Uuid: 569c4730-a3a7-4d29-a132-b1bcdad792d8 State: Peer in Cluster (Connected)
Для создания кластера на ecss1 выполните команду:
sudo gluster volume create ecss_volume replica 2 transport tcp 192.168.118.222:/var/lib/ecss/glusterfs 192.168.118.224:/var/lib/ecss/glusterfs force
Запустите созданный кластер, для этого на ecss1 выполните команду:
sudo gluster volume start ecss_volume
Для проверки статуса кластера на ecss1 выполните команду:
sudo gluster volume info
Необходимо обратить внимание на поля "Status" и "Bricks" — они должны иметь следующий вид:
Volume Name: ecss_volume Type: Replicate Volume ID: 60774e49-d2f1-4b06-bb4a-3f39ccf1ea73 Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: 192.168.118.222:/restfs Brick2: 192.168.118.224:/restfs
Чтобы смонтировать glusterfs раздел, выполните на обоих хостах ecss1 и ecss2 следующие действия:
Создайте новый systemd unit.
/etc/systemd/system/ecss-glusterfs-mount.service
и добавьте туда следующие параметры:
[Unit] Description=mount glusterfs After=network.target Requires=network.target [Service] RemainAfterExit=no Type=forking RestartSec=10s Restart=always ExecStart=/sbin/mount.glusterfs localhost:/ecss_volume /var/lib/ecss/restfs -o fetch-attempts=10 ExecStop=/bin/umount /var/lib/ecss/restfs [Install] WantedBy=multi-user.target
Добавить unit в автозагрузку.
Unit можно добавить в автозагрузку следующей командой:
sudo systemctl enable ecss-glusterfs-mount.service
Перезагрузить хост:
sudo reboot
Если хост не может быть перезагружен, то можно выполнить следующие команды:
sudo systemctl daemon-reload sudo systemctl restart ecss-glusterfs-mount.service
После монтирования на обоих хостах выполните команду:
df -h
При просмотре информации должен появиться подмонтированный раздел:
/dev/sda10 19G 6,5G 11G 38% /var/lib/mysql /dev/sda8 4,5G 213M 4,1G 5% /var/log /dev/sda5 37G 48M 35G 1% /var/lib/ecss/ecss-media-server/records /dev/sda6 19G 44M 18G 1% /var/lib/ecss/cdr /dev/sda7 19G 44M 18G 1% /var/lib/ecss/statistics /dev/sda9 19G 7,6G 9,7G 44% /var/log/ecss localhost:/ecss_volume 46G 59M 44G 1% /var/lib/ecss/restfs*
Запуск RestFS в режиме кластера
Для запуска RestFS в режиме кластера достаточно, чтобы пакет ecss-restfs был установлен и запущен на обеих нодах. Команда для запуска сервиса ecss-restfs.
sudo systemctl start ecss-restfs.service
Запуск RestFS в случае недоступности других участников кластера
В применяемой концепции glusterfs все сервера равнозначны. Однако раздел volume не активируется при отсутствии кворума. Это защитный механизм, который характерен для всех распределенных fault-tollerant систем и призван защитить систему от split-brain.
Такая ситуация может возникнуть когда загружается только один из серверов, а второй при этом выключен или недоступен. На первом сервере volume не будет автоматически активирован до появления второго сервера для исключения расхождения данных.
Если включение второго сервера невозможно, либо затягивается на длительное время, то можно вручную перевести volume в рабочий режим, выполнив команду:
sudo gluster volume ecss_volume start force
Проблемы связанные с возникновением split-brain
В случае недоступности одной из нод кластера, могут возникнуть проблемы с файлами. После восстановления работы, они будут находиться в сплите, из-за чего саморучно придется запускать синхронизацию между нодами.
Для того, чтобы решить данную проблему, потребуется воспользоваться ключом cluster.favorite-child-policy.
При его включение, все файлы находящиеся в сплите будут автоматически с синхронизированы между собой, по заданному правилу.
Включить данный параметр можно командой:
sudo gluster volume set ecss_volume cluster.favorite-child-policy size
Правка настроек glusterfs-server.service unit
Для настройки управления glusterfs service через systemctl выполните команду:
sudo systemctl edit glusterfs-server.service
Должно открыться окно текстового редактора. Внесите туда следующие параметры:
[Service] KillMode=control-group RemainAfterExit=no
Сохраните изменения и выполните команду:
sudo systemctl daemon-reload
Сервис фоновой конвертации записанных разговоров в MP3
Описание
Сервис запускается в определенное время и конвертирует файлы с расширением "wav" в "mp3".
Настройка
Управление сервисом осуществляется командой dpkg reconfigure ecss-restfs, где в ходе настройка пакета задаётся соответствующий вопрос, требуется ли включить конвертацию записей.
Настройку через конфигурационные файлы следует использовать только в том случае, если вы точно знаете, что делаете. Для настройки сервиса необходимо выставить нужные опции в файле /etc/ecss/ecss-restfs/crawler.json:
Настройка Пути
"dirs": { "workdir": "/var/lib/ecss/restfs", "excluded": [ "system", "domain/*/asr", "domain/*/sounds" ] },
- dirs.workdir — папка, относительно которой производится поиск аудиофайлов (рабочая папка restfs);
- dirs.excluded — папки, которые исключаются из поиска;
Настройка конвертации
Файл содержит параметры, передаваемые конвертору:
"files": { "wav": { "enabled": "true", "opt": "-v 0 -y", "convert": "-vn -ab 192 -ac 1", "ext": "mp3" }, "pcm": { "opt": "-f s16le -ar 8k -ac 1 -v 0 -y", "convert": "", "ext": "wav" }
- files.wav — описание правил конвертации wav-файлов;
- files.wav.enabled — флаг, показывающий включена ли конвертация wav в mp3;
- files.wav.opt — опции для ffmpeg, с которыми запустится конвертация для wav-файлов;
- files.wav.convert — команда для ffmpeg для конвертации wav-файла;
- files.wav.ext — расширение, с которым сохранится конвертированный файл;
- files.pcm — описание правил конвертации pcm-файлов;
- files.pcm.opt — опции для ffmpeg, с которыми запустится конвертация для pcm-файлов;
- files.pcm.convert — команда для ffmpeg для конвертации pcm-файла
- files.pcm.ext — расширение с которым сохранится конвертированный файл;
opt — опции для входного файла; convert — опции для выходного файла (конвертированного).
"transcribe": { "enabled": "false", "statistics": "false", "ext": "vtt" }
- transcribe — описание для трансрибирования (распознавания сохраненных записей разговоров);
- transcribe.enabled — флаг, показывающий включено ли трансрибирование;
- transcribe.statistics — флаг, показывающий включен ли подсчет количества распознанных файлов за один запуск трансрибирования;
- transcribe.ext — расширение с которым сохраняется распознанный результат (по умолчании vtt — файл субтитров).
Таймер
/lib/systemd/system/ecss-restfs-crawler.timer
Для настройки таймера смотри man systemd.timer.
Поле OnCalendar — содержит время запуска.
Права
/lib/systemd/system/ecss-restfs-crawler.service
Данный файл содержит следующие параметры:
- Пользователь, от чьего имени выполняется сервис (User, Group);
- Права на новые файлы (Umask);
- Время жизни сервиса (RuntimeMaxSec);
- Ограничение на ресурсы (CPUQuaota, Nice).
Также можно расширять данные конфигурации, см. команду man systemd.
Конфигурацию проводить с помощью systemctl edit <name>.
Дополнительные возможности конвертера ffmpeg можно узнать выполнив команду: man ffmapeg.
Настройка сервиса tts для работы с Yandex-Speechkit (Text-to-Speech)
Настройка в Yandex Облако
Для корректной работы tts Text-to-Speech через Yandex сервис требуются сделать следующие шаги:
- Создать новый или авторизовать в существующий аккаунте Яндекс.Облако.
- Выполнить действия согласно документации Yandex-Speechkit, для получения
OAuth-токена
. - Получить значения
FOLDER_ID
из url директории на Яндекс.Облако
Если пакет ecss-restrs уже установлен, то указать параметры
FOLDER_ID
иOAuth-токена
приdpkg-reconfigure
пакета.sudo dpkg-reconfigure ecss-restfs
Если пакет ecss-restrs не установлен, то указать параметры
FOLDER_ID
иOAuth-токена
при установке пакета.sudo aptitude install ecss-restfs
Проверить состояние ключей через http терминал:
tester@ecss1:~$ curl localhost:9990/tts_info { "folderId":"UKqJakGZnKKkoc7agA", "service":"yandex", "keys": { "AQAAA5duo0v_-XFP_jAATuwa7G8DtRMEeLvUDSkXngKvEb1SNZ1S4ARy5r7":"CggaATEVAgAAABKABCqjm- lI92RDbvfhFHK9CFzE8B3RnFR4LslDZ4Fw_p98oX0kOtbxMQcsCrq166Yc9sO2lfyCn7ffvcHE9ZSiTvx6h5Imhix3FMzI_abqirtai33ASNZ1S4ARy5Ydou3fnwOMzBtf8- MquvWGAgAnwGqQuVGZ4ZA1GQxBGjZMjugNjDfwSlpEb-vqyw9NMqpgayxXV7D7GAgAnwGqQuVGriDmt5duo0v_-XFP_jH_g9qU-DsEco0rZS0HQFupzshjJqSE8Gm5- FwFJCqak5dwNHsNSKOYspkRj87GAgAnwGqQuVGCOkD7vHOlod3bJu5WzwQprAKOORb73PDMNg22dXhYLwa2kg_OdRz0euq9sIr_1zQkTsIr_1zQkTIXuk8_FyfDWJA3WNAb2lRGj- AODAl0vf9iR7i5Pgm0-mu80v_xBbYsSexk6luvUSGXTLL1PX6PSROwUXClb1bFTyn7ojNZNyLnKTQTDyngTf5ySutpOPf }, "OAuth":"GAgAnwGqQuVGZ4ZA1GQxBGjZMjugNjDfwSlpEb" }
XML- folderId — идентификатор директории на Яндекс.Облако
- service — сервис используемый для генерации голоса
- keys — IAM-токен который RestFS автоматически запрашивает каждые 12 часов
- OAuth — OAuth токен указанный при установки сервиса
- localhost — ip-адрес RestFS
Добавление дополнительного профиля Яндекс.Облако
Для добавления дополнительного профиля Яндекс.Облако нужно отправить http-запрос:
curl localhost:9990/generate?OAuth=<OAuth_токен>&folderId=<folderId>
Для немедленного обновления IAM-токена нужно отправить следующий http-запрос:
curl localhost:9990/generate?OAuth=<OAuth_токен>&folderId=<folderId>&update_key=True
Настройка распределенного хранилища
В системе ECSS-10 реализованы сервисы, которые в процессе своей работы формируют данные и сохраняют их на дисковое пространство. Такими сервисами являются:
- услуга "Запись разговоров" (Call recording),
- услуга передачи факса (Fax),
- услуга "Голосовая почта" (Voicemail).
Данные сервисы генерируют файлы и работают с дисковыми хранилищами.
Под распределенным хранилищем подразумевается возможность сохранять записанные файлы на разные хосты.
Рисунок 1 — Пример распределенного хранилища
Каждое хранилище состоит из следующих элементов:
RestFS — компонент обеспечивающий интерфейс прикладного программирования HTTP API для работы с файлами.
GlusterFS — распределенная файловая система, обеспечивающая надежное хранилище (необязательный компонент для систем без резервирования).
Количество распределенных хранилищ не ограничено, возможно совмещение всех хранилищ на одном хосте. В базу данных сохраняется полный URI для записанного файла, поэтому, например, при прослушивании записи разговора из web-интерфейса, система обратится на сервер, идентифицируемый данным URI в базе данных.
Распределенная файловая система glusterfs автоматически реплицирует файлы между нодами кластера. Таким образом, в кластерном варианте работы сервиса при проблемах с одним из серверов сервис автоматически будет делать попытку записи файла на другой сервер, либо его считывания с другого сервера.
Дисковое хранилище может работать в двух режимах:
- Простой режим (Single mode)
В данном режиме все типы данных (записи разговоров, факсы, файлы голосовой почты) отправляются в одно файловое хранилище. Для настройки данного режима достаточно настроить сервис RestFS.
- Распределенный режим (Distributed mode)
В данном режиме все типы данных (записи разговоров, факсы, файлы голосовой почты) отправляются в разные файловые хранилища.
Распределенный режим предполагает, что пакет ecss-restfs, обеспечивающий программный интерфейс HTTP API, будет установлен на несколько хостов. Перед установкой пакета необходимо убедиться, что имя хоста "hostname", на который ставится пакет, не равно ecss1 или ecss2. В противном случае может возникнуть конфликт с нодами restfs, которые запущены на хостах системы ECSS-10 локально.
Порядок настройки дискового хранилища в распределенном режиме
Установите пакет restfs, для этого выполните следующую команду:
sudo aptitude install ecss-restfs
- После установки пакета сконфигурируйте параметры listen_port и listen_ip таким образом, чтобы подсистема restfs находилась в одной сети с системой ECSS-10. Для этого выполните настройку ноды согласно Настройка RestFS.
Произведите изменения в конфигурационных файлах.
Необходимо настроить параметр MYSQL_IP в файле ecss-cocon-mysql
/etc/dnsmasq.d/ecss-cocon-mysql: address=/cocon.mysql.ecss/<MYSQL_IP>
и параметры ECSS_1_IP и ECSS_2_IP в файле ecss-broker
/etc/dnsmasq.d/ecss-broker: address=/primary.broker.ecss/<ECSS_1_IP> address=/secondary.broker.ecss/<ECSS_2_IP>
где
- MYSQL_IP — виртуальный адрес для доступа к mysql;
- ECSS_1_IP — ip-адрес ноды ecss1, на котором слушает сервис mycelium;
- ECSS_2_IP — ip-адрес ноды ecss2, на котором слушает сервис mycelium;
Перезапустите сервисы dnsmasq и ecss-restfs.
Для этого выполните следующую команду:
sudo systemctl restart ecss-ds.service ecss-restfs.service
- После настройки и подключения нужного количества нод restfs, укажите системе ecss-10, в какую ноду будет сохраняться тот или иной тип данных. Для этого необходимо выполнить требования раздела Конфигурирование URL для доступа к распределенному хранилищу.
Конфигурирование URL для доступа к распределенному хранилищу
Сконфигурируйте соотношение выделенных имен для хранилища на DNS сервере (при использовании DNS сервера), либо в локальных файлах /etc/hosts, находящихся на хостах медиа-сервера и web-конфигуратора (в случае, если DNS сервер не используется).
Пример для варианта с /etc/hosts:
IP-REC1-STORAGE rec.media-storage.ecss IP-REC2-STORAGE rec.media-storage.ecss IP-FAX1-STORAGE fax.media-storage.ecss IP-FAX2-STORAGE fax.media-storage.ecss IP-VOICEMAIL1-STORAGE voicemail.media-storage.ecss IP-VOICEMAIL2-STORAGE voicemail.media-storage.ecss
где
- IP-REC1-STORAGE — IP-адрес 1го хоста для хранения записей разговоров;
- IP-REC2-STORAGE — IP-адрес 2го хоста для хранения записей разговоров;
- IP-FAX1-STORAGE — IP-адрес 1го хоста для хранения файлов принятых факсов;
- IP-FAX2-STORAGE — IP-адрес 2го хоста для хранения файлов принятых факсов;
- IP-VOICEMAIL1-STORAGE — IP-адрес 1го хоста для хранения записей voicemail;
- IP-VOICEMAIL2-STORAGE — IP-адрес 2го хоста для хранения записей voicemail.
Скорректируйте значение указателей ресурса URI для обращения к хранилищу.
По умолчанию для данных параметров установлено значение system. В этом случае сетевой адрес хранилища для всех трех сервисов одинаков, его значение устанавливается командами /system/system-restfs-host и /system/system-restfs-port.
Для установки значения указателя ресурса URI для каждого из сервисов используется своя команда:
/domain/DOMAIN_NAME/properties/set call_record_server_peer <URI>
/domain/DOMAIN_NAME/properties/set fax_server_peer <URI>
/domain/DOMAIN_NAME/properties/set voicemail_server_peer <URI>
где
- URI — указатель ресурса хоста, который используется в качестве сетевого хранилища.
Примеры команд для настройки сетевого хранилища на выделенном сервере с URI media-storage.ecss:
/domain/DOMAIN_NAME/properties/set call_record_server_peer rec.media-storage.ecss:9990 /domain/DOMAIN_NAME/properties/set fax_server_peer fax.media-storage.ecss:9990 /domain/DOMAIN_NAME/properties/set voicemail_server_peer voicemail.media-storage.ecss:9990
После выполнения настройки ресурса хоста все данные, формируемые сервисами, будут записываться на сервера, идентифицируемые теми URI, которые были указаны в командах настройки.
Переполнение разделов хранилища
Для предотвращения ситуаций переполнения разделов хранилища нужно настроить пороги генерации предупреждений и аварийных сообщений о переполнении раздела (см. Пороги использования ресурсов). При достижении настроенного порога система автоматически сообщит об этом.
Для предотвращения переполнения разделов хранилища на уровне каждого кластера RestFS есть подсистема, которая позволяет автоматически удалять файлы по определенным правилам Команды уровня autocleaner.