Table of Contents |
---|
Развертывание тестового стенда на docker машине с нуля
Для развертывания тестового стенда на docker машине необходимо
1. Распаковать архив сборки
Code Block | ||||
---|---|---|---|---|
| ||||
tar -xzf WCSTestStand-1.XXX.tar.gz |
2. Настроить общую конфигурацию стенда в файле stand.conf/wcs-stand.conf
- docker сеть
- состав узлов тестовой CDN (либо оставить только один узел, если планируется тестирование отдельного сервера)
Warning |
---|
Настройки из коробки должны использоваться только в качестве примера |
3. Настроить конфигурацию узлов стенда в каталогах stand.conf/node_name
- указать ссылки на скачивание сборок WCS для каждого узла (на разных узлах могут тестироваться разные сборки)
- указать номер лицензии для каждого WCS
- указать IP адрес каждого узла
- настроить каждый WCS узел
- если используется узел ffmpeg для публикации потоков на WCS, указать каталог с медиа файлами для публикации
Warning |
---|
Настройки из коробки должны использоваться только в качестве примера |
4. Собрать docker-образы
Code Block | ||||
---|---|---|---|---|
| ||||
cd images
chmod +x build.sh
sudo ./build.sh
cd .. |
5. Запустить стенд
Code Block | ||||
---|---|---|---|---|
| ||||
sudo ./wcs-stand start all |
Настройка общей конфигурации стенда
Конфигурация стенда описывается в файле stand.conf/wcs-stand.conf
, как набор переменных окружения для скрипта развертывания стенда:
Code Block | ||||
---|---|---|---|---|
| ||||
CONTAINER_PREFIX=wcs-test-stand
IMAGE_PREFIX=wcs_test_stand
DOCKER_NETWORK=bridge
CDN_NODES=o-test1,o-test2,e-test1,e-test2,e-test3,e-test4,t-test1,t-test2
CDN_ENTRY_POINT=o-test1
FFMPEG_NODE=ffmpeg
WCS_PATH=/usr/local/FlashphonerWebCallServer |
Здесь
CONTAINER_PREFIX - префикс имени контейнера
IMAGE_PREFIX - префикс docker-образа
DOCKER_NETWORK - docker-сеть (используется при явном назначении IP адресов узлам)
CDN_NODES - имена узлов тестовой CDN
CDN_ENTRY_POINT - имя узла, который будет точкой входа в CDN
- FFMPEG_NODE - имя узла для публикации RTMP потоков на Origin узлы при помощи ffmpeg
WCS_PATH - путь установки WCS
Настройка Docker сети
Если предполагается явное назначение IP адреса в настройках каждого узла, необходимо указать отдельную docker-сеть в конфигурации стенда
Code Block | ||||
---|---|---|---|---|
| ||||
DOCKER_NETWORK=stand
DOCKER_SUBNET=172.16.11.1/24
DOCKER_GATEWAY=172.16.11.1
DOCKER_HOST_IFACE=iface |
Здесь
DOCKER_NETWORK - docker-сеть
DOCKER_SUBNET - IP-подсеть, выделяемая docker-сети
DOCKER_GATEWAY - шлюз docker-сети
DOCKER_HOST_IFACE - имя внешнего интерфейса docker-ВМ
Затем эту сеть необходимо создать при помощи скрипта stand-network
Code Block | ||||
---|---|---|---|---|
| ||||
sudo ./stand-network start |
При этом интерфейс docker-сети будет назначен автоматически как br-$DOCKER_NETWORK
, например br-stand. Правила перенаправления пакетов будут автоматически добавлены в iptables:
Code Block | ||||
---|---|---|---|---|
| ||||
iptables -A FORWARD -i br-$DOCKER_NETWORK -o $DOCKER_HOST_IFACE -j ACCEPT
iptables -A FORWARD -i $DOCKER_HOST_IFACE -o br-$DOCKER_NETWORK -j ACCEPT |
Настройка узла
Файл настроек узла node.conf
располагается в каталоге stand.conf
, в подкаталоге с именем узла. Так же, как и для стенда в целом, настройки описываются набором переменных окружения, в зависимости от типа узла. Кроме того, в каталоге могут лежать дополнительные файлы, который копируются в контейнер узла. Во всех файлах настроек обязательными являются два параметра
NODE_IP - IP дарес узла или пустая строка, если IP адрес должен быть назначен динамически
NODE_PORTS - порты узла, доступные с docker-хоста и внешних сетей
Также может быть указан параметр
- CHECK_PORT - TCP-порт для проверки доступности узла
Настройка узла WCS
Файл настроек node.conf
Code Block | ||||
---|---|---|---|---|
| ||||
NODE_IP=""
NODE_PORTS=22,554,1935,8080-8084,8443-8445,8888,9091,30000-33000/tcp,30000-33000/udp
JAVA_VERSION=8
JAVA_GC=CMS
JAVA_HEAP=2g
WCS_LICENSE="Put-your-license-key-here"
CDN_ROLE=origin
PRODUCT_LINK="https://flashphoner.com/downloads/builds/WCS/5.2/FlashphonerWebCallServer-5.2.XXX.tar.gz"
PRODUCT_ACCESS_LOGIN=staff
PRODUCT_ACCESS_PASSWORD=X5RLgmrTiK25 |
Здесь
JAVA_VERSION - версия JVM (8 или 12)
JAVA_GC - используемый сборщик мусора (CMS или ZGC)
JAVA_HEAP - размер Java heap в Gb
- WCS_LICENSE - лицензия для активации WCS
CDN_ROLE - роль узла в CDN
- PRODUCT_LINK - ссылка для скачивания архива сборки WCS
- PRODUCT_ACCESS_LOGIN - логин для скачивания Enterprise-сборки (для клиентов с Enterprise лицензией)
- PRODUCT_ACCESS_PASSWORD - пароль для скачивания Enterprise-сборки (для клиентов с Enterprise лицензией)
Кроме того, в каталоге могут располагаться:
файл flashphoner.properties
файл wcs-core.properties
файл log4j.properties
файлы *.sdp
файл cdn_profiles.yml
Эти файлы копируются в контейнер "как есть", никакие изменения в них не вносятся, в том числе не меняются настройка IP адресов и параметры JVM. В этом случае IP адрес узла должен быть явно задан в node.conf
Роль узла в CDN отпределяется либо из настройки, либо из имени узла:
o-* - Origin
t-* - Transcoder
e-* - Edge
Роль узла в CDN может быть также явно задана в файле flashphoner.properties, который копируется в контейнер
Настройка узла для публикации RTMP-потоков на Origin серверы CDN
Файл настроек node.conf
Code Block | ||||
---|---|---|---|---|
| ||||
NODE_IP=""
NODE_PORTS=22
MEDIA_MOUNT=/home/media |
Здесь
MEDIA_MOUNT - каталог на docker-сервере, монтируемый в контейнер
При запуске узла в контейнер монтируется каталог, который должен содержать файлы *.mp4 для публикации
Кроме того, в каталоге могут располагаться:
файлы *.mp4 - копируются в каталог, заданный в MEDIA_MOUNT
файлы *.sh - копируются в каталог, заданный в MEDIA_MOUNT
Публикация RTMP потоков на Origin серверы
Если в каталоге, заданном в MEDIA_MOUNT, находятся скрипты публикации *.sh, они выполняются для каждого из Origin узлов, при условии, что роли узлов заданы в настройках или при помощи именования. В этом случае скрипт получает параметром IP адрес узла.
Если роли узлов заданы в файлах flashphoner.properties, копируемых в контейнер, скрипты публикации выполняются без передачи IP адреса узла, в этом случае IP адреса узлов для публикации должны быть явно определены в скрипте.
Если в каталоге, заданном в MEDIA_MOUNT, находятся медиа файлы *.mp4, и при этом не содержатся скрипты публикации, каждый из файлов публикуется на каждый Origin узел, при условии, что роли узлов заданы в настройках или при помощи именования.
Команды управления стендом
Запуск стенда
Для запуска стенда целиком необходимо выполнить команду
Code Block | ||||
---|---|---|---|---|
| ||||
sudo ./wcs-stand start all |
При необходимости, стенд может быть запущен частично. Например, для запуска только CDN, необходимо выполнить команду
Code Block | ||||
---|---|---|---|---|
| ||||
sudo ./wcs-stand start cdn |
Можно также перечислить имена узлов для запуска
Code Block | ||||
---|---|---|---|---|
| ||||
sudo ./wcs-stand start o-test1 e-test1 |
Запуск только CDN с публикацией
Code Block | ||||
---|---|---|---|---|
| ||||
sudo ./wcs-stand start cdn ffmpeg |
Остановка стенда
Для остановки стенда, запущенного целиком или частично, необходимо выполнить команду
Code Block | ||||
---|---|---|---|---|
| ||||
sudo ./wcs-stand stop all |
Если были запущены только определенные узлы, их также можно остановить
Code Block | ||||
---|---|---|---|---|
| ||||
sudo ./wcs-stand stop e-test1 |
Логирование
Лог скрипта запуска и остановки стенда записывается в файл wcs-stand.log
. При необходимости, уровень логирования может быть повышен с помощью ключа -v:
Code Block | ||||
---|---|---|---|---|
| ||||
sudo ./wcs-stand -v start all |
Доступ внутрь контейнеров стенда
Контейнеры стенда доступны извне по SSH (порт 22). Приватный и публичный ключи доступа должны располагаться в каталоге ssh, в этом случае публичный ключ будет скопирован в контейнер при его запуске:
Code Block | ||
---|---|---|
| ||
ssh
|--id_rsa
|--id_rsa.pub |
Таким образом, для доступа к контейнеру необходимо выполнить команду
Code Block | ||||
---|---|---|---|---|
| ||||
ssh -i ssh/id_rsa root@172.16.11.4 |
Здесь
...
id_rsa - приватный ключ
...
Назначение и схема работы
Тестовый стенд предназначен для развертывания отдельного WCS сервера или CDN в docker контейнерах с целью тестирования:
- функций WCS
- распределения медиа потоков в планируемой конфигурации CDN
- взаимодействия с бэкендом (контейнеры для бэкенда должны быть развернуты отдельно в соответствии с конкретным тестируемым случаем)
Вместе с WCS узлами может быть также развернут контейнер для публикации RTMP потоков из указанных медиафайлов при помощи ffmpeg на Origin серверы стенда.
Стенд может быть развернут в docker bridge сети по умолчанию, при этом IP-адреса контейнеров назначаются динамически, и настройки CDN могут быть сформированы автоматически. Однако, для более углубленного тестирования необходимые файлы настроек WCS должны быть определены для каждого WCS узла, и IP-адреса контейнеров должны быть назначены статически. В этом случае возможно создание отдельной docker сети для стенда.
При запуске стенда, может быть настроен доступ к контейнерам по SSH при помощи приватного ключа, это дает возможность управления контейнерами, например, через Ansible. В этом случае, контейнеры могут быть доступны не только с docker машины, но и извне, при этом маршрутизация должна быть настроена соответствующим образом.
Известные ограничения
1. Стенд может быть запущен только на Docker машинах под управлением Linux, поскольку WCS работает только в Linux окружении.
2. В текущей реализации в docker-образы стенда интегрируется только окружение для запуска WCS, сами сборки WCS скачиваются по заданным ссылкам. Загруженные архивы сборок кэшируются.
3. Лицензия для активации WCS должна быть указана при настройке каждого WCS узла.
4. Стенд не рекомендуется использовать для нагрузочного тестирования, поскольку определяющей в этом случае будет производительность Docker машины.