web-dev-qa-db-ja.com

2つの同一のIcecastマスターサーバーに自動フェイルオーバーリバースプロキシを設定するにはどうすればよいですか?

私は単純なことをしようとしています前面にリバースプロキシを使用してすべてを2倍にする Icecastマスターストリーミングサーバーの高可用性(つまり、ここではIcecastリレーについて話していません)。したがって、3つのVM:

  • 2つの同一の自己完結型IcecastVM(それぞれにローカルMPD音楽ソースとローカルnginxフロントエンドがあります 正しいヘッダー
  • 単一のロードバランサー/リバースプロキシnginxVM。

私の質問は–Icecast VMの1つがストリームクライアントの中断をほとんど伴わずにダウンした場合に自動フェイルオーバーを実行するようにリバースプロキシを構成するにはどうすればよいですか?

図:

                             /--- [ local nginx A <-> icecast master A <- mpd A]
-> [nginx reverse proxy] ---<
                             \--- [ local nginx B <-> icecast master B <- mpd B]

私は最初に この簡単なチュートリアル リバースプロキシnginxを設定しようとしました。その後、nginxVMを開いてストリームを聞くことができました。

upstream backend  {
  ip_hash; # try to send the same clients to the same servers
  server 1.2.3.4;
  server 1.2.3.5 max_fails=1  fail_timeout=15s;
}
server {
  location / {
    proxy_pass  http://backend;
  }
}

IcecastでIcecastサービスを停止すると、VMこれが最終エンドポイントですが、クライアントは適切なIcecastにフェイルオーバーしません。何らかの理由で更新した後でも、実験してみました。さまざまなip_hashmax_failsfail_timeoutオプション、さまざまな応答ヘッダープロパティ、バッファサイズなど その他サイト言及 ですが、何も機能しませんでした。ここでは暗闇の中で釣りをしているような気がします。人気のあるラジオ局の数を考えると、ストリーミングフェイルオーバーには明らかな解決策があるはずです。これを設定する最善の方法やいくつかの優れたリソースについて何かアドバイスはありますか? 302リダイレクトまたは実際のプロキシパスが必要ですか?

それがより良い方法であるならば、私はHAProxyに基づく提案を受け入れます。

2
metakermit

ご存知のように、Icecastのリバースプロキシはお勧めできません。いくつかの欠点があり、それでも単一障害点、つまりフロントエンドがありますが、実際の利点はありません。

Icecastは非常に安定した信頼性の高いサーバーであり、HTTPを介してWebページを提供するために採用されている一般的な戦略が必ずしも適用されるとは限りません。

あなたの努力はおそらくIcecast、その構成と制限を知ることに費やされたほうがよいでしょう。とはいえ、適切に構成されたIcecastは、1 GBit/sの接続を簡単に飽和させ、20.000をはるかに超える同時リスナーにサービスを提供します。テストでは、実際にはそれをはるかに超えてスケ​​ーリングすることが示されていますが、コーナーケースがある可能性があります。

その後、自分自身に問いかけてください。可用性に関してどのような問題を本当に解決しようとしていますかそして問題への答えはおそらく「リバースプロキシ」ではないでしょう。

2
TBR