前回は新しくなったConoHa の機能やコンセプトなどを紹介しました。ConoHaには仮想サーバであるVPSを中心に、さまざまな付加機能が用意されており、今回はそれらの中から3つをピックアップして解説します。
海外リージョンを使う
海外リージョンの提供は、新しいConoHaの大きな特徴の1つです。日本のほかに、シンガポールとアメリカ(サンノゼ)でサーバを立ち上げることができます。これによりネットワークの遅延を少なくし、エンドユーザに質の高いサービスを提供することが可能になります。
今回はアメリカリージョンにVPSを構築し、pingでRTT(Round Trip Time )を見てみましょう。pingの場合、相手のホストにICMP echorequestを送信してICMP echo replyが返ってくるまでにかかった時間がRTTです。これが短いほどネットワークの遅延が少ないことになります。アメリカリージョンにVPSを構築するには、VPS作成画面の「リージョン」という項目で「アメリカ」を選択します(図1 ) 。
図1 VPS追加画面(リージョン選択)
VPSを作成したらSSHでログインしましょう。試しにwww.conoha.jpにpingを送ってみます(図2 ) 。現在、www.conoha.jpは日本にあるサーバ上でホストされているため、これはアメリカにあるVPSから日本のサーバにpingを送っていることになります。経験上、日本、アメリカ間でpingを送ると100から数百ミリ秒くらいのRTTになります。今回は112ミリ秒でした。次にアメリカ国内のサイトの例としてwww.washingtonpost.comにpingを送ってみましょう。1.8ミリ秒程度で非常に遅延が少ないこがわかります(図3 ) 。
図2 www.conoha.jpにpingを送信
# ping -n -c 3 www.conoha.jp
PING www.conoha.jp (157.7.108.44) 56(84) bytes of data.
64 bytes from 157.7.108.44: icmp_seq=1 ttl=51 time=112 ms
64 bytes from 157.7.108.44: icmp_seq=2 ttl=51 time=112 ms
64 bytes from 157.7.108.44: icmp_seq=3 ttl=51 time=112 ms
--- www.conoha.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 112.228/112.474/112.921/0.499 ms
図3 www.washingtonpost.comにpingを送信
# ping -n -c 3 www.washingtonpost.com
PING ins-019.inscname.net (192.33.31.56) 56(84) bytes of data.
64 bytes from 192.33.31.56: icmp_seq=1 ttl=58 time=1.72 ms
64 bytes from 192.33.31.56: icmp_seq=2 ttl=58 time=1.86 ms
64 bytes from 192.33.31.56: icmp_seq=3 ttl=58 time=1.84 ms
--- ins-019.inscname.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 1.723/1.813/1.868/0.064 ms
ロードバランサを使って負荷分散をする
ロードバランサを使うと、複数台のVPSやアプリケーションサーバにトラフィックを分散できます。またバランシングやヘルスチェック(配下のサーバに対する死活監視方法)もユーザ側で設定できるので、サービスに応じた細かな設定が可能です。ここでは複数台のWebサーバにトラフィックを分散するという想定で、ロードバランサの設定をしてみます。図4 はWebサーバが2台の場合の構成例です(矢印はのちほど説明するトラフィックの流れです) 。
図4 DSR方式の概要
なお以降の手順を試す場合、ロードバランサと同じリージョンで、VPSを使ってWebサーバを数台構築しておいてください。Webサーバの構築方法は省略しますが、yumやaptなどでApacheもしくはnginxをインストールしておけば十分です。
ロードバランサとヘルスモニタを追加する
ロードバランサの項目を表示するには、コントロールパネルの左メニューから「ネットワーク」を選びます。ここで「追加」をクリックしてロードバランサを追加します(図5 ) 。
図5 ロードバランサの追加
ロードバランサにはヘルスモニタも必要になります。ヘルスモニタとは、ロードバランサ配下のサーバに対してどのような死活監視を行うかを決めるものです。ヘルスモニタは、配下のサーバに対して一定間隔で通信を行います。チェックに失敗した場合、そのサーバをバランシング対象から外します。
追加については「ネットワーク」の画面でヘルスモニタリストを表示し、左側の「+」をクリックします。今回はHTTPトラフィックを扱うので、ヘルスモニタのプロトコルには「HTTP」を選択しましょう。判定時間とパスはデフォルト値のままでかまいません(図6) 。
図6 ヘルスモニタの追加
作成できたら、ロードバランサのIPアドレス部分をクリックしてみましょう。詳細が表示されます。「 バーチャルIPアドレス」が実際にクライアントが接続するIPアドレスです。ロードバランサは、このIPアドレスへのアクセスを配下のサーバにバランシングします。
バランシングの設定を行う
次にバランシングの設定を行います。この手順で、ロードバランサ配下にサーバを追加し、トラフィックの分散方法を決めます。バランシングはTCPポートごとに設定します。今回はHTTPなので「バランシング元ポート」の80をクリックします。その後、右側にある変更アイコンをクリックしてください(図7 ) 。
図7 ロードバランサの設定
「バランシング方法」はラウンドロビンかリーストコネクトが選択できます。前者は均等にトラフィックを分散し、後者は最も接続数の少ないサーバにトラフィックを分散します。サービスの特性に合わせて選んでください。「 ヘルスモニタ」には先ほど作成した「HTTP」を選択します。「 バランシング先IPアドレス」のプルダウンメニューでは、トラフィックを振り分けるVPSを選択します。それぞれ選択して「保存」をクリックすると設定は完了です。
Webサーバにネットワークの設定を行う
最後にWebサーバに少し設定を追加する必要があります。ConoHaのロードバランサはDSR(Direct Server Return )方式を採用しています。これはロードバランサ経由でWebサーバまで届いたクライアントからのトラフィックを、Webサーバがクライアントに直接返す方式です。トラフィックの流れは図4を確認してください。DSR方式の場合、ロードバランサからWebサーバに送られてくるパケットは、ロードバランサのIPアドレス(VIP)になります。Webサーバはこのパケットを受け取って処理できなければなりません。Linuxの場合、NICにVIPのループバックを設定しますが、ここではiptablesやfirewalldを使用した例を紹介します(リスト1、2 ) 。
リスト1 iptablesで設定する
iptables -t nat -A PREROUTING -d [ロードバランサーのVIPアドレス] -j
REDIRECT
リスト2 firewalldで設定する
# httpサービスをfirewalldに追加
firewall-cmd --add-service httpd
# eth0にロードバランサのIPアドレスをエイリアスとして追加
nmcli c mod eth0 +ipv4.addresses "[ロードバランサのVIPアドレス]/32"
# ネットワークインターフェースをリスタートして設定を反映
nmcli c down eth0; nmcli c up eth0
以上で設定はすべて完了しました。ブラウザなどからhttp://[ロードバランサのVIPアドレス]にアクセスしてみましょう。またWebサーバのログなどを確認すると、ロードバランサがトラフィックを分散させる様子が確認できます。
GeoDNS
ConoHaには無料で使えるDNSサービスが用意されています。GeoDNSはDNSサービスのオプションとして使える機能で、接続元のIPアドレスに応じてネットワーク的に最も近いリージョンのAレコードを返す機能です。ConoHa以外のサーバに対しても設定可能で、すでに日本でサービスを展開している場合であっても、日本はそのままで海外サーバだけConoHaを使うといった利用もできます。GeoDNSは単純にAレコードを返すだけでなく重み付けとヘルスチェックの機能があり、どこかのリージョンに障害が発生しても、ほかのリージョンが応答することが可能です。
ではGeoDNSを試してみましょう。コントロールパネルの左メニューから「DNS」を選択し、「 追加」をクリックしてお手持ちのドメインを追加してください。追加したドメインをクリックすると、詳細が表示されます(図8 ) 。
図8 DNSの設定
まずは、GeoDNSオプションを「有効」に変更しましょう。これでGeoDNSが使えるようになります。そして、右上の変更アイコンをクリックしてDNSレコードを追加していきます。GeoDNSは通常のDNS Aレコードと同じように設定しますが、「 ヘルスチェックポート」や「リージョン」といった固有の設定があります。それぞれヘルスチェックに使うTCPポート番号と、そのサーバが存在するリージョンを指定してください。サーバがConoHaの場合は自動でリージョンを認識しますが、ほかの事業者のサーバの場合はユーザが手動でリージョンを指定する必要があります。これを繰り返して、東京、アメリカ、シンガポールそれぞれのGeo DNSレコードを追加しましょう。典型的な設定例は図9 のようになります。
図9 典型的なGeoDNS例
以上で設定は終わりです。確認のため各国からpingを送ってくれる便利なサービスを利用してみましょう。今回はhttp://www.super-ping.com/を利用しました。図10 のように、地域ごとに最も近いリージョンのIPアドレスが返ることがわかります。
図10 super-ping.comによる確認
まとめ
第2回ということで、実際にConoHaの新機能を使ってみました。海外リージョンはさまざまな地域のユーザにサービスを展開する際にネットワーク遅延を最小化できます。ロードバランサはVPSの柔軟性を活かし、負荷分散を実現して可用性の高いシステムを設計できるでしょう。GeoDNSは海外リージョンをより効果的に活用できます。皆さんもConoHaの新機能をぜひ試してみてください。