heartbeat-ldirectordに複数の仮想IPを設定

heartbeatのバランサで複数の仮想IPを設定する方法を調べてみました。
あまりやろうと思う人は居ないと思いますが、海外フォーラムを漁ってもなかなか見つからなかったので書いておきます。

今回は例として既に仮想IP10.0.0.3を設定し稼働している環境に仮想IP10.0.0.4を追加します。

ldirectordの設定

ldirectord.cfの末尾にバランサの設定を追加します。

# vi /etc/ha.d/ldirectord.cf
virtual=10.0.0.3:80
	fallback=127.0.0.1:80
	real=10.0.0.5:80 gate 5
	real=10.0.0.6:80 gate 5
	service=http
	request="check.html"
	receive="OK"
	scheduler=lc
	protocol=tcp
	checktype=negotiate
	checkport=80

virtual=10.0.0.4:80
	fallback=127.0.0.1:80
	real=10.0.0.7:80 gate 5
	real=10.0.0.8:80 gate 5
	service=http
	request="check.html"
	receive="OK"
	scheduler=lc
	protocol=tcp
	checktype=negotiate
	checkport=80

セカンダリLVSも同じように設定します。

haresourcesの設定

haresourcesに仮想IPの設定を追加します

# vi /etc/ha.d/haresources
lvs1 MailTo::info@example.com IPaddr2::10.0.0.3/24/eth0:0 IPaddr2::10.0.0.4/24/eth0:1 ldirectord

セカンダリLVSも同じように設定します。
1つの設定で書くのがポイントです。
lvs1 MailTo::info@example.com IPaddr2::10.0.0.3/24/eth0:0 ldirectord
lvs1 MailTo::info@example.com IPaddr2::10.0.0.4/24/eth0:1 ldirectord
というように設定を2つに分けることはできません。

設定反映

heartbeatを再起動すればharesourcesの設定が反映されるのですが、既に稼働している環境でそんなことはできません。
今回はフェイルオーバーした際にharesourcesが読み込まれるのを利用して設定反映を行います。
まずはプライマリLVSを落とします。

# /etc/rc.d/init.d/heartbeat stop

フェイルオーバーしたセカンダリLVSに複数の仮想IPが振られていることを確認します。

# ifconfig
eth0:0	Link encap:Ethernet HWaddr 00:07:32:12:8F:05
	inet addr:10.0.0.3 Bcast:10.0.0.255 Mask:255.255.255.0
	UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
	Memory:fd6c0000-fd6e0000

eth0:1	Link encap:Ethernet HWaddr 00:07:32:12:8F:05
	inet addr:10.0.0.4 Bcast:10.0.0.255 Mask:255.255.255.0
	UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
	Memory:fd6c0000-fd6e0000

プライマリLVSにフェイルバックさせ、複数の仮想IPが振られていることを確認します。

# /etc/rc.d/init.d/heartbeat start
# ifconfig
eth0:0	Link encap:Ethernet HWaddr 00:07:32:12:8F:5F
	inet addr:10.0.0.3 Bcast:10.0.0.255 Mask:255.255.255.0
	UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
	Memory:fd6c0000-fd6e0000

eth0:1	Link encap:Ethernet HWaddr 00:07:32:12:8F:5F
	inet addr:10.0.0.4 Bcast:10.0.0.255 Mask:255.255.255.0
	UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

これで設定完了です。
いつまで経っても仮想IPが振られない場合、一度振られた仮想IPが剥がれてしまった場合はharesourcesの設定を確認してください。

RHEL5にheartbeat-ldirectordをインストール

RHEL5にheartbeat-ldirectordをインストールしようとしたら少しつまずいたのでメモ。
既にheartbeatのインストールは完了してるのを前提に書きます。


ipvsadmをインストール

# wget ftp://ftp.ntua.gr/pub/linux/centos/5.5/os/x86_64/CentOS/ipvsadm-1.24-10.x86_64.rpm
# rpm -ivh ipvsadm-1.24-10.x86_64.rpm

heartbeat-ldirectordをインストール

# rpm -ivh  heartbeat-ldirectord-2.1.4-1.x86_64.rpm

エラー: 依存性の欠如:
        perl(Mail::Send) は heartbeat-ldirectord-2.1.4-1.x86_64 に必要とされています
        perl-Authen-Radius は heartbeat-ldirectord-2.1.4-1.x86_64 に必要とされています
        perl-MailTools は heartbeat-ldirectord-2.1.4-1.x86_64 に必要とされています
        perl-Net-IMAP-Simple は heartbeat-ldirectord-2.1.4-1.x86_64 に必要とされています
        perl-Net-IMAP-Simple-SSL は heartbeat-ldirectord-2.1.4-1.x86_64 に必要とされています
        perl-POP3Client は heartbeat-ldirectord-2.1.4-1.x86_64 に必要とされています
        perl-ldap は heartbeat-ldirectord-2.1.4-1.x86_64 に必要とされています
        perl-libnet は heartbeat-ldirectord-2.1.4-1.x86_64 に必要とされています

なんか色々と足りないようです。

epelをレポジトリに追加し幾つかのソフトウェアをインストール

# wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# rpm -ivh epel-release-5-4.noarch.rpm

# yum -y install perl-Mail-POP3Client.noarch
# yum -y install perl-MailTools.noarch
# yum -y install perl-Authen-Radius.noarch

perl-ldapをインストール

# wget http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc6/x86_64/RPMS.dries/perl-ldap-0.33-1.fc6.rf.noarch.rpm
# rpm -ivh perl-ldap-0.33-1.fc6.rf.noarch.rpm

perl-Net-IMAP-Simple-SSLをインストール

# wget http://download.fedora.redhat.com/pub/epel/testing/5/i386/perl-Net-IMAP-Simple-SSL-1.3-2.el5.noarch.rpm
# rpm -ivh perl-Net-IMAP-Simple-SSL-1.3-2.el5.noarch.rpm 

perl-libnetはperl本体に入っているらしいので、--nodepsを付けて強制的にインストールします。

sudo rpm -ivh heartbeat-ldirectord-2.1.4-1.x86_64.rpm --nodeps