皆さんそんなにソーリーサーバを設定したいのですか!?
前回までの記事はこちらです。
→ gdnsdでかんたんGSLB(その1)
→ gdnsdでかんたんGSLB(その2)
gdnsdを使ってGSLBを構成する方法について紹介してきました。今回はその続編です。
ロードバランサでよく設定される項目に「ソーリーサーバ」というものがあります。これはロードバランシング先のメインサーバが全てダウンした時に、フォールバック先のサーバを指定するものです。サービス停止により「ごめんなさい」の意を伝えるページを表示するための機能であることから、このような名称で呼ばれることが多いようです。
GSLBでもサービス用のサイトが全てダウンした際に、アクセスをソーリーサーバに誘導したいケースがあるでしょう。以下ではgdnsdでソーリーサーバの設定方法について紹介します。
gdnsdでソーリーサーバを指定する設定例
まずはgdnsdの設定例を以下に記載します。
/etc/gdnsd/config
plugins = {
metafo = {
resources = {
www = {
datacenters = [ main , sorryserver ]
dcmap = {
main = {
plugin = multifo
up_thresh = 0.00000001
service_types = ping_mon
www1 = 153.120.ccc.ccc
www2 = 163.44.ddd.ddd
}
sorryserver = 133.242.eee.eee
}
}
}
}
}
service_types = {
ping_mon = {
plugin = extmon
cmd = ["/usr/bin/ping", "-c", "3", "-W", "1", "%%ITEM%%"]
interval = 10
timeout = 5
up_thresh = 5
ok_thresh = 3
down_thresh = 2
}
}
/etc/gdnsd/zones/gslb.src.sakura.ad.jp
$TTL 86400
@ SOA ns1 hostmaster (
2016092100 ; serial
7200 ; refresh
30M ; retry
3D ; expire
10 ; ncache
)
@ NS ns1
@ NS ns2
ns1 A 133.242.aaa.aaa
ns2 A 163.44.bbb.bbb
www 10 DYNA metafo!www
直接的にソーリーサーバを設定することはできないので、metafoプラグインを使用します。これは前回までに紹介したmultifoプラグイン(DNSラウンドロビン)やweightedプラグイン(重み付け応答)と組み合わせて使用します。
metafoプラグインでは、datacenterという概念を定義できるようになっています。先頭に定義したdatacenterより順次フォールバックすることが可能です。
上記設定例では、mainとsorryserverの2つのdatacenterを定義していますので、mainが全てダウンするとsorryserverがアクティブとなります。結果的に、2台のWebサーバ(153.120.ccc.ccc, 163.44.ddd.ddd)が両方ともダウンした際に、ソーリーサーバ(133.242.eee.eee)をレスポンスする挙動になります。
なお、上記設定例においてsorryserver側にいずれのプラグインも適用していませんので、ヘルスチェックは行われません。sorryserverで指定したIPアドレスが生きてようと死んでようと、mainがダウンした時にはこのIPアドレスを応答しますのでご注意ください。
ちなみに、metafoプラグインのマニュアルは以下にあります。
https://github.com/gdnsd/gdnsd/wiki/GdnsdPluginMetafo
動作確認
digコマンドでDNS応答を確認します。
両方のサーバがアップしている状態
$ dig +short www.gslb.src.sakura.ad.jp
153.120.ccc.ccc
163.44.ddd.ddd
両方のサーバがダウンしている状態
$ dig +short www.gslb.src.sakura.ad.jp
133.242.eee.eee
後者のケースで正しく指定したソーリーサーバのIPアドレスのみをレスポンスできていることが確認できます。
なお、metafoプラグインを使用せず(前回までのようにmultifoやweightedプラグインのみを使用した設定)全てのサーバがダウンした場合、全てのサーバがアップしているとみなしてDNSレスポンスを行います。
weightedプラグインと組み合わせる場合
勘のいい方ならお分かりかと思いますが、weightedプラグインを使用しつつソーリーサーバを指定するには、以下のようになります。
dcmap = {
main = {
plugin = weighted
up_thresh = 0.00000001
service_types = ping_mon
www1 = [ 153.120.ccc.ccc, 1 ]
www2 = [ 163.44.ddd.ddd, 3 ]
}
sorryserver = 133.242.eee.eee
}
ところで・・
だいぶ前になりますが、さくらのクラウドのGSLBでもソーリーサーバ設定機能が実装されました。是非ご活用ください :-)
http://cloud-news.sakura.ad.jp/2016/06/30/gslb-sorryserver/