小型/堅牢/メンテナンスフリー OpenBlockS 600の限界に挑戦

第2回LVSによる堅牢で安価なロードバランサ(前編)

はじめに

OpenBlockS 600の最大の特長は堅牢性にあります。筐体のみで排熱するよう設計されており、ファンなどの可動部品は搭載していません。CPUをはじめすべての部品を1枚の基板に実装した単純な構造で、故障の要因を徹底的に排除しています。このように故障しにくいハードウェアこそ、ロードバランサに向いていると言えましょう。

本記事では、OpenBlockS 600とオープンソースソフトウェア(OSS)を利用した、堅牢で安価なロードバランサの構築をめざします。前編では、OpenBlockS 600へのDebianのインストールから、Webサーバとクライアントの準備までを説明をします。後編では、LVS(Linux VirtualServer)の設定と動作確認、性能測定をする予定です。

LVS

LVSは、Linuxで動いているロードバランサとサーバの集まりです。サービスの受け手側からは、1台のサーバに見えます。このサーバを仮想サーバ、仮想サーバ内のサーバをリアルサーバと呼びます。

ネットワーク構成図図1をご覧ください。3台のリアルサーバrealserver1、realserver2、realserver3とロードバランサobs600(OpenBlockS 600)で仮想サーバとなっています。クライアントclientはobs600の仮想IPアドレス(192.168.253.120)へ接続して、サービスを受けます。

図1 ネットワーク構成図
図1 ネットワーク構成図

ロードバランサobs600は、クライアントからの要求をリアルサーバに振り分けます。つまり、リアルサーバの負荷分散をしています。また、ダウンしたリアルサーバからは応答しないようにします。リアルサーバがすべてダウンしない限り、サービスを受けることができます。

これからWebサーバのLVSをIPVSとKeepalivedで作ってみましょう。

IPVS
IPVS(IP Virtual Server)はLinuxカーネルに実装されたロードバランサです。OpenBlockS 600のカーネルはIPVSを有効にしているので、カーネルの再構築は必要ありません。IPVSを使うためには、ipvsadmユーティリティが必要です。
Keepalived
Keepalivedはリアルサーバがダウンしていないか監視します。IPVSと連携して、ダウンしたリアルサーバを除いた他のリアルサーバでサービスするようにします。

OpenBlockS 600にDebianをインストール

それでは、ネットワーク構成図(図1)中のホストを作っていきましょう。まずはOpenBlockS 600から始めます。

OpenBlockS 600の標準OSはSSD/Linuxですが、その他のOSとしてDebian、Fedora、Ubuntuで動作させることもできます。ここではDebianをインストールします。

コンパクトフラッシュの用意

Debianはコンパクトフラッシュ(CF)にインストールします。標準添付のCFを利用するか、専用オプションのCFを用意してください。標準添付のCFを使う場合はCF上のデータが消えますので、バックアップをとることをお勧めします。

Webインターフェースの[システム][メンテナンス][CF内データのバックアップ]からバックアップできます。

ファイルのダウンロード

必要なファイル表1ぷらっとホームのWebページからダウンロードしてください。

USBメモリの準備

容量128Mバイト以上のUSBメモリを用意してください。

フォーマット

ファイルシステムはFAT、ext3、ext2のいずれかでフォーマットしてください図2はext3の例⁠⁠。

図2 ext3ファイルシステムの生成
# mke2fs -j -b 4096 /dev/sda1
ボリュームラベル

ボリュームラベルを「MSF」に設定してください。WindowsではUSBメモリのプロパティで設定できます図3はext3の例⁠⁠。

図3 ext3ファイルシステムのラベルの変更
# e2label /dev/sda1 MSF
ファイルのコピー

USBメモリのルートディレクトリにディレクトリ「msf」を作成します。ディレクトリ「msf」に、上でダウンロードしたファイル表1をコピーしてださい。

表1 Debianのインストールに必要なファイル
ファイルファイル名
OS イメージ(Debian)lenny-powerpc-obs600-20100119-00.tar.gz
カーネルuImage.initrd-cfboot
カーネルモジュールkern.tgz
半自動インストール用スクリプトmsf_init.sh

シリアル接続

Tera Termやminicomなどの端末エミュレータソフトウェアの動作するホストを用意してください。OpenBlockS 600にシリアル接続します。端末エミュレータの設定値は表2のとおりです。

表2 端末エミュレータの設定値
項目設定値
Baud rate115,200bps
Data8bit
Paritynone
Stop bits1bit
Flow Controlnone

インストールの実行

OpenBlockS 600の電源が切れていることを確認し、USBメモリを挿入します。電源を入れてください。数分して、ステータスインジケータが全色点滅したら、Debianのインストールはおしまいです。OpenBlockS 600の電源を切って、USBメモリを抜いてください。

端末エミュレータの画面にインストール中の様子が出力されていることを確認してください。何も出力されていなかったり、文字化けしている場合には、設定値を確認したり、端末エミュレータを再起動してみましょう。

再起動後の操作

OpenBlockS 600の電源を入れ、ログインプロンプトが表示されたらrootでログインします。パスワードはrootです。カーネルモジュールの依存性リストを更新します図4⁠。

図4 カーネルモジュールの依存性リストの更新
# depmod -a

カーネルとカーネルモジュールの更新

これでOpenBlockS 600がDebianで動くようになりました。これからはDebianの作法にしたがって、パッケージのインストール、削除、アップデートなどが実行できます。しかしながら、カーネルとカーネルモジュールはぷらっとホームが提供しているもので、Debianのパッケージではありません。

カーネルにセキュリティフィックスなどがあった場合には、ぷらっとホームのページからカーネルとカーネルモジュール(表1)をダウンロードしてください。

カーネル(uImage.initrd-cfboot)をルートディレクトリに置き、カーネルモジュール(kern.tgz)はルートディレクトリで展開して、再起動してください。

OpenBlockS 600へのipvsadmとkeepalivedの導入

一時的なネットワークの設定

Debianのパッケージを取得するために、一時的にインターネットに接続できるよう設定してください。イーサネットインターフェースeth0でDHCPサーバからIPアドレスを取得し、プロキシサーバを設定する例を図5に示します。

図5 一時的なネットワークの設定
# dhclient eth0
# export ftp_proxy=http://proxy.example.jp:8080
# export http_proxy=http://proxy.example.jp:8080

Debianの更新

すでにインストールされているパッケージを更新します図6⁠。

図6 Debianの更新
# apt-get update
# apt-get upgrade

ipvsadmとkeepalivedパッケージのインストール

ipvsadmとkeepalivedパッケージをインストールします図7⁠。keepalivedパッケージをインストールすると、依存性によりipvsadmパッケージもインストールされます。

図7 ipvsadmとkeepalivedパッケージのインストール
# apt-get install keepalived

OpenBlockS 600のネットワーク設定

一時的なネットワークの設定の無効化

上記の一時的なネットワークの設定を無効にしてください。

/etc/resolv.conf

ファイル/etc/resolv.confを空にします。

/etc/network/interfaces

イーサネットインターフェースeth0とeth1をdownします図8⁠。

図8 イーサネットインターフェースのdown
# ifdown eth0
# ifdown eth1

ファイル/etc/network/interfacesをリスト1のとおり変更してください。eth0はクライアント側です。eth0:120は仮想IPアドレスです。eth1は仮想サーバ側です。ゲートウェイは設定しません。

リスト1 /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.253.254
netmask 255.255.255.0
auto eth0:120
iface eth0:120 inet static
address 192.168.253.120
netmask 255.255.255.0
auto eth1
iface eth1 inet static
address 172.16.14.120
netmask 255.255.255.0

イーサネットインターフェースeth0、eth0:120、eth1をupします図9⁠。

図9 イーサネットインターフェースのup
# ifup eth0
# ifup eth0:120
# ifup eth1
/etc/hostname
ファイル/etc/hostnameにホストobs600を設定します。

IPフォワーディングの有効化

IPフォワーディングを有効にするために、ファイル/etc/sysctl.confのnet.ipv4.ip_forward=1のコメントをはずしますリスト2⁠。システムに反映するために図10のとおりsysctlコマンドを実行します。

リスト2 /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward = 1
図10 IPフォワーディングの有効化
obs600# sysctl -p
net.ipv4.ip_forward = 1

IPフォワーディングが有効か無効か確認するには図11のとおりsysctlコマンドを実行します。変数net.ipv4.ip_forwardの値が1なら有効、0なら無効です。

図11 IPフォワーディングの有効/無効の確認
obs600# sysctl net.ipv4.ip_forward

パケットフィルタの設定をしていないので、OpenBlockS 600は素通しのローカルルータとなっています。LVSが動作するまで、パケットフィルタは設定しないほうがよいでしょう(LVS-mini-HOWTO: 2.4. Test without filter(iptables)rules⁠⁠。

リアルサーバの構築

リアルサーバを3台用意してください。ここではOSはDebianとします。ホスト名はrealserver1、realserver2、realserver3です。参考までに、リアルサーバのハードウェア仕様を表3に示しました。

表3 ハードウェア仕様
CPUIntel Core2 Quad Q9300 2.50GHz
メモリ1Gバイト
イーサネット1000Base-T(Intel 82573L)

ネットワーク設定

リアルサーバのネットワーク設定は表4のとおりです。デフォルトゲートウェイがobs600のeth1のIPアドレスになっていることに注意してください。

表4 リアルサーバのネットワーク設定
ホスト名IPアドレスデフォルトゲートウェイ
realserver1172.16.14.121/255.255.255.0172.16.14.120
realserver2172.16.14.122/255.255.255.0172.16.14.120
realserver3172.16.14.123/255.255.255.0172.16.14.120

Apacheのインストール

apache2パッケージをインストールします。

クライアントの構築

クライアントを1台用意してください。OSはリアルサーバと同じDebianとします。ホスト名はclientです。ハードウェア仕様はリアルサーバと同じです(表3⁠⁠。

ネットワーク設定

クライアントのネットワーク設定は表5のとおりです。デフォルトゲートウェイはobs600のeth0のIPアドレスになります。

表5 クライアントのネットワーク設定
ホスト名IPアドレスデフォルトゲートウェイ
client192.168.253.1/255.255.255.0192.168.253.254

cURLのインストール

ブラウザの代わりとしてcURLを使います。もちろんブラウザを使ってもかまいません。curlパッケージをインストールします。

ApacheBenchのインストール

Apacheに付属しているベンチマークツールApacheBenchを使います。apache2-utilsパッケージをインストールします。

接続確認

クライアントclientからcurlコマンドでリアルサーバに接続して応答があるか確認してみましょう。

リアルサーバのコンテンツ

リアルサーバのコンテンツは、実運用時には、同じでなければなりません。そうでないと、ロードバランサの振り分け先によって表示されるページが異ってしまいます。この段階では、どのリアルサーバからの応答か区別したいので、別々のコンテンツを用意します。

ドキュメントルートに、ホスト名を記入したファイルindex.htmlを置きました。

cURLでの接続と応答

クライアントclientで図12のとおりcurlコマンドを実行してください。指定したURLのホストのホスト名が表示されれば、ネットワークの設定は正常です。

図12 リアルサーバへの接続確認
client$ curl http://172.16.14.121/
realserver1
client$ curl http://172.16.14.122/
realserver2
client$ curl http://172.16.14.123/

応答がない場合、obs600のIPフォワーディングが有効になっているか(図11⁠⁠、リアルサーバのデフォルトゲートウェイがobs600のイーサネットインターフェースeth1に向いているか(図1、表4⁠⁠、確認してください。

前編のまとめ

前編では、LVSのロードバランサとなるOpenBlockS 600にDebianをインストールする手順を説明をしました。また、リアルサーバとクライアントも用意しました。リアルサーバをWebサーバとして動作させ、クライアントから接続して、応答のあることを確認しました。残るはLVSの設定だけです。

後編では、LVSの設定をして、どのように動作するかを確認し、性能の測定をする予定です。

参考ページ

The Linux Virtual Server Project
URL:http://www.linuxvirtualserver.org/
IPVS Software
URL:http://www.linuxvirtualserver.org/software/ipvs.html
Keepalived
URL:http://www.keepalived.org/
他OSのインストール方法(OBS600)
URL:http://openblocks.plathome.co.jp/support/documentation/other_os.html
LVSで実現するロードバランサ
URL:http://lab.klab.org/wiki/LVSで実現するロードバランサ

おすすめ記事

記事・ニュース一覧