• 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.

  1. Установите gluster-сервер и пакет attr на оба хоста:

    sudo aptitude install glusterfs-server attr
  2. Для добавления сервера в пул файловых хранилищ выполните команду на 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)
  3. Для создания кластера на 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
  4. Запустите созданный кластер, для этого на ecss1 выполните команду:

    sudo gluster volume start ecss_volume
  5. Для проверки статуса кластера на 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
  6. Чтобы смонтировать 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".

Настройка

Для настройки данного сервиса необходимо выставить нужные опции в файлах:

Настройка Пути

/etc/ecss/ecss-restfs/crawler-dirs

WORKDIR - рабочий(е) каталог(и), в котором(ых) происходит поиск файлов с расширением "wav" (если указывается несколько папок, то необходимо названия указать в кавычках, например, "dir1 dir2 dir3");
EXCLUDED_PATH-каталоги, которые необходимо исключить из обработки, например, "dir1 dir2 dir3", путь указывается, относительно WORKDIR.

Настройка конвертации

/etc/ecss/ecss-restfs/crawler-conf

Файл содержит параметры, передаваемые конвертору:

crawler FFMPEG_OPT -i in_file FFMPEG_OUT_OPT out_file

По умолчанию стоят флаги:

-y - перезапись без запроса, 
"-v 0" - уровень логирование выключен.

Флаг -i <file> - указывает на входной файл.

Последним аргументом передаётся выходной файл:

FFMPEG_OPT - позволяет задавать глобальные опции;
FFMPEG_OUT_OPT - позволяет задать опции для выходного файла.

Таймер

/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