ldirectord
heartbeat可以为许多不支持高可用的服务提供高可用服务,前面我们提到过keepalived实现lvs的高可用,那么现在我们来通过heartbeat+ldirectord来实现高可用lvs集群的架构。
规划
vip:10.211.55.24
rs1: 10.211.55.39
rs2: 10.211.55.40
node1: 10.211.55.45
node2: 10.211.55.46
配置lvs集群
rs1
1~]# cat rs.sh2#!/bin/bash34vip=10.211.55.245eth=lo:0678case $1 in9start)10echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore11echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore12echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce13echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce1415ifconfig $eth $vip broadcast $vip netmask 255.255.255.255 up16route add -host $vip dev $eth17;;18stop)19echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore20echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore21echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce22echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce2324ifconfig $eth down25route del -host $vip dev $eth26;;27status)28if ifconfig lo:0 | grep $vip &> /dev/null;then29echo 'ipvs is running.'30else31echo 'ipvs is stopped.'32fi33;;34*)35echo "Usage: `basename $0` {start|stop|status}"36exit37esac3839~]# ./rs.sh start40~]# yum install -y httpd41~]# echo "realserver 1" > /var/www/html/index.html42~]# service httpd startrs2
1~]# ./rs.sh start2~]# yum install -y httpd3~]# echo "realserver 2" > /var/www/html/index.html4~]# service httpd startnode1
1~]# ifconfig eth0:0 10.211.55.24 broadcast 10.211.55.24 netmask 255.255.255.255 up2~]# route add -host 10.211.55.24 dev eth0:03~]# ipvsadm -A -t 10.211.55.24:80 -s rr4~]# ipvsadm -a -t 10.211.55.24:80 -r 10.211.55.39 -g5~]# ipvsadm -a -t 10.211.55.24:80 -r 10.211.55.40 -g67测试lvs dr模型没问题8~]# route del -host 10.211.55.249~]# ifconfig eth0:0 down10~]# ipvsadm -Cnode2
1~]# ifconfig eth0:0 10.211.55.24 broadcast 10.211.55.24 netmask 255.255.255.255 up2~]# route add -host 10.211.55.24 dev eth0:03~]# ipvsadm -A -t 10.211.55.24:80 -s rr4~]# ipvsadm -a -t 10.211.55.24:80 -r 10.211.55.39 -g5~]# ipvsadm -a -t 10.211.55.24:80 -r 10.211.55.40 -g67测试lvs dr模型没问题8~]# route del -host 10.211.55.249~]# ifconfig eth0:0 down10~]# ipvsadm -C
配置ldirectord+heartbeart v2
ldirectord依赖于自己的配置文件生成ipvs规则,因此,定义集群rs都在配置文件中指定,而无须手动执行ipvsadm命令。
ldirectory能够依赖对rs的健康状态做检测,并能够实现按需添加或删除rs。
node1
1~]# rpm -ivh heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-gui-2.1.4-12.el6.x86_64.rpm2~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/3~]# cp /usr/share/doc/{ha.cf,authkeys} /etc/ha.d/4~]# chmod 600 /etc/ha.d/authkeys5~]# cat /etc/ha.d/authkeys6auth 271 crc82 sha1 HI!@@@93 md5 Hello!10~}# cat /etc/ha.d/ldirectord.cf11checktimeout=312checkinterval=113#fallback=127.0.0.1:8014autoreload=yes15logfile="/var/log/ldirectord.log"16emailalert="root"17#emailalertfreq=360018#emailalertstatus=all19quiescent=yes2021# Sample for an http virtual service22virtual=10.211.55.24:8023real=10.211.55.39:80 gate24real=10.211.55.40:80 gate25fallback=127.0.0.1:80 gate26service=http27request=".health.html"28receive="OK"29scheduler=rr30#persistent=60031#netmask=255.255.255.25532protocol=tcp33checktype=negotiate34checkport=803536~]# cat /etc/ha.d/ha.cf37crm on38logfile /var/log/ha-log39mcast eth0 225.0.12.1 694 1 040auto_failback on41node node142node node243ping 10.211.55.144~]# scp /etc/ha.d/{ha.cf,ldirectord.cf,authkeys} /etc/ha.d/45~]# service heartbeat start;ssh node2 "service heartbeart start"46~]# yum install -y httpd47~]# echo 'sorry server' > /var/www/html/index.html48~]# service httpd startnode2
1~]# yum install -y httpd2~]# echo 'sorry server' > /var/www/html/index.html3~]# service httpd start
我们需要配置的有两个资源,vip资源和ipvs资源,我们还需要配置排列约束和顺序约束。
查看结果
1 | [root@node2 heartbeat2]# ipvsadm -L -n |
2 | IP Virtual Server version 1.2.1 (size=4096) |
3 | Prot LocalAddress:Port Scheduler Flags |
4 | -> RemoteAddress:Port Forward Weight ActiveConn InActConn |
5 | TCP 10.211.55.24:80 rr |
6 | -> 10.211.55.39:80 Route 1 0 0 |
7 | -> 10.211.55.40:80 Route 1 0 0 |
8 | [root@node2 heartbeat2]# ifconfig eth0:0 |
9 | eth0:0 Link encap:Ethernet HWaddr 00:1C:42:E2:B9:94 |
10 | inet addr:10.211.55.24 Bcast:10.211.55.255 Mask:255.255.255.0 |
11 | UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 |
我们关闭连个节点的httpd
1 | [root@node2 heartbeat2]# ipvsadm -L -n |
2 | IP Virtual Server version 1.2.1 (size=4096) |
3 | Prot LocalAddress:Port Scheduler Flags |
4 | -> RemoteAddress:Port Forward Weight ActiveConn InActConn |
5 | TCP 10.211.55.24:80 rr |
6 | -> 10.211.55.39:80 Route 0 0 0 |
7 | -> 10.211.55.40:80 Route 0 0 0 |
8 | -> 127.0.0.1:80 Local 1 0 0 |
配置ldirectord+heartbeart v1
- node1
1~]# vim /etc/ha.d/ha.cf 去掉crm on2~]# cp /usr/share/doc/doc/heartbeat-2.1.4/haresources /etc/ha.d/3~]# vim /etc/ha.d/haresources4node1 10.211.55.24/24/eth0/10.211.55.24 ldirectord5~]# ll /etc/init.d/ldirectord6~]# scp /etc/ha.d/{ha.cf,haresources} node2:/etc/ha.d/7~]# service heartbeat start;ssh node2 'service heartbeat start'1[root@node1 heartbeat-2.1.4]# ifconfgi eth0:02-bash: ifconfgi: command not found3[root@node1 heartbeat-2.1.4]# ifconfig eth0:04eth0:0 Link encap:Ethernet HWaddr 00:1C:42:31:37:0C5inet addr:10.211.55.24 Bcast:10.211.55.24 Mask:255.255.255.06UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:178[root@node1 heartbeat-2.1.4]# ipvsadm -L -n9IP Virtual Server version 1.2.1 (size=4096)10Prot LocalAddress:Port Scheduler Flags11-> RemoteAddress:Port Forward Weight ActiveConn InActConn12TCP 10.211.55.24:80 rr13-> 10.211.55.39:80 Route 1 0 014-> 10.211.55.40:80 Route 1 0 0