web-dev-qa-db-ja.com

Nginx-rtmp-moduleエッジノードがマルチマスターノードからストリームをプルする方法

1つのマスター取り込みサーバーと複数のエッジノードがあり、それぞれが取り込みサーバーからプルします。しかし、今私は10000台のカメラを持っていますマスター取り込みサーバーにストリームをプッシュします、私はそれを処理できないのではないかと心配しています。そのため、マスター取り込みサーバーをさらに追加する予定です(LoadBalancer LVSを使用して、これらのカメラがストリームをプッシュするマスター取り込みサーバーを処理します)。ただし、複数のマスター取り込みサーバーを使用すると、エッジノードがこれらすべてのストリームをプルする方法がわかります。このようにEdgeノードでプルオプションもテストします

application live {
   notify_method get;
   idle_streams off;
   pull rtmp://master_server_1/live live=1;
   pull rtmp://master_server_2/live live=1;
}

ただし、master_server_1からストリームをプルするだけです。何かアドバイス ?ありがとう

ところで、私はこれ以上のマスターサーバーは必要ないと思います。帯域幅をアップグレードするだけです。正しいですか?ありがとう

1
user3500294

DNSレコードを複数のオリジンサーバーに解決することができます-これを単純なDNSラウンドロビン負荷分散に使用できるだけでなく、これは、nginx-rtmpを複数のオリジンからプルする方法になります。

特定の時点以降、複数の取り込みサーバーを使用することは理にかなっています。その他の実用的な考慮事項はさておき、信頼性が向上します。サーバーが1つしかない場合、単一障害点が発生します。

ソース: https://groups.google.com/forum/#!topic/nginx-rtmp/B2QqkwXxASk

注1:NGINXは、再起動されるまでDNS解決をキャッシュします。 IPが変更されることが予想される場合(私はAWS ELBを使用しているため、大きく変更されます)、NGINXのDNSリゾルバーをいじるか、代わりにexec_pullディレクティブをffmpegと組み合わせて使用​​する必要があります。

注#2:プルされるすべてのノードは同じストリームを持っている必要があります。特定のストリームがオリジンに存在するかどうかを知る方法はありません。最初に利用可能な(接続に関して)オリジンを使用します。

ストリームの個別のセットを持つオリジンが必要な場合(スケーリングには意味があります)、それを自分で管理する必要があります。コンシステントハッシュアルゴリズムを使用してこれを解決し、ストリームをさまざまなビデオクラスターにマッピングして、負荷を分散させました。例:Origin "1"に公開されたストリームは、Origin "1"からプルしたエッジでのみ再生できます。このようなシステムの実装は、アプリケーション層にある必要があります。

0
Misha Nasledov