ライブドアテクノロジーセミナーに行ってきましたよ。
id:naoyaさんは LVS++という話 でしたが、自分も 1年ほど前に、某サイトの負荷分散を LVS + Ultra Monkey (heartbeat + ldrectord) でやったので、社内 Wiki に書いてたメモを晒しておきます。
# 今なら heartbeat じゃなくて keepalived が普通なのかも知れず、情報が古めの可能性はあります
という構成。
LVS と Real Server を別にするのはちょっとコスト的にもったいなかったため、Director と Real Server を同一マシンに乗せる形に。http://ultramonkey.jp/2.0.1/topologies/sl-ha-lb-eg.html の形態。
帰りのパケットは Director を経由せず、直接クライアントに帰るいわゆる DSR です。
# 以下、IPアドレス、ホスト名は実際とは変えてあります。
www 192.168.0.10(VIP) www1 | | www2 www3 +----192.168.0.7-----+ +-----192.168.0.8----+ +-----192.168.0.9----+ | Director (active) | | Director (standby) | | httpd | | httpd | | httpd | +--------------------+ +--------------------+ +--------------------+ +-----192.168.0.11-----+ | PostgreSQL | +----------------------+
OS は CentOS-4 (kernel-2.6.9)。
Heartbeat, ipvsadm は www1 と www2 のみにインストール / 設定。arptables の設定は3台共通。
- Heartbeat は Ultra Monkey のサイトから RHEL3 用の SRPMS をリビルド
- ipvsadm は http://www.linuxvirtualserver.org/ から Kernel-2.6 用の ipvsadm-1.24-6.src.rpm をリビルド
- http://www.linuxvirtualserver.org/software/ipvs.html#kernel-2.6
- RHEL3 用の 1.21 は Kernel-2.4 用で CentOS 4 には使用できないので注意
[追記] 現在は、CentOS-4 extras に heartbeat, ipvsadm のパッケージがあります。
インストールされた RPM。
- heartbeat-1.2.3.cvs.20050927-1.centos.um.1
- heartbeat-pils-1.2.3.cvs.20050927-1.centos.um.1
- heartbeat-ldirectord-1.2.3.cvs.20050927-1.centos.um.1
- heartbeat-stonith-1.2.3.cvs.20050927-1.centos.um.1
- ipvsadm-1.24-6
- arptables-noarp-addr-0.99.1-1.rh.el.um.1
- arptables_jf-0.0.8-2
# /etc/ha.d/haresources www1.example.com 192.168.0.10 \ ldirectord::ldirectord.cf \ IPaddr::192.168.0.10/24/eth0
ldirectord で、VIP で公開するサービスと Real Server の設定。
# /etc/ha.d/ldirectord.cf # Global Directives checktimeout=10 checkinterval=5 autoreload=no logfile="local0" quiescent=yes # Virtual Server for HTTP virtual=192.168.0.10:80 real=192.168.0.7:80 gate real=192.168.0.8:80 gate real=192.168.0.9:80 gate service=http request="ping.cgi" receive="ok" scheduler=rr #persistent=600 protocol=tcp checktype=negotiate virtual=192.168.0.10:443 real=192.168.0.7:443 gate real=192.168.0.8:443 gate real=192.168.0.9:443 gate service=https request="ping.cgi" receive="ok" scheduler=rr #persistent=600 protocol=tcp checktype=negotiate
Directorの死活監視 (heartbeat) 設定。
# /etc/ha.d/ha.cf logfacility local0 # bcast eth0 ucast eth0 192.168.0.8 <-- 相手の IP addr auto_failback off node www1.example.com node www2.example.com respawn hacluster /usr/lib/heartbeat/ipfail
heartbeat の認証情報。
# /etc/ha.d/authkeys auth 2 2 sha1 xxxxxxxx
arptables は、Virtual IP addr に対する arp に、リアルサーバが反応しないようにするために使う。
# /etc/sysconfig/arptables *filter :IN ACCEPT [10:280] :OUT ACCEPT [1:28] :FORWARD ACCEPT [0:0] [6:168] -A IN -d 192.168.0.10 -j DROP [0:0] -A OUT -s 192.168.0.10 -o eth0 -j mangle --mangle-ip-s 192.168.0.7 <-- 自分の real IP addr COMMIT
Director が Active / Standby になったタイミングで、arptables の設定を変更するために
# ( cd /etc/ha.d/rc.d && ln -s arptables-noarp-addr_takeip local_takeip; ) # ( cd /etc/ha.d/rc.d && ln -s arptables-noarp-addr_giveip local_giveip; )
を実行。
あとは、起動時に heartbeat, arptables_jf が起動するように設定。ldirectord は heartbeat 経由で起動されるので、自動起動させない。
# chkconfig --level 345 heartbeat on # chkconfig --level 345 arptables_jf on # chkconfig --level 345 ldirectord off