Я настраиваю сервер для балансировки нагрузки между серверами (транскодерами).
У меня много серверов транскодирования, и я хочу, чтобы баланс между этими серверами по алгоритму 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, работающие с некоторыми критериями, такими как страны клиентов ... поэтому мне нужно создать алгоритм для перенаправления запросов клиентов.

0