== Ultra Moneky (heartbeat,ldirectord) [client] 10.1.1.24 | ------------------------------------------------------------------- | 10.1.1.10 (VIP for web) | | | | | |10.1.1.2(eth0) |10.1.1.3(eth0)       [LVS1] [LVS2]      |192.168.2.241(eth1) |192.168.20.109(eth1) | | | 192.168.2.240 (VIP for VRRP) | | | | | ---------------------------------------------------------------------------- | | | | | | |192.168.2.236(eth0) | 192.168.2.237(eth0) |192.168.2.238(eth0) [web1] [web2] [web3] == Install heartbeat 2回yumを実行 yum -y install heartbeat yum -y install heartbeat cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/. cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/. cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/. 外側と内側のケーブルが抜けた時を想定し、両インタフェースをucastで監視する。 [# test1] vi /etc/ha.d/ha.cf logfacility local0 ucast eth0 10.1.1.3 #<------- other server's IP ucast eth1 192.168.2.242 #<------- other server's IP auto_failback on node test1.com node test2.com respawn hacluster /usr/lib64/heartbeat/ipfail [# test2] vi /etc/ha.d/ha.cf logfacility local0 ucast eth0 10.1.1.2 #<------- other server's IP ucast eth1 192.168.2.241 #<------- other server's IP auto_failback on node test1.com node test2.com respawn hacluster /usr/lib64/heartbeat/ipfail chmod 600 /etc/ha.d/authkeys vi /etc/ha.d/authkeys auth 2 2 sha1 PASSWORD 以下のtest1.comはプライマリーにするサーバーを設定 vi /etc/ha.d/haresources test1.com ldirectord::ldirectord.cf IPaddr::10.1.1.10/24/eth0 IPaddr::192.168.2.240/24/eth1 == Insatall ldirectord yum install *ldirect* vi /etc/ha.d/ldirectord.cf checktimeout=10 checkinterval=5 autoreload=yes logfile="local0" quiescent=yes virtual=10.1.1.10:80 real=192.168.2.236:80 masq <- realサーバーがNATで返す。 real=192.168.2.237:80 masq real=192.168.2.238:80 masq service=http request="index.html" <-チェックファイル receive="ok"         <-返す内容 scheduler=wrr #persistent=600 protocol=tcp checktype=negotiate heartbeatで ldirectordが起動するので、ldirectordはOFFにしておく。 # chkconfig --list | grep ldirecto ldirectord 0:off 1:off 2:off 3:off 4:off 5:off 6:off # chkconfig --list | grep heart heartbeat 0:off 1:off 2:on 3:on 4:on 5:on 6:off 以下で起動 /etc/rc.d/init.d/heartbeat start 以下でインタフェースに割り振られたIPを確認 #ip addr show # ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.1.1.10:80 wrr -> 192.168.2.236:80 Masq 1 0 0 -> 192.168.2.237:80 Masq 1 0 0 -> 192.168.2.238:80 Masq 1 0 0 以下でweightを0にしてもセッションの継続は可、次回からのセッションが接続しなくなる ipvsadm -e -t 10.1.1.10:80 -r 192.168.2.236:80 -m -w 0 設定をかえたら以下で設定変更。 /etc/rc.d/init.d/ldirectord reload セッションがつながっている以外のサーバーの追加や削除をしてもセッションの継続は可 ただし以下のようにVIPやサービスを削除するとセッションが切れる。 ipvsadm -D -t 10.1.1.10:80 -s lc ipvsadm -d -t 10.1.1.10:80 -r 192.168.2.236:80 内側のサーバーからNATで外にアクセスしたい場合はMasqueradeの設定を以下のように/etc/rc.d/init.d/iptablesに設定する。 *nat :PREROUTING ACCEPT [60:3408] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [3:243] -A POSTROUTING -o eth0 -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [301:35162] -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -p esp -j ACCEPT -A INPUT -p ah -j ACCEPT -A INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p udp -m udp --dport 631 -j ACCEPT -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT LVS keepalivedとUltoraMonkeyの違い。 Keepalivedのバックアップ側がすでにipvsamの設定をもっているがheartbeatの場合は障害がおきてからivsamが切り替わる。LVS障害児には、keepalivedの方が切り替わりが早い。 Ultoramonkeyは障害児にエラーをユーザーに返さない。特にダウンロード系の不可分散の場合セッションがきれたさいのエラーをかえさず、ダウンロードだけが止まっている状態になる。ユーザーにサーバー障害を隠したいのであればUltoramonkeyはつかえるが、サービスによりけり。