UNIX的なアレ:gihyo.jp出張所
第4回 知っておきたいスケールアウトの基礎知識 その3
2008年9月24日
UNIX, Webサービス, スケールアウト, DNSラウンドロビン, アクセス分散, L4ロードバランサ, L7ロードバランサ
システム, サーバー, アクセス, サービス, ロードバランサ, アドレス
より実践的なスケールアウトへ
前回までは,スケールアウトの基本的な考え方について説明をしてきました。
しかし,前回までの方法だと,WebサーバーやApplicationサーバーがどうしてもシングルポイントになってしまい,より多くのアクセスを受けた場合に,さばけなくなってしまいます。
それでは,より多くのアクセスをうけることができるシステムの設計はどうすればよいでしょうか?
今回は,より実践的なスケールアウトの方法を紹介していきたいと思います。
DNSラウンドロビンでアクセス分散をする
もっとも単純にアクセスを振り分ける方法として,DNS(Domain Name System)の仕組みを活用した方法があります。
DNSラウンドロビンという方法です。
DNSはホスト名に対してIPアドレスを返す仕組みになっていますが,1つのホストに対して複数のIPアドレスを登録することで,複数のIPアドレスをブラウザに返すことができます。
また,この複数のIPアドレスの順番はアクセスする度に変わるので,実際にアクセスをうけるサーバーはアクセスの度に変わるようになります。
この仕組みを使うことで,より多くのアクセスを受けることができるシステムを構築することができます。
例えば,http://foobar.comにアクセスした場合,返されるIPアドレスの順序によって,Server AとServer Bにそれぞれアクセスが分散されるようになっています(図1)。
それでは,DNSラウンドロビンで返したIPアドレスを持っているサーバーがアクセスできない状態になったらどうなるのでしょうか?
この問題に関しては,ブラウザ側で実装をしてくれています。
複数のIPアドレスを返された場合,接続できるまでアクセスをトライし続けてくれるようになっています。
そのため片方のサーバーが落ちてしまった際も,アクセスができなくなってしまうということは起きません。
しかし,1台だけサービスから外してシステムのメンテナンスを行う際はやはり手間になってまいます。DNSのレコードを 書き換えて,反映をまってという流れになるので,手軽にメンテナンスができる環境とは言い難いでしょう。
バランシングの基本,L4ロードバランサを利用する
さて,サーバー毎のアクセス分散において本命の技術です。ロードバランサ(負荷分散装置)をつかって,サーバーに対してのアクセスを振り分けます。
ここで紹介するのはL4ロードバランサで,OSI階層モデルで言われる第4層(トランスポート層)のレイヤーでアクセスを分散させる装置です。
アクセスをするためのグローバルIPアドレスはロードバランサが保持しています。各サーバーはローカルIPアドレスを保持していて,NATさせてアクセスを分散させます(図2)。
分散の方法は様々な方法を選択することができますが,Least Connectionと呼ばれる方法が一般的です。
これは各サーバーのセッション数を調べ,セッション数がもっとも少ないサーバーに対してアクセスを分散させる方式です。
片方のサーバーだけアクセスを分散させない状態にすることもでき,システムのメンテナンスもやりやすいと思います。
サーバーの障害時もロードバランサに検知させることができます。
ロードバランサからWebサーバーに対して,サービスを可能かどうかチェックをします。
その時,サービスができない状態であれば分散の対象から外してしまい,ほぼサービスを停止させずにすませることができます。
ロードバランサは高価なアプライアンス製品もありますが,Linuxで構築することも可能です。
LVS(Linux Virtual Server)と呼ばれる技術で,ここ最近で注目も高まってきています。
またロードバランサ自体も,VRRPDを使うことで冗長化することができますので,ロードバランサが落ちてしまったときもFailoverをしてサービスを稼働し続けることが可能です。


