Centos5.5 下 lvs+heartbeat+ldirectord
高可靠性集群
目标:实现业务的高可靠性
实验环境: 4 台 centos5.5(32bit)
撰写人: hx10
日期: 2010/6/1 hangzhou
Blog:http://hi.baidu.com/hx10
环境如下:
lvs-master:10.80.11.245
lvs-backup:10.80.11.246
vip:10.80.11.240
web1:10.80.11.243
web2:10.80.11.244
netmask:255.255.255.0
gateway:10.80.11.1
第一步、系统设置
[root@lvs-master conf]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 lvs-master localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
10.80.11.245 lvs-master
10.80.11.246 lvs-backup
在 lvs-backup 上同样设置
接下来关掉一些不必要的系统服务
chkconfig bluetooth off
chkconfig firstboot off
chkconfig cups off
chkconfig ip6tables off
chkconfig iptables off
chkconfig isdn off
chkconfig kudzu off
chkconfig sendmail off
chkconfig smartd off
chkconfig autofs off
service bluetooth stop
service firstboot stop
service cups stop
service ip6tables stop
service iptables stop
service isdn stop
service kudzu stop
service sendmail stop
service smartd stop
service autofs stop
同步系统时间
#ntpdate time.nist.gov
第二步、安装软件( 2 台 lvs 需要安装同样的软件和脚本,唯一的区别是 ha.cf 有点不同)
#yum -y install heartbeat heartbeat-ldirectord ipvsadm
#yum -y install heartbeat
检查下是否完全安装以下包
[root@lvs-master /]# rpm -qa |grep heartbeat
heartbeat-stonith-2.1.3-3.el5.centos
heartbeat-ldirectord-2.1.3-3.el5.centos
heartbeat-gui-2.1.3-3.el5.centos
heartbeat-2.1.3-3.el5.centos
heartbeat-devel-2.1.3-3.el5.centos
heartbeat-pils-2.1.3-3.el5.centos
[root@lvs-master /]# rpm -qa |grep ipvsadm
ipvsadm-1.24-10
#rpm -q heartbeat -d 查看 Heartbeat 安装到那里
#mkdir /etc/ha.d/conf
#cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d
#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-ldirectord-2.1.3/ ldirectord.cf /etc/ha.d/conf
第三步、修改配置文件
#cd /etc/ha.d
[root@lvs-master ha.d]# cat authkeys |grep -v ^#
auth 1
1 crc
#chmod 600 authkeys
[root@lvs-master ha.d]# cat ha.cf |grep -v ^#
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth0 # Linux
ucast eth0 10.80.11.246
auto_failback on
node lvs-master
node lvs-backup
ping 10.80.11.1
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
注: ucast eth0 10.80.11.246 是从本地 (lvs-master) 的 eth0 网卡去 ping lvs-backup 的 IP ,在 lvs-backup 服务器上,需要把这个 IP 改成 lvs-master 的 IP ,这是 2 台 LVS 唯一区别
[root@lvs-master ha.d]# cat haresources |grep -v ^#
lvs-master 10.80.11.240/24/eth0/10.80.11.255 ldirectord::ldirectord.cf LVSSyncDaemonSwap::master
注:
主节点的主机名 vip/ 子网掩码 / 本地 eth0/ 广播地址
[root@lvs-master ha.d]# cat conf/ldirectord.cf |grep -v ^#
checktimeout=20
checkinterval=5
autoreload=no
logfile="/var/log/ldirectord.log"
quiescent=no
virtual=10.80.11.240 :80
fallback=127.0.0.1:80
real=10.80.11.243 :80 gate 1
real=10.80.11.244 :80 gate 1
service=http
request="lvscheck.html"
receive="lvscheck"
scheduler=rr
protocol=tcp
checktype=negotiate
#persistent=300
一定要注意格式,第一次做实现,就是因为全部左对齐,一直出问题
quiescent=no 当 web 服务器其中一台 down 机,可以自动从 lvs 删除,这样访问 vip 就不会轮训到 down 机的那个机器
persistent=300 是会话保持之间,就是 300 秒一直访问 web1, 下个 300 秒一直访问 web2
fallback=127.0.0.1:80 的意思是如果 lvs 停止,会打开 lvs 服务器的 http 页面,可以做一个提示页面
在 web1 和 web2 上分别创建 lvscheck.html 文件,内容为 lvscheck ,这是健康检查的标准
下面在 lvs-backup 上进行系统配置和安装相应软件,准备好进行下一步
[root@lvs-master ha.d]# scp authkeys ha.cf haresources root@10.80.11.246:/etc/ha.d
root@10.80.11.246's password:
[root@lvs-master ha.d]# scp conf/ldirectord.cf root@10.80.11.246:/etc/ha.d/conf
root@10.80.11.246's password:
把这 4 个配置文件拷贝到 lvs-backup 上
然后在 lvs-backup 上把 ha.cf 中的
ucast eth0 10.80.11.246
这里的 ip 改成 10.80.11.245
第四步、修改 web 服务器的配置
[root@web1 ~]# vim /etc/init.d/realserver.sh
#!/bin/bash
#ignore arp script
VIP1=10.80.11.240
#*************************************************************
case $1 in
start)
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
#Add ip alias for lo
/sbin/ifconfig lo:0 $VIP1 netmask 255.255.255.255 up
/sbin/route add -host $VIP1 dev lo:0
;;
stop)
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
/sbin/ifconfig lo:0 $VIP1 netmask 255.255.255.255 down
/sbin/route del -host $VIP1
;;
status)
iothere=`/sbin/ifconfig lo:0|grep $VIP1`
iorthere=`/bin/netstat -rn|grep $VIP1`
if [ ! "$iothere" -o ! "$iorthere" ];then
echo "LVS Real Server is STOP"
else
echo "LVS Real Server is ALIVE"
fi
;;
*)
echo "Usage:$0 start|stop|status"
;;
esac
红色标记部分是 vip 地址
#chmod 755 /etc/init.d/realserver.sh
#sh /etc/init.d/realserver.sh start
#vim /etc/rc.local 加入下一行
/etc/init.d/realserver.sh start
在 web2 上创建同样的脚本并直接,加入自启动
第五步、启动服务并测试
在 lvs-master 和 lvs-backu 上分别启动服务
#service heartbeat start
观察
[root@lvs-master ha.d]# watch ipvsadm -L –n
然后停止 lvs-master 服务,看看 lvs-backup 是不是接管
停掉 web1 服务,看 vip 是不是打开正常
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com