ロードバランサとクローン機能を使ってお手軽にスケールアウトしてみよう - 「楽しいさくらのクラウド」(12)

さくらのクラウドでは、既存のサーバから同じ仕様のサーバを複製できるクローン機能や、同じ内容のディスクを複製するコピー機能が簡単に利用できます。今回は、急激にサーバへのアクセスが増加しサーバを追加するケースを例に、「ロードバランサ」アプライアンスと「クローン機能」を組み合わせたスケールアウトの手順を解説します。

1. 今回の構成

今回は、初期状態として以下の構成を想定します。

「スイッチ+ルータ」を作成し、その配下に1台のロードバランサと1台のウェブサーバが接続されています。
※「スイッチ+ルータ」の作成やネットワーク構成の操作方法については、公式マニュアルやさくらのナレッジ「ルータ+スイッチを使ったネットワークを構築してみよう」が参考になります。
アクセスが閑散としている場合はこの構成で運用しますが、アクセスの増大により1台のウェブサーバでは捌ききれなくなった場合は平行してウェブサーバを追加し、ロードバランサによる負荷分散を図ります。

このように、同一の性能を持つ機器を追加して負荷を分散させることを「スケールアウト」と呼びます。さくらのクラウドでは仮想的にスイッチやサーバを組み合わせてネットワークを作成することができるので、スケールアウトさせる場合も素早く構成が可能であり、物理環境のようにあらかじめ機材を用意する必要もありません。スケールアウトによる負荷分散は、クラウドのメリットをより活用することができる手法と言えます。

2. ロードバランサの設定

最初にロードバランサの設定を行います。作成したロードバランサは、上部メニュー「アプライアンス」をクリックし、左側のメニューから「ロードバランサ」を選択します。ここで作成済みのロードバランサの一覧が表示されるので、該当のロードバランサ行をダブルクリックします。

ロードバランサの情報画面が表示されるので、上部の「VIP設定」タブをクリックします。VIPは外部からの接続を受け持つ仮想IPアドレス(Virtual IP address)のことで、このIPアドレスへの接続がロードバランサにより配下の複数のサーバに分散されます。
初期状態では何も設定されていないので、右下の「追加」ボタンをクリックし、VIPの追加作業を始めます。

設定ダイアログボックスが表示されるので、ここでVIPを設定します。今回の構成例では以下の値を入力しました。

VIPアドレス 「ルータ+スイッチ」で払い出されたIPアドレスのうち1個をロードバランサが受け持つ仮想IPアドレスに割り当て、そのIPアドレスを入力します。
ポート番号 仮想IPアドレスで着信を受けるポート番号を設定します。今回はロードバランシング先はウェブサーバのため「80」を設定します。
チェック間隔 実サーバの死活監視を実行する間隔を秒数で設定します。今回はデフォルトの「10」(10秒)を設定しました。

設定が完了すると、VIP設定のリストに今回設定したVIP設定が追加されます。続いて、VIPに着信した接続の振り分け先となる実サーバを設定します。VIPごとにタブが追加されるので、今回設定したVIPのタブをクリックします。

この画面では設定済みの実サーバのリストが表示されますが、こちらも初期状態ではひとつも設定されていないので「追加」ボタンをクリックして追加を行います。

設定ダイアログボックスが表示されるので、ここで実サーバの情報を設定します。今回の構成例では以下の値を入力しました。

IPアドレス ロードバランシング先のサーバ(今回はルータ+スイッチ配下のウェブサーバ)のIPアドレスを設定します。
監視方法 IPアドレス、ポート番号で指定したロードバランシング先サーバの監視方法を設定します。この監視設定で異常のあるサーバは振り分け先から除外されます。今回はウェブサーバなので監視方法に「http」を指定し、監視対象パスとレスポンスコードはそれぞれ「/」と「200」を設定しました。

設定が完了すると、VIP設定のリストに今回設定したVIP設定が追加されます。

なお、ロードバランサはコントロールパネルでの一連の設定後に実際のロードバランサに設定を投入する仕組みとなっているので、「反映」ボタンをクリックして設定内容を反映させます(まだ起動していない場合は電源操作メニューより「起動」を選択してください)。

設定完了後、仮想IPアドレスとして設定したIPアドレスに接続すると、実サーバとして登録した1台のウェブサーバからの応答としてウェブページが表示されます。

3. 1台目のウェブサーバの設定

さくらのクラウドで提供するロードバランサはDSR方式で動作するため、ロードバランシング先のサーバではループバックアドレスに仮想IPアドレスを設定する必要があります。1台目のウェブサーバでは、クローンにより追加するウェブサーバのテンプレートも兼ねてこの設定を投入しておきます。
※以下の例では、CentOS6系を想定した手順とします。

sysctl.confへの設定追加

ループバックアドレスに設定した仮想IPアドレスでARPリクエストに応答しないようにカーネルパラメータを設定します。/etc/sysctl.confファイルに以下の2行の設定を追記します。

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

設定後、"sysctl -p"コマンドで設定を反映します。

lo:0デバイスの作成

新たにlo:0デバイスを作成し、仮想IPアドレス(今回の構成例では203.0.113.8)を設定します。/etc/sysconfig/network-scripts/ifcfg-lo:0ファイルを新規に作成し、以下の内容を記載します。

DEVICE=lo:0
IPADDR=仮想IPアドレス
NETMASK=255.255.255.255

設定後、"ifup lo:0"コマンドで設定を反映します。

その他の設定

サーバとして必要なサービスの起動設定やコンテンツ、データの転送を行います。今回の例ではウェブサーバのため、Apacheを動作させ、コンテンツを公開ディレクトリに転送させておきます。

3. ウェブサーバを追加(スケールアウト)してみる

さて、これまでの作業で冒頭の図の通りの最小構成の準備が整いました。ここからはウェブサーバを追加し、スケールアウトを行います。

サーバのクローン

クローン機能により、現在は1台のみとなっているウェブサーバをクローンし、2台、3台と増やします。クローンしたいサーバ(ここでは作成済みのウェブサーバ)のサーバ詳細画面を開き、上部にある「クローン」ボタンをクリックします。

クローンボタン押下後は新規サーバ作成時と似た画面が表示されますが、サーバのスペックや接続するディスクのソース、NICの接続先などはクローン元のサーバと同じものがあらかじめ指定されています(もちろん、環境に応じて変更することも可能です)。
ただし、ディスクは同じ内容のものがコピーされるとは言え、ネットワーク設定も同様にコピーされてしまうのでこのまま起動するとIPアドレスが重複したサーバが2台存在してしまうことになります。
そこで、サーバ新規作成時と同様にクローン作成画面でもディスク修正機能が使用できるので、今回は「ルータ+スイッチ」で使用可能なIPアドレス帯から未使用のものを割り当てることにします。もちろん、ホスト名やrootパスワードもクローン元のものから変更することが可能です。

各項目を入力後、「作成」ボタンをクリックし、クローンしたサーバの作成を開始します。

ロードバランサへの実サーバの登録

クローンしたサーバを起動し、1台目のサーバと同様にロードバランサに実サーバとして登録します。登録後は「反映」ボタンをクリックし、ロードバランサへの設定内容の反映を行います。しばらくして、2台目のサーバのステータス欄も「UP」状態になれば成功です。

ロードバランシングの確認

では早速、仮想IPアドレス宛てにウェブブラウザからアクセスし、ロードバランシングされることを確認してみましょう。
ここでは実際に応答している実サーバがどちらか分かるように、以下のようなCGIスクリプトを公開ディレクトリ以下に設置しました(あらかじめ公開ディレクトリ内のCGIスクリプト実行を許可しておく必要があります)。

#!/bin/sh
echo "Content-Type: text/html"
echo
echo \<h1\>`hostname`\</h1\>

このスクリプトにアクセスするたびに表示されるホスト名(web01、web02)が変化し、ロードバランシングされていることが確認できました。あとは同様にクローン作成・ロードバランサへの実サーバ登録の操作でどんどんスケールアルトすることが可能になります。

4. おわりに

今回はウェブサーバをスケールアウトする際の、ごく単純な場合を例として解説しました。もちろんサーバはウェブサーバに限らずロードバランシングが可能ですし、APIを使用することでクローン作成から実サーバ登録までを自動化することも可能です。
さくらのクラウドではあらかじめ用意された便利なアプライアンスを提供し、APIによる自動化・省力化もご提案できます。ぜひお客様のビジネスにお役立てください。