はじめに
2台のWebサーバーがあり、CISのGLB機能で割り振りを行う事は珍しくありません。
2台のサーバーがアクティブ・アクティブであれば、GLBからラウンドロビンで割り振れば特に問題ありません。
今回は、普段はサーバー1に全てのリクエストを割り振り、サーバー1がダウンした時だけサーバー2に切り替えたい、という要件だったので、複数Origin Poolを作り、Poolに対する優先順位を設定する方法で実現しました。
Origin Poolが1つの場合
一番シンプルに、1つのOrigin Poolに2台のWebサーバーを入れる構成では、2台のサーバー間で重み付けをすることはできても、今回の要件を満たす設定はできません。
重みを「1:0.1」のように差を付けただけでは、少数ながらサーバー2に割り振られます。
「1:0」にすると、サーバー1がダウンした時もサーバー2には割り振られず、エラー画面が表示されます。
Origin Poolを2つにして優先順位を付ける
今回の要件は、2つOrigin Poolを作り、Poolに対する優先順位を設定する方法で実現できます。
https://cloud.ibm.com/docs/cis?topic=cis-glb-features-pools&locale=ja
複数のプールを構成して、フェイルオーバーの優先順位 (プール A > プール B > プール C) を設定することもできます。
2つのOrigin Poolを作り、サーバーを1台ずつ所属させます。
ロードバランサー配下に2つのPoolを所属させ、Pool1の優先度を高くします。
デフォルトではロードバランサーの設定項目である「トラフィック・ステアリング」が「ランダム」になっており、pool2の優先度を下げていても半分くらいはpool2に割り振られてしまうため、「オフ」にします。これで、優先度の高いpool1にしか割り振られない状態になります。
参考
動作確認
普段はサーバー1にのみリクエストが行っています。
サーバー1をダウンさせると、ロードバランサーが検知し、pool2のサーバー2にリクエストが行くようになります。
サーバー1を立ち上げ、ロードバランサーが正常を検知すると、再び、サーバー1にしかリクエストが行かない状態に戻ります。
なお、サーバー2の代わりに、Static Website Hostingの機能を有効にしたICOSを向くようにし、そこに静的なHTMLファイルを置いておけば、維持コストや運用の手間がほとんどかからないSorryページとして使うことができます。