[集群] Heartbeat + LVS + ldirectord构建可伸缩网络服务 (两台服务器)
2010-08-01 0:35
网络环境:
机器数量:2 操作系统:Centos 5.0,Centos 5.2 机器名:centos50,centos52 机器IP: Centos 5.0: 10.2.20.15 Centos 5.2: 10.2.20.88 虚拟IP: 10.2.20.17
需要的软件: httpd:提供web服务 LVS:对web服务器按照一定的规则进行转发 Heartbeat:提供ip漂移服务,在主服务器宕机后,备份服务器接管虚拟ip ldirectord:提供lvs控制,监控真实服务器,出现问题后,对轮循列表进行更新,去除出现问题的服务器
机器角色: centos50:主负载均衡器+真实服务器 centos52:备份负载均衡器+真实服务器
实现功能: 两台服务器做为负载均衡器进行主从互备,并充当真实服务器功能,对外提供服务,当真实服务器出现问题后,主负载均衡器能够检测到,并从负载均衡轮循列表清除有问题的真实服务器。 当主负载均衡器出现问题后,备份负载均衡器能够接管负载均衡服务,使服务不受影响。
1.最小化安装操作系统;
2.在两台机器上配置机器名 在/etc/hosts文件中添加主机名记录,确保两台机器能够通过主机名相互ping通
3.安装httpd,heartbeat,ldirectord centos 5.2内核已经包含lvs,不用安装,只安装httpd,heartbeat,ldirectord yum install httpd,heartbeat,heartbeat-ldirector
4.配置lvs,在两台机器上进行如下操作 1).为回环接口配置虚拟ip cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0 修改/etc/sysconfig/network-scripts/ifcfg-lo:0文件,内容如下: DEVICE=lo:0 IPADDR=10.2.20.16 #虚拟ip地址 NETMASK=255.255.255.255 BROADCAST=255.255.255.255 ONBOOT=yes NAME=loopback 启动lo:0接口 ifup lo:0 2).修改arp转发规则 修改/etc/sysctl.conf文件,添加如下内容: net.ipv4.ip_forward = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 运行sysctl -p命令,使用配置生效 3).编写lvs真实服务器启动脚本 在/etc/init.d目录下新建文件realserver,内容如下: #!/bin/sh #Create on 2007-11-21 #Description start lvs,disable arp response VIP=10.2.20.17 #虚拟ip #. /etc/rc.d/init.d/functions case "$1" in start) echo "lvs start" /sbin/ifconfig lo:0 down 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 ;; stop) echo "lvs stop" 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 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up ;; *) echo "Usage0 {start|stop}" exit ;; esac 修改文件权限,使脚本有执行权限 chmod +x realserver
5.配置Heartbeat 1).在/etc/ha.d目录新建ha.cf文件,内容如下: logfile /var/log/ha-log #heartbeat日志文件位置 logfacility local0 #将heartbeat日志记录到系统日志中,可选 keepalive 2 #设定heartbeat之间的检测时间间隔为2秒 deadtime 30 #在无响应30秒后宣布节点死亡 warntime 10 #在日志中发出“late heartbeat“警告之前等待的时间,单位为秒 initdead 60 #在某些配置下,重启后网络需要一些时间才能正常工作。这个单独的”deadtime”选项可以处理这种情况。它的取值至少应该为通常deadtime的两倍。 udpport 694 #使用端口694进行bcast和ucast通信。这是默认的,并且在IANA官方注册的端口号 auto_failback on #auto_failback设置为on时,一旦主节点重新恢复联机,将从从节点取回所有资源。若该选项设置为off,主节点便不能重新获得资源。 watchdog /dev/watchdog #可以在检测到heartbeat不正常状态持续一分钟后自动重新启动系统 node centos50 #集群中机器的主机名,与“uname –n”的输出相同,主结点 node centos52 #同上,备份结点 ping 10.2.20.254 #用来为ipfail等模块检查网络连接情况的,这里不应是集群节点 respawn hacluster /usr/lib64/heartbeat/ipfail #在heartbeat启动进运行的程序,ipfail插件的用途是检测网络故障,并作出合理的反应 2).在/etc/ha.d目录新建authkeys文件,内容如下 auth 1 1 crc 这个文件用来在集群机器间进行认证,如果您的Heartbeat运行于安全网络之上,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但您也希望降低CPU使用,则使用md5。最后,如果您想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。 3).在/etc/ha.d目录新建haresources文件,内容如下 centos50 realserver IPaddr::10.2.20.17 ldirectord centos50:集群主节点,它应该与uname -n命令输出的内容相同 realserver,IPaddr,ldirectord:服务脚本,Heartbeat会在以下路径中寻找有相同名字的服务脚本:/etc/ha.d/resource.d ,/etc/init.d,所以我们的脚本应该在这两个目录下 ::10.2.20.17:脚本参数,若要向教本传递参数,格式应该为: <scriptname>::<argument> heartbeat 在启动会使用<scriptname> start形式运行脚本,启动顺序是先运行realserver脚本,再运行IPaddr脚本,最后运行ldirectord脚本,停止时会使用<scriptname> stop运行脚本,停止顺序是先停止ldirectord脚本,再停止IPaddr脚本,最后停止realserver脚本。
注意:realserver 脚本的作用比较特殊,我们这里两台机器充当的角色比较多,包括主从备份结点,负载均衡器,提供服务的真实服务器。为了实现真实服务器功能,我们需要在lo 接口绑定虚拟ip,并修改内核arp转发规则,使负载均衡功能正常。所以在操作系统启动时我们配置自动启动配置了虚拟ip的lo:0接口,并修改内核 arp转发规则。
主结点heartbeart启动时,如果不关闭lo:0接口,IPaddr脚本就会运行不正常,不能在真实网卡上绑定虚拟ip。所以在主节点启动时我们要将lo:0接口关闭,以使IPaddr脚本正常运行,将虚拟ip绑定到真实网卡;在主结点不正常时再通过 realserver脚本启动lo:0接口,实现真实服务器功能。
备份结点heartbeat启动时,会检测主结点状态,如果主结点状态正常,它只充当真实服务器角色,不会运行haresources里面的内容,这样 lo:0接口不会关闭,备份结点的真实服务器功能就可以实现;在检测到主结点出现问题后,备份结点要先把lo:0接口关闭,然后在真实网卡绑定虚拟ip,并通过ldirectord配置lvs轮循列表,充当负载均衡器。
这段话比较啰嗦,不知道我说明白没有! 4).在/etc/ha.d目录新建ldirectord.cf文件,内容如下 checktimeout=3 checkinterval=5 fallback=127.0.0.1:80 autoreload=yes logfile="/var/log/ldirectord.log" quiescent=yes
virtual=10.2.20.17:80 real=10.2.20.15:80 gate 5 real=10.2.20.88:80 gate 5 fallback=127.0.0.1:80 gate service=http request="test.html" receive="Test Page" scheduler=wlc checktype=negotiate 文件内容的含义,在网上找找,写不下去了 在web服务器根目录新建文件test.html,内容:Test Page 在web服务器根目录新建文件index.html,内容:This is server1
5).将以上文件全部复制到另一台机器 scp ha.cf authkeys haresources ldirectord.cf root@xxx.xxx.xxx.xxx:/etc/ha.d/ 修改authkeys文件权限为600 在web服务器根目录新建文件test.html,内容:Test Page 在web服务器根目录新建文件index.html,内容:This is server2
6.在两台机器上启动heartbeat service heartbeat start
7.测试服务器状态 通过ifconfig命令查看主结点是否在真实网卡上绑定了虚拟ip 通过ipvsadm -l 命令查看主结点lvs轮循列表是否正常 通过虚拟ip访问web服务,并刷新,看负载均衡功能是否正常 通过拔掉主结点网线,查看备份结点是否能够接管虚拟ip | |
|