www のアクセス先を振り分ける設定 - GSLB編 (1)

# 概要

今さら訊けないさくらのクラウド・チュートリアル（ [目次はこちら](https://qiita.com/zembutsu/items/538aa0a0211f9200b6c5)  ）、今回は GSLB です。ウェブサイトなどを、サービスのメンテナンスやサーバ障害が発生していたとしても、安定して稼働するために GSLB が役立ちます。アクセスができなくなれば、自動的に表示するサイトを切り替えたり、メンテナンス用のページを表示できます。今回は例として、 www.example.jp のようなホスト名のアクセスを振り分ける基本的な設定を行います。

# 解説

## GSLB を使ってサーバ障害やメンテナンス時の疎通不可を回避

GSLB とは、DNS を使った負荷分散（ロードバランサ）システムです。これを使えば、ロードバランサとして単純にアクセス振り分けをできるだけでなく、アクセス先のサイトに接続できなければ別のメンテナンス用のサイトに誘導することもできます。また、さくらのクラウド内の各ゾーン間で振り分けできるだけでなく、さくらの VPS やレンタルサーバにも振り分けできます。

一般的なロードバランサ導入の目的は、通信トラフィックを複数台のサーバに分散すること、より多くのアクセスを処理したり、サービスの可用性を高めるためです。GSLB （広域負荷分散）も同様な用途として使うこともできますが、ゾーンを横断しての負荷分散ができるため、どちらかといえばサービスサイトの可用性・継続性を高める用途に向いています。

通常時、GSLB 側では各サーバが正常に通信できるかどうか、ヘルスチェックを行います。そのヘルスチェック状況が正常かどうかで、DNS（ TTL 10 秒の CNAME レコード）の情報を随時書き換えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/54317f45-d607-cbef-17e4-e036228884d5.png)


仮にヘルスチェックが通らなければ、その対象サーバの IP アドレスの情報は、振り分け先のから自動的に除外されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/68b65bd3-9814-1ab2-6bdc-1a15516f4121.png)


さらに、ヘルスチェックが全く通らない場合は、メンテナンス用のページを表示する「ソーリーサーバ」用のサーバに自動的に切り替えます。もちろん、アクセスが回復したら、元のサイトを自動的に表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/dd48086f-0072-24a3-b306-3e6ebd2230d1.png)


## 事前準備

GSLB を使ってアクセスを振り分けるには、DNS の CNAME レコード設定が必要です。そのため、何らかのドメイン名をお持ちいただき、かつ、自分でゾーン情報（リソースレコード情報）の追加や変更を行う必要があります。

さくらのクラウドでドメインの DNS 情報を管理するには、 DNS アプライアンスの利用が簡単です。詳しい設定手順や DNS アプライアンスについては、以下のチュートリアルをご覧ください。

- [ドメイン名（ゾーン情報）を登録するには - DNS アプライアンス編(1)](https://qiita.com/zembutsu/items/a131d62ceb323b7b18c1)

また、GSLB の設定に入る前に、 GSLB への通信を渡す（振り分ける）サーバを準備します。メンテナンス用のページを表示したい場合には、ソーリーサーバ用として使うサーバも準備します。なお、各サーバは別々のゾーンに存在しても構いませんし、さくらの VPS など別サービス上のサーバでも構いません。

## GSLB の追加設定

GSLB を使い始めるには、まず「GSLBアプライアンス」を作成します。左メニューの「グローバル」→「GSLB」をクリックし、画面右上の「追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/e8d5fae9-6a4c-dbf5-dfb3-60f1e5b4480e.png)


次の画面では、それぞれ以下の項目を指定します。

- 監視方法 … ヘルスチェックの方法です。ウェブサイトの応答を条件にしたいので「http」にします。
- Host ヘッダ … 今回は空白のままにします。バーチャルホスト設定など、1つのサーバ上で複数のホストを稼働している場合には必要です。
- パス … ヘルスチェックの対象 URL です。「/index.html」と入力します。
- レスポンスコード … HTTP レスポンスコードを指定します。「200」（正常）を入力します。
- チェック間隔(秒) … ヘルスチェックの間隔を秒単位で指定します。「10」と入力します。
- 重み付け応答 … 振り分け先の実サーバを登録するとき、どのサーバにアクセス振り分けの重み付け（優先度）を設定するかどうか指定します。今回は「有効」のままにしておきます。
- ソーリーサーバ …  今回は使いませんので空白のままにします。
- 名前 … 「www.toaru.site」など、分かりやすい設定を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/ef90f47b-c95d-eb58-241f-cfcf95bd85dd.png)


入力が終わったら、画面を下にスクロールし、「作成」をクリックします。

操作確認ダイアログでは、作成の確認が表示されていますので、改めて「作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/e893c11d-d056-64f0-3a8b-2766988939a7.png)


あとは、ステータスが「成功」に変わるのを待ち、閉じるをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/5272a458-c77d-25b7-002c-5f0ae66e667b.png)


それから再び左メニューの「グローバル」→「GSLB」をクリックすると、一覧画面上に追加した GSLB の情報が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/4024c9f8-370c-e879-289b-449523584406.png)


## DNS ゾーンに CNAME レコードの追加

GSLB を追加したら、GSLB 一覧から、振り分けに必要となる FQDN を確認します。一覧の「FQDN」列にある文字列を確認し、ひかえます。次の図では `site-113200512782.gslb6.sakura.ne.jp` に相当します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/786fad8f-4b22-9288-5c96-68c62852fd49.png)


それから、DNS の対象となるゾーン情報に、接続したいホスト名（www など）に対し、 CNAME として先ほど表示されていた「FQDN」の情報を追加します。BIND の場合であれば、 www.toaru.site に対して CNAME 設定を追加する場合は、次のように記述します（FQDNの末尾にドット「.」が必要なのでご注意ください）。また、必要に応じて named 等の再起動や設定ファイルの読み込みが必要です。

```
www.toaru.site.   IN CNAME site-113200512782.gslb6.sakura.ne.jp.
```

さくらのクラウド DNS アプライアンスをご利用の場合は、左メニューの「グローバル」→「DNS」をクリックし、対象のゾーン名の上でダブルクリックします。DNS アプライアンスに登録まであれば、登録作業を行います。登録作業の詳細は [こちらの記事](https://qiita.com/zembutsu/items/a131d62ceb323b7b18c1) をご覧ください（※ GSLB を使うには、DNS アプライアンス以外の DNS サーバもご利用いただけます）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/168ad0df-735c-6fb5-82e4-41509f34d87d.png)


それから「リソースレコード」のタブをクリックします。もしも、 GSLB で使いたいホスト名に対してレコードが割り当てられている場合、あらかじめ削除する必要があります。確認後、「追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/042a5e4c-9c38-6a46-58a8-0263f93f455c.png)


それから、各項目を入力します。

- 名前 … www.toaru.site へのアクセスを振り分けるため、「www」を入力します。
- タイプ … 「CNAME」を選びます。
- FQDN … 「GSLBから選択」をクリックし、先ほど GSLB を作成した対象、下図では「 (www.toaru.site)」の FQDN を選択します。
- TTL … 「300」秒（5分）を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/32a835dc-7064-ab62-c519-de33c3d66e51.png)


入力・確認後は「作成」をクリックします。

それから、DNS アプライアンスの設定を反映するために、画面右上の「反映」をクリックします。そして、確認画面では「はい」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/dcd9b3ea-dcb6-19fa-c05a-f7569e0e8454.png)


以上で DNS の設定は完了です。

ちなみに、この状態で `dig` コマンドでホスト名の名前解決を試みると、次の様に CNAME レコードの情報だけが表示されます。

```
$ dig www.toaru.site a
（省略）

;; QUESTION SECTION:
;www.toaru.site.                        IN      A

;; ANSWER SECTION:
www.toaru.site.         300     IN      CNAME   site-113200512782.gslb6.sakura.ne.jp.
```

このままではサーバにアクセスできませんので、次に実サーバを登録します。

### 実サーバの登録

実サーバを登録するには左メニューの「グローバル」→「GSLB」をクリックし、対象の GSLB をダブルクリックします。それから「実サーバ」のタブをクリックし、「追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/2027cdf8-03d4-acfd-7606-95306c365aea.png)


次の GSLB ダイアログでは、IP アドレスを入力することもできますが、さくらのクラウド上のサーバであれば「サーバから選択」をクリックし、振り分け先のサーバを選択できます。それから「有効」にチェックを入れ、「重み値」は「100」とし、「作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/5df6d662-005e-fe1b-3522-5449d989b7ce.png)


それから、再び「追加」をクリックし、2台目以降のサバー情報を追加します。下図では2台の振り分け先のサーバを登録した状態です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/043e1d31-ebec-d0d2-167c-5cbcb1de520c.png)


そして、設定情報を有効化するため、画面右上の「反映」をクリックします。続く確認画面では「はい」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/d1bb9a67-bd8c-84e4-cd5c-02dc3e5527d3.png)


設定後、ただちにヘルスチェックが実行され、サーバの応答があれば「ステータス」列が「UP」になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/99eb045d-c6e5-3e4b-6b94-9414fb6f14e4.png)


これで振り分け設定が完了しました。ブラウザから表示を確認すると、2台のうちのどちらか1台にアクセスが来ている状態です。一方のサーバの設定を有効・無効化してみたり、ウェブサーバを停止するなどすると、もう一方のサーバに DNS が切り替わります。また、 dig コマンドで確認すると、 CNAME の情報が切り替わるのも同様に確認できます。

```
$ dig www.toaru.site a
（省略）
;; QUESTION SECTION:
;www.toaru.site.                        IN      A

;; ANSWER SECTION:
www.toaru.site.         262     IN      CNAME   site-113200512782.gslb6.sakura.ne.jp.
site-113200512782.gslb6.sakura.ne.jp. 9 IN A    153.120.17.55
```

画面上の意味は、 FQDN `www.toaru.site.` の別名（CNAME）が `site-113200512782.gslb6.sakura.ne.jp.` であり、この CNAME に対応する A レコードが `153.120.17.55` であるという表示です。この A レコードは TTL 10 秒ごとに切り替わります。

GSLB を使った負荷分散の、基本的な設定は以上です。


# まとめ

GSLB とは DNS を使った負荷分散システムであり、ウェブサーバ等の応答状況仁応じてアクセスを振り分ける機能です。いわゆるロードバランサ（負荷分散）というよりは、データセンタやゾーンをまたぐような、ネットワークに広く分散させる（可用性を高める）という意味での「広域負荷分散」と言えるでしょう。

次回は、振り分け先のサーバが応答しなくなった場合、 [メンテナンス用のページを表示するため（ソーリーサーバ表示機能）の手順](https://qiita.com/zembutsu/items/5b6b132f62abb093c90d) をみていきます。

# 参考情報

- [さくらのクラウド公式ドキュメント](https://manual.sakura.ad.jp/cloud/)
  - [GSLB（広域負荷分散）](https://manual.sakura.ad.jp/cloud/appliance/gslb/index.html)