Я настраиваю сервер для балансировки нагрузки между серверами (транскодерами).
У меня много серверов транскодирования, и я хочу, чтобы баланс между этими серверами по алгоритму php выбирал, что сервер отвечает на запрос. запрос RTMP.
Exemple:
запрос клиента: rtmp://balancer_ip: 1935/ Live / 21?Имя пользователя = Jhony и пароль = хахаха
Рабочий процесс балансировщика: найдите лучший транскодер и учетные данные клиента, имеющие доступ к этому серверу транскодирования, и перенаправьте или proxy_pass клиент на этот сервер транскодирования.
На серверах транскодирования я установил и настроил nginx с модулем RTMP, она отлично работает с аутентификацией rtmp по алгоритму php. На первом сервере балансировки я попытался перенаправить клиентов с параметром on_play в модуле rtmp, например, аутентификация rtmp, но мне это не удалось.
Поэтому я проводил другие исследования и обнаружил, что с помощью nginx TCP и UDP Load Balancing с этим модулем я могу перенаправить или proxy_pass запросы клиентов на серверы транскодирования, но во многих случаях проблема в том, что балансировщик proxy_pass клиент неправильно подключает серверы транскодирования (клиент не имеет ' t доступ к этому серверу транскодирования или поток rtmp не работает).
#in balancer nginx.conf
stream {
#listen on rtmp port
server {
listen 1935;
proxy_pass rtmp_servers;
}
upstream rtmp_servers {
server transcoder_1_ip:1935;
server transcoder_2_ip:1935;
#check interval=10 passes=2 fails=3 port=1935;
}
}
#in transcoder nginx.conf
rtmp {
server {
listen 1935;
application live {
live on;
on_play http://127.0.0.1:80/rtmp-auth;
notify_method get;
record off;
}
}
}
// php function for rtmp stream authentication in transcoder
$app->get('/rtmp-auth', function (Request $request) use ($app) {
$response = new Response();
$response->setStatusCode(404);
// check with database if user name and posword is ok
$response->setStatusCode(201);
}
/* i tryed in balancer with this code and send a redirection
in the return but she dont work :(*/
return $response;
})->bind('rtmpAuth');
Так есть ли способ перенаправить или сбалансировать между серверами по специальному алгоритму?
Или в каждом клиентском запросе проверять ответ сервера транскодирования перед перенаправлением клиентов?
Примечание: у меня есть серверы tronscoding, работающие с некоторыми критериями, такими как страны клиентов ... поэтому мне нужно создать алгоритм для перенаправления запросов клиентов.