Ultra Monkeyでロードバランス&クラスタリング
Ultra Monkeyというプログラム群を使い、4台の Linuxサーバで Active-Standby式のロードバランサと Webサーバのクラスタを構築する。
Ultra Monkeyについてはこちらを参照のこと。
構築対象
- サーバ(今回のケースでは4台)
- RedHat9
- Ultra Monkey 2.0.1
以下の図のように、4台のサーバのうち、2台をダイレクタ(≒ロードバランサ)、2台を Webサーバとする。
ダイレクタの 1台(ここではバックアップ機)はホットスタンバイとなる。
インストール手順
ダイレクタ、実サーバ共に普通にインストール(ダイレクタには念のためカーネル開発パッケージを入れておいた)。最終的な構成はともかく FTPが使える状況にとりあえずしておく。
aptのインストール
FreshRPMSより、aptをダウンロード
# rpm -ivh apt-0.5.5cnc6-fr1.i386.rpm
/etc/apt/sources.listに以下 2行を追加
rpm http://apt.parrswood.manchester.sch.uk ultramonkey rh.9
rpm-src http://apt.parrswood.manchester.sch.uk ultramonkey rh.9
アップデート&チェック
# apt-get update
# apt-get check
Ultra Monkeyのインストール
Ultra Monkeyのサイトから一式ダウンロード、um4rh9というディレクトリにまとめておく。
カーネルの更新
# rpm -Fhv kernel*2.4.20-31.9.um.2.i686.rpm
カーネルソースの更新
# rpm -Uhv kernel-source-2.4.20-31.9.um.2.i386.rpm
perlモジュールのインストール
# apt-get install perl-Digest-HMAC
# apt-get install perl-Digest-SHA1
# apt-get install perl-Parse-RecDescent
# apt-get install net-snmp
Ultra Monkeyパッケージ群のインストール
# rpm -Uhv perl-Authen-SASL-2.03-1.rh.9.um.1.noarch.rpm \
perl-Convert-ASN1-0.16-2.rh.9.um.1.noarch.rpm \
perl-IO-Socket-SSL-0.92-1.rh.9.um.1.noarch.rpm \
perl-Mail-IMAPClient-2.2.7-1.rh.9.um.1.noarch.rpm \
perl-Net-SSLeay-1.23-1.rh.9.um.1.i386.rpm \
perl-XML-NamespaceSupport-1.08-1.rh.9.um.1.noarch.rpm \
perl-XML-SAX-0.12-1.rh.9.um.1.noarch.rpm \
perl-ldap-0.2701-1.rh.9.um.1.noarch.rpm \
heartbeat-1.0.4-2.rh.9.um.1.i386.rpm \
heartbeat-ldirectord-1.0.4-2.rh.9.um.1.i386.rpm \
heartbeat-pils-1.0.4-2.rh.9.um.1.i386.rpm \
heartbeat-stonith-1.0.4-2.rh.9.um.1.i386.rpm \
ipvsadm-1.21-1.rh.9.um.1.i386.rpm \
libnet-1.1.0-1.rh.9.um.1.i386.rpm
ここまできたら再起動
# /sbin/reboot
各種設定
/etc/sysconfig/networkや /etc/sysconfig/network-scripts/ifcfg-eth*を適切な内容に修正する。
- サンプルでは、外部公開用の仮想IPアドレスとリダイレクタの実IPとが同じセグメントのため、特に不都合はないようだが、今回の構築例では両者のセグメントが異なるため、ifcfg-eth*の NETWORKの値を仮想IPアドレスのセグメントを指定しないと期待した動作をしなかった。
ドキュメントに従って /etc/sysctl.confを変更する。
トポロジ解説ページのリンクをたどり、設定ファイル(4つ)を /etc/ha.d/にコピー、変更する。
authkeysはパーミッションを変更しておかないと起動時に怒られるので注意。
# chmod 600 /etc/ha.d/authkeys
iptablesの設定
# /etc/init.d/iptables stop
# iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.6.0/24
(他のルールも適宜追加)
# /etc/init.d/iptables save
# /etc/init.d/iptables start
もう一台のダイレクタは、再起動までしたら一台目の設定ファイルをコピーし、ネットワークと iptablesの設定をすれば OK。
Heartbeat起動!
# /etc/init.d/heartbeat start
動作確認
# /sbin/ifconfig
# /usr/sbin/ldirectord ldirectord.cf status
# /sbin/ipvsadm -L -n
マスタダイレクタのみ仮想インタフェースがあって、ldirectordが起動していて、IP Virtual Serverの出力が正しければ○(実サーバの設定がまだなら当然ダメですが)。
マスタダイレクタの hertbeatを止めると ldirectordプロセスも止まり、スレーブダイレクタの ldirectordプロセスが起動することを確認する。
【マスタ側】
# /etc/init.d/heartbeat stop
【スレーブ側】
# /sbin/ifconfig
# /usr/sbin/ldirectord ldirectord.cf status
# /sbin/ipvsadm -L -n
運用にあたって注意すること
Ulrta Monkeyのリダイレクタはいわゆるレイヤ4スイッチのため、URL引数で接続サーバを固定することはできない。ファイルベースのセッション管理の場合、NFS等で共有していないとセッションが引き継がれないため注意が必要。
ldirector.cfを変更することで IPアドレス+ポート番号で接続するノードを固定できるものの、そのノードがダウンした時はセッションが切れてしまうため、何のためのクラスタリングか、という話になってしまう。