Top/技術情報/高信頼性のWebサーバを作る

Ultra Monkeyでロードバランス&クラスタリング

Ultra Monkeyというプログラム群を使い、4台の Linuxサーバで Active-Standby式のロードバランサと Webサーバのクラスタを構築する。

Ultra Monkeyについてはこちらを参照のこと。

構築対象

  • サーバ(今回のケースでは4台)
  • RedHat9
  • Ultra Monkey 2.0.1

以下の図のように、4台のサーバのうち、2台をダイレクタ(≒ロードバランサ)、2台を Webサーバとする。
ダイレクタの 1台(ここではバックアップ機)はホットスタンバイとなる。

active.gif
standby.gif

インストール手順

ダイレクタ、実サーバ共に普通にインストール(ダイレクタには念のためカーネル開発パッケージを入れておいた)。最終的な構成はともかく 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アドレス+ポート番号で接続するノードを固定できるものの、そのノードがダウンした時はセッションが切れてしまうため、何のためのクラスタリングか、という話になってしまう。


リロード   新規 編集 凍結解除 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2020-08-27 (木) 21:56:40