Help us understand the problem. What is going on with this article?

gdnsdでかんたんGSLB(その1)

More than 3 years have passed since last update.

GSLBアプライアンス製品って買うとめっちゃ高くないですか?

そんなに高かったら、月額数百円から運用出来てしまうAmazon Route 53さくらのクラウドGSLB(税抜500円/月)GMO ConoHA GeoDNS(税抜500円/月)を使っちゃいますよね!!

でも、自前で安価にGSLBを運用したいという方もいらっしゃると思います。

そんなあなたに、gdnsdというオープンソースのGSLBがありますよ!

そもそもGSLBとは?

GSLBはGlobal Server Load Balancingの略で、広域負荷分散と日本語訳されることがあります。地理的に離れた複数のサイトに負荷を分散したり、障害時にサイト単位のフェイルオーバを行ったりする場合に利用されます。

地理的に離れている(=エンドポイントIPアドレスをサイト間で引き継げない)ような状況で使用されるため、DNSの仕組みを用いたアクセス誘導が行われます。具体的にはGSLB自身がDNS権威サーバとして動作し、DNSクエリに対するレスポンスIPアドレスを変化させることでこれを実現しています。

※ 逆に、エンドポイントIPアドレスが変化しない負荷分散・フェイルオーバを実現するのが通常のロードバランサです(GSLBに対比してローカルロードバランサと呼んだりします)。

GSLBの中枢機能は以下のたった2つです!

  • 誘導先サーバのヘルスチェック(もしくはメトリック取得)
  • DNSサーバとして、DNSクエリに対するダイナミックなレスポンス
    ヘルスチェックの結果や、クエリ元の地理的な場所(Geolocation)をメトリックとして考慮します

ぶっちゃけ、これくらいだったら自前で実装できそうな気もしますよね?

実際にGMOさんは、ZabbixとOpenStack Designate(PowerDNS)を使って自前実装されているそうです。

gdnsdとは?

自前でGSLB作っちゃってもいいですが、gdnsdを使うと上記2つの機能を単一のデーモンで実現できます。構成上非常にすっきりして運用上も楽です。

gdnsdのWebサイトは以下にあります。
http://gdnsd.org/

各種方式のヘルスチェック、単純なフェイルオーバや重み付けDNS応答といった基本的なGSLBの機能はもちろんのこと、Geolocation情報を元にしたDNS応答にも対応しており、非常に高機能なソフトウェアです。

今回のテスト環境

今回は以下のように、さくらのクラウドGMO ConoHa上に、gdnsdとWebサーバを用意しました。

gslb-test.png

設定パラメータをまとめると以下のとおりです。

パラメータ 備考
権威を持つゾーン名 gslb.src.sakura.ad.jp 上位ゾーン名は src.sakura.ad.jp
GSLB対象FQDN www.gslb.src.sakura.ad.jp
GSLBサーバ(gdnsd) #1 ns1.gslb.src.sakura.ad.jp
133.242.aaa.aaa
さくらのクラウド石狩
GSLBサーバ(gdnsd) #2 ns2.gslb.src.sakura.ad.jp
163.44.bbb.bbb
GMO ConoHaシンガポール
Webサーバ #1 153.120.ccc.ccc さくらのクラウド石狩
Webサーバ #2 163.44.ddd.ddd GMO ConoHaシンガポール

Step1. gdnsdのインストール

gdnsdはソースをコンパイルしてインストールします。CentOS6系ではうまくコンパイルできず、CentOS7.2を使用しました

まず、コンパイルに必要なパッケージをインストールします。

$ yum install libev-devel libtool
$ yum localinstall http://netix.dl.sourceforge.net/project/kenzy/special/C7/x86_64/ragel-6.8-3.el7.centos.x86_64.rpm

gdnsdのソースコードを取得し、展開します。

$ wget https://github.com/gdnsd/gdnsd/archive/v2.1.3.tar.gz
$ tar xvfz v2.1.3.tar.gz

コンパイルしてインストールします。

$ cd gdnsd-2.1.3
$ libtoolize
$ aclocal
$ autoheader
$ automake -a -c
$ autoconf
$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make
$ make install
$ useradd -s /sbin/nologin -r -d /usr/var/run/gdnsd gdnsd

Step2. 設定ファイルを作成

以下の2つのファイルを作成します。

/etc/gdnsd/config

plugins = {
  multifo = {
      www = {
        up_thresh = 0.00000001
        service_types = http_mon
        www1 = 153.120.ccc.ccc
        www2 = 163.44.ddd.ddd
      }
  }
}

service_types = {
  http_mon = {
        plugin = http_status
        port = 80
        url_path = "/"
        ok_codes = [ 200 ]
        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 (
       2016030300   ; 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    multifo!www

/etc/gdnsd/configには応答方式(multifo)とヘルスチェック方式を定義しています。

ゾーンファイル(gslb.src.sakura.ad.jp)は、BINDなどと同じなのでAAAAやCNAMEなど他のレコードも普通に書けます。DYNAを指定したレコードは特殊で、configファイルの定義に従いダイナミックなレスポンスを行います。DNSの変更がなるべく早く反映されるよう、TTLは短めの10秒に設定しています

Step3. gdnsdを起動し動作確認

gdnsdを起動します。

$ /usr/sbin/gdnsd start

これで、ヘルスチェックとDNSサーバとしてのレスポンスが開始されます。ヘルスチェックの状態は、gdnsdの動作しているサーバの3506番ポートにブラウザで接続することで確認可能です。

以下のような画面が表示されると思います。

a.png

DNSレスポンスの動作確認をしてみます。上位ゾーンから正しく委譲されていれば世界中からDNS引けるはずです。

両方の実サーバが正常稼働している場合:

$ dig +short www.gslb.src.sakura.ad.jp
163.44.ddd.ddd
153.120.ccc.ccc

片方(153.120.ccc.ccc)がダウンした場合:

$ dig +short www.gslb.src.sakura.ad.jp
163.44.ddd.ddd

うまく外れてますね。ステータス画面でもダウンを検出していることが確認できます。

b.png

GSLB化したFQDNでのWebアクセスも、切り替わっていることを確認できるかと思います。
http://www.gslb.src.sakura.ad.jp/

次回に続く

今回は基本的な設定のみを紹介しました。次回は各種ヘルスチェック方式や重み付け応答の設定を紹介したいと思います。

→ gdnsdでかんたんGSLB(その2)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした