HTTP Live Streaming 代替ストリームを設定する
今回は、HLSで代替ストリーミングをやってみようと思います。これはどういうものかというと、HLSを配信するサーバーが、障害などで停止して配信できなくなった時、バックアップのサーバーに自動的に切り替えを行うものです。とくに、こういった自動的な切り替えを「フェイルオーバー」と言います。
簡単にできるので、さっそく設定してみようと思います。
今回の想定は、配信サーバー2台(プライマリサーバー、バックアップサーバー)に、接続用サーバー1台です。そして、プライマリサーバー上から映像を配信している最中に、サーバーが停止して、バックアップサーバーに切り替わるというシナリオです。
代替ストリームの設定は、マスタインデックスファイルで行います。前回、アダプティブストリームの話をしたときに出てきたファイルと同じもので、記述は、下記のようになります。
BANDWIDTHの値は同じで、プライマリとバックアップで接続先の違うアドレスを追加します。設定はこれだけです。
動画の切り替わりが分かりやすいように、プライマリとバックアップの文字を書いておきます。
用意した動画
(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org
では、実際に確認をしてみましょう。
動画解説
(開始時)
ブラウザからは接続用サーバーにアクセスを行います、そうするとマスタインデックスファイルの記述順から、プライマリサーバーに接続され映像が再生されます。この状態では、バックアップサーバーは、何もせず待機しているだけです。
再生開始時は、読み込み順によりプライマリサーバーに接続
(0分25秒)
次に、プライマリサーバーに異常が発生したと想定して、Webサーバーを停止させます。
※ちなみにWebサーバーは、LinuxのDebianです。
(1分20秒)
しばらくすると、映像がバックアップサーバー側に切り替わります。これがフェイルオーバーです。
映像が止まることなく切り替る
サーバーが停止しても、クライアント側は、バッファに溜まっている映像データがあるので、すぐには止まりません。その間にバックアップサーバーに接続が切り替わると、停止することなく再生が続きます。
プライマリサーバーは、停止状態から起動状態に復帰させても、再生中に切り替わったバックアップサーバーから戻ることはありません。再度 接続し直す必要があります。
このような代替ストリームの設定は、簡単にできる1つの保険みたいなものです。バックアップサーバーは、普段は接続されない予備機にあたるため、費用を考慮する必要があるでしょう。
そして、サーバーの負荷分散がされているわけではないので、基本は1台のサーバーでストリームを行います。負荷分散させるには、ロードバランサーやCDN(コンテンツデリバリネットワーク)を利用する必要があります。