ロードバランサ実践編&サーバクラスタ構築のコツ – 「さくらのクラウド入門」(5)

こんにちは、さくらインターネット クラウドチームの大喜多です。

「さくらのクラウドでどういうことが出来るのかを知りたい」というご要望にお応えし、「さくらのクラウド入門」と題しまして
さくらのクラウドの基本的な使い方をご説明していきたいと思います。今回は第4回「ロードバランサの仕組み」の続きです。実際にロードバランサーとサーバーを構築して高可用性Webシステムを構築していく手順をご説明します。また、クラウド利用者の視点から、クラウド上にサーバクラスタを構築する際に留意すべきポイントについてもご説明します。

クラウド上に構築するクラスタリングシステム

本記事では、以下の構成でさくらのクラウド上にクラスタリングシステムを構築していきます。
cluster01

この構成を構築するうえでのポイントは以下の通りです。

・仮想サーバに複数の仮想NICをアタッチして、ネットワークの経路冗長をとる必要はない
・仮想サーバに複数の仮想ディスクをアタッチして、RAID構成とする必要はない
クラウド基盤側でネットワークやストレージについては無停止の設計がなされていますので、仮想サーバ側での考慮は不要です。

一方で、仮想サーバが収容されるホストサーバ上で障害が発生し仮想サーバが稼働不能になった場合は、別のホストサーバにて仮想サーバが再起動されるまでにサービス停止が伴います。Webサーバ1とWebサーバ2が同一のホストサーバに収容されていた場合、同時にダウンしてしまう可能性があります。

このような事態を避けるために、「さくらのクラウド」では、2台の仮想サーバが異なるホストサーバに収容されるように制御することが可能です。その手順については後述します。

また、ロードバランサーも冗長構成を選択し、作成するようにしてください。こちらはクラウド基盤側で両方同時にダウンすることがないように制御されますので、ユーザ側で意識すべき点は「冗長構成を選択する」のみです。

cluster02

ルータ+スイッチの作成

それではここから実際にコントロールパネルを使用して、システムを構築していく手順を解説します。

左メニューの「スイッチ」をクリックし、右上の「追加」をクリックします。
01

・任意の名前を入力します。本記事では「ルータ+スイッチ01」とします。
・「ルータ」項目にて、「はい」のラジオボタンをクリックします。
・右下の「作成」をクリックします。
02

作成が完了し、左メニューの「スイッチ」をクリックすると、スイッチ一覧に作成したルータ+スイッチが表示されます。
赤で囲んだ部分をダブルクリックし、詳細画面を表示します。
03

「IPアドレス」タブをクリックすると、ルータ+スイッチに割り当てられたグローバルIPアドレスの一覧が表示されます。今回は以下のスクリーンショットに記載の通り割り当てをおこないます。
04

ロードバランサの作成

左メニューの「ロードバランサ」をクリックし、右上の「追加」をクリックします。
05

・接続先スイッチは「ルータ+スイッチ01」を選択します。
・「冗長化」項目にて、「はい」のラジオボタンをクリックします。
・任意の名前を入力します。本記事では「ロードバランサ01」とします。
・右下の「作成」をクリックします。
06

webサーバ1の作成

左メニューの「サーバ」をクリックし、右上の「追加」をクリックします。
07

・サーバスペックは任意ですが、本記事では”コア・4GBメモリとします。
・アーカイブは、その時点でのCentOS6系最新版を選択します(本記事執筆時はCentOS6.8)
08

・「スイッチに接続」のラジオボタンをクリックします。
・接続先スイッチは「ルータ+スイッチ01」を選択します。
09

・IPアドレスは先ほど決めた「Webサーバ1のIPアドレス」を選択します。
・管理ユーザ(root)のパスワードを入力します(2回入力が必要です)。
・配置するスタートアップスクリプトにて「lb-dsr」を選択します。このスクリプトは、ロードバランサで採用しているDSR(Direct Server Return)に対応するための設定を自動で行うためのものです。
・ロードバランサのVIPに、先ほど決めた「VIP」を入力します。
10

タグ欄に「@group=a」を設定し、右下の「作成」をクリックします。
11

@groupタグは@group=a、@group=b、@group=c、@group=dの4種類が存在し、異なるタグを付与したサーバは必ず別のホストサーバにて起動されます。今回はこの機能を利用し、webサーバ1とwebサーバ2を別のホストサーバにて起動するようにします。

Webサーバ1の設定

webサーバ1にSSHログインし、以下のコマンドを入力してWebサーバである「Apache」をインストールします。

yum -y install httpd httpd-devel
service httpd start
chkconfig httpd on

実際にはここで作り込んだWebコンテンツをデプロイするところですが、本記事では簡易なindex.htmlを作成します。

vi /var/www/html/index.html

webサーバ1のindex.htmlは以下のようにします。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<img src="https://www.sakura.ad.jp/external_service/case.sakura.ad.jp/wp-content/uploads/2015/06/sakura_logo.png" alt="" border="0" />
</body>
</html>

webサーバ2の作成

webサーバ2はwebサーバ1をクローンして作成します。
左メニューの「サーバ」をクリックし、web01の行をダブルクリックします。
12

右上の「クローン」をクリックします。
13

サーバのクローン画面が表示されますので、下にスクロールさせます。
14

「別のストレージに収容する」にチェックを入れ、web01のディスクを選択します。
本設定を行うことで、web01とweb02のサーバは別のホストサーバ、web01とweb02のディスクは別のストレージに作成され、クラウド基盤上でハードウェア冗長を行うことが出来ます。
14n

・IPアドレスは先ほど決めた「Webサーバ2のIPアドレス」を選択します。
・管理ユーザ(root)のパスワードを入力します(2回入力が必要です)。
・任意のホスト名を入力します。本記事では「web02」とします。
15

・任意の名前を入力します。本記事では「web02」とします。
・タグ欄に「@group=a」を削除し、「@group=b」を追加します。
・右下の「作成」をクリックします。
16

サーバの詳細画面で、それぞれのwebサーバが別のホストサーバ上で稼働していることが確認できます。

web01

17

web02

18

また、ディスク一覧画面では、それぞれのwebサーバのディスクが別のストレージ上に作成されていることが確認できます。
19

また、web01とweb02にロードバランスされていることを確認するために、web02側のindex.htmlの内容を一部書き換えておきます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<img src="https://www.sakura.ad.jp/press/images/20120621_ASPIC01.jpg" alt="" border="0" />
</body>
</html>

ロードバランサの設定

ロードバランス対象のwebサーバ2台の作成が完了しましたので、ロードバランサの設定を行います。

左メニューの「ロードバランサ」をクリックし、ロードバランサ01の行をダブルクリックします。
20

「VIP設定」タブをクリックし、右下の「追加」をクリックします。
21

・VIPアドレスは、先ほど決めたVIPを入力します。
・webサーバですので、ポート番号は80とします。
・チェック間隔は10とします。
・ソーリーサーバは今回は設定しません。
・右下の「作成」をクリックします。
22

VIPのタブが作成されますので、クリックし、ロードバランス対象の実サーバを追加していきます。
右下の「追加」をクリックします。
23

・webサーバ1
24

・webサーバ2
25

実サーバ2台分の追加設定が完了したら、右上の「反映」をクリックします。
26

以上でロードバランサーの設定は完了です。

動作確認

ブラウザに「http://<VIP>/」を入力し、正しくwebページが表示されること、何回かリロードすると表示される画像が変化することを確認します。

いかがでしたでしょうか。このようにクラウド基盤上に仮想サーバと仮想ディスクを作成する際に考慮して配置しておくことで、より障害に強いシステムを構築することができます。