全部博文(7)
分类: LINUX
2011-12-15 20:50:52
IPVS-DR+heartbeat+ldirectord构建高可用负载均衡群集实验
表1.1IP地址参数设置
名称 |
角色 |
IP地址 |
Load Balancer (RHEL5) |
均衡器 (LVS-Master) |
eth0:0(Vip):192.168.5.198 |
eth0:192.168.5.196 | ||
eth1:10.0.0.1 (心跳接口) | ||
Load Balancer (RHEL5) |
均衡器 (LVS-Slave) |
eth0:0(Vip):192.168.5.198 |
eth0:192.168.5.197 | ||
eth1:10.0.0.2 (心跳接口) | ||
RealServer1 (RHEL5) |
服务器群集节点1 (Web服务器) |
lo:0(Vip):192.168.5.198 |
eth0:192.168.5.191 | ||
RealServer2 (RHEL5) |
服务器群集节点2 (Web服务器) |
lo:0(Vip):192.168.5.198 |
eth0:192.168.5.192 |
实验步骤:
一、Load Balancer1(LVS-Master)配置
1) 设置网卡IP地址
[root@LVS-Master /]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:0c:29:7c:1a:c4
NETMASK=255.255.255.0
IPADDR=192.168.5.196
TYPE=Ethernet
[root@LVS-Master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:0c:29:7c:1a:ce
NETMASK=255.255.255.0
IPADDR=10.0.0.1
TYPE=Ethernet
2) 更改主机名为:LVS-Master
[root@LVS-Master ~]# vi /etc/sysconfig/network //永久性修改,需重启机器后生效
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=LVS-Master
[root@LVS-Master ~]# hostname LVS-Master //临时性修改,主机名及时生效
3) 更改/etc/hosts文件
[root@LVS-Master ~]# vi /etc/hosts
添加如下两行:
192.168.5.196 LVS-Master
192.168.5.197 LVS-Slave
4)安装heartbeat所需软件
A、检查perl-libwww-perl-*软件包是否已安装
[root@LVS-Master ~]# rpm -qa|grep perl-libwww-perl
perl-libwww-perl-5.805-1.1.1
B、安装ipvsadm管理器
[root@LVS-Master /]# mount /dev/cdrom /media/
[root@LVS-Master /]# cd /media/Cluster
[root@LVS-Master Cluster]# rpm -ivh ipvsadm-1.24-8.1.i386.rpm
C、编译安装libnet //这里所用的软件被放到了/home/xinwen目录下了
[root@LVS-Master xinwen]# cd /home/xinwen/
[root@LVS-Master xinwen]# tar zxvf libnet-0.10.11.tar.gz
[root@LVS-Master xinwen]# cd libnet
[root@LVS-Master libnet]# ./configure
[root@LVS-Master libnet]# make
[root@LVS-Master libnet]# make install
D、编译安装MailTools
[root@LVS-Master libnet]# cd -
[root@LVS-Master xinwen]# tar zxvf MailTools-2.04.tar.gz
[root@LVS-Master xinwen]# cd MailTools-2.04
[root@LVS-Master MailTools-2.04]# perl Makefile.PL
[root@LVS-Master MailTools-2.04]# make
[root@LVS-Master MailTools-2.04]# make install
E、编译安装Hearbeat
[root@LVS-Master MailTools-2.04]# cd -
[root@LVS-Master xinwen]# tar jxvf Heartbeat-STABLE-2-1-STABLE-2.1.4.tar.bz2
[root@LVS-Master xinwen]# cd Heartbeat-STABLE-2-1-STABLE-2.1.4
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# groupadd haclient
//添加hearbeat运行所需的程序组账户:haclient组,程序用户:hacluster
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# \
> useradd hacluster -g haclient -s /sbin/nologin
Heartbeat编译前需要使用其自带的ConfigureMe脚本进行配置
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# ./ConfigureMe configure
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# ./ConfigureMe make
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# ./ConfigureMe install
F、将heartbeat设置成开机在2、3、4、5级别下自启动
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# chkconfig --add heartbeat
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# chkconfig heartbeat on
4) 配置ldirectord故障检测及管理
将ldirectord的配置文件ldirectord.cf的配置文件复制到/etc/ha.d目录下
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# \
> cp ./ldirectord/ldirectord.cf /etc/ha.d/
[root@LVS-Master xinwen]# grep -v "#" /etc/ha.d/ldirectord.cf |grep -v "^$" //修改参考样本
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
logfile="local0"
quiescent=yes
virtual=192.168.5.198:80
real=192.168.5.191:80 gate
real=192.168.5.192:80 gate
fallback=127.0.0.1:80 gate
service=http
scheduler=rr
protocol=tcp
checktype=negotiate
checkport=80
5) 设定heartbeat配置文档
Heartbeat的配置文件有三个:ha.cf、haresources、authkeys。这三个配置文件需要放置
/etc/ha.d目录下,但是此目录下默认没有这三个文件,所以要复制样本文件。
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# \
> cp ./doc/ha.cf ./doc/haresources ./doc/authkeys /etc/ha.d/
A、编辑ha.cf文件
[root@LVS-Master Heartbeat-STABLE-2-1-STABLE-2.1.4]# \
> grep -v "#" /etc/ha.d/ha.cf |grep -v "^$" //修改参考样本
//日志选项,对于HA双机系统来说,日志至关重要,通讯的故障、服务器的切换、资源和服务的状态,都是通过日志来进行检查的。打开这个选项,将把所有调用信息写入到对应的文件中,这些信息非常详细也非常多。
debugfile /var/log/ha-debug
// Logfile是标准的其他非调试信息的写入位置
logfile /var/log/ha-log
//写入日志的日志级别,默认为local0
logfacility local0
//该参数指定主服务器和辅助服务器的心跳间隔也就是通信的间隔单位为秒,默认是2,也就是每隔两秒通讯一次。
keepalive 2
//该参数指定等待声明主机死机的时间。指定 30 表示 heartbeat 将在节点停止响应 30 秒之后启动故障转移,辅助的服务器就会接替主辅器的工作继续为用户提供服务器
deadtime 30
//在日志中发出最后心跳”late heartbeat” 前的警告时间设定(超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中)
warntime 10
//在一些配置中,节点重启后需要花一些时间启动网络。这个时间与”deadtime”不同,要单独对待。 至少是标准死亡时间的两倍
initdead 120
//设置udp的通信port默认是694,如果计算机有防火墙那么需要打开该端口。
udpport 694
//在那个网络接口上进行广播,当使用网络接口进行心跳连接时,心跳检查的网卡应该是和正常的网卡分开的,这个选项用于心跳检测
bcast eth1 # Linux
//设置当主服务器从故障恢复后,是否自动从辅助服务器中切换回来,还是手动切换过来。On为自动off为手动。
auto_failback on
//节点名称,与uname –n保持一致
node LVS-Master
node LVS-Slave
respawn root /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
6) 编辑haresources文件,定义heartbeat启动设定VIP,启动ldirectord服务
[root@LVS-Master xinwen]# vi /etc/ha.d/haresources
LVS-Master IPaddr::192.168.5.198/32 ldirectord::ldirectord.cf
其中,“LVS-Master”是主节点名称,“192.168.5.198/32”是VIP,“ldirectord::ldirectord.cf”指定ldirectord使用ldirectord.cf配置文件。
编辑authkeys文件,指定使用认证的方式。
[root@LVS-Master xinwen]# vi /etc/ha.d/authkeys
auth 1
1 crc
考虑到安全性,authkeys文件的权限必须为600
[root@LVS-Master xinwen]# chmod 600 /etc/ha.d/authkeys
7) 配置VIP设定脚本
[root@LVS-Master ~]# vi /opt/vip.sh
#!/bin/bash
VIP=192.168.5.198
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
8) 设置脚本可执行权限
[root@LVS-Master ~]# chmod u+x /opt/vip.sh
9) 执行VIP脚本
[root@LVS-Master ~]# echo "/opt/vip.sh" >> /etc/rc.local
[root@LVS-Master ~]# /opt/vip.sh
[root@LVS-Master ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:7C:1A:C4
inet addr:192.168.5.198 Bcast:192.168.5.198 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:67 Base address:0x2000
10)使用ipvsadm命令工具设置DR模式负载均衡群集
[root@LVS-Master ~]# ipvsadm -A -t 192.168.5.198:80 -s rr
[root@LVS-Master ~]# ipvsadm -a -t 192.168.5.198:80 -r 192.168.5.191:80 -g
[root@LVS-Master ~]# ipvsadm -a -t 192.168.5.198:80 -r 192.168.5.192:80 -g
保存ipvsadm设置到/etc/sysconfig/ipvsadm文件以后,下次启动可以直接执行“service ipvsadm start”命令,不再需要逐条输入命令。
[root@LVS-Master ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@LVS-Master ~]# ipvsadm –l //查看ipvsadm列表
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.5.198:http rr
-> 192.168.5.191:http Route 1 0 0
-> 192.168.5.192:http Route 1 0 0
二、Load Balancer2LVS-Slave)配置
1)设置网卡IP地址
[root@LVS-Master /]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0c:29:ef:c8:cd
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.5.197
TYPE=Ethernet
[root@LVS-Master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:0c:29:ef:c8:d7
NETMASK=255.255.255.0
IPADDR=10.0.0.2
TYPE=Ethernet
2) 更改主机名为:LVS-Slave
[root@LVS-Master ~]# vi /etc/sysconfig/network //永久性修改,需重启机器后生效
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=LVS-Slave
[root@LVS-Master ~]# hostname LVS-Master //临时性修改,主机名及时生效
3) 更改/etc/hosts文件
[root@LVS-Master ~]# vi /etc/hosts
添加如下两行:
192.168.5.196 LVS-Master
192.168.5.197 LVS-Slave
4)安装软件
LVS-Slave上安装的软件及安装步骤与LVS-Master一致。
5) IPVS、heartbeat、ldirectord
备份节点上的配置文件内容要求与主节点服务器中的保持一致,所以可直接从主节点服
务器(LVS-Master)上复制heartbeat的三个配置文件(ha.cf、haresources、authkeys),ldirectord的配置文件(ldirectord.cf)
6) 配置VIP设定脚本
[root@LVS-Master ~]# vi /opt/vip.sh
#!/bin/bash
VIP=192.168.5.198
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
7) 设置脚本可执行权限
[root@LVS-Master ~]# chmod u+x /opt/vip.sh
8) 执行VIP脚本
[root@LVS-Master ~]# echo "/opt/vip.sh" >> /etc/rc.local
[root@LVS-Master ~]# /opt/vip.sh
[root@LVS-Slave ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:EF:C8:CD
inet addr:192.168.5.198 Bcast:192.168.5.198 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:67 Base address:0x2000
三、Realserver服务器上的配置
提供服务的RealServer1和RealServer2不需要安装任何IPVS软件,只需要设置在开机后自动执行以下脚本:
1)在RealServer1上的设置
[root@localhost ~]# vi /opt/lvs-dr //编写lvs-dr脚本
#!/bin/bash
VIP="192.168.5.198"
/sbin/ifconfig eth0 192.168.5.191/16 up
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
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
[root@localhost ~]# chmod u+x /opt/lvs-dr //添加脚本lvs-dr的执行权限
[root@localhost ~]# echo "/opt/lvs-dr" >> /etc/rc.local //让脚本lvs-dr随机开机启动
[root@localhost ~]# /opt/lvs-dr //执行lvs-dr脚本
[root@localhost ~]# echo "1111" > /var/www/html/index.html //在RealServer1添加测试页
[root@localhost ~]# servcie httpd restart //重启web服务器
2)在RealServer2上的设置
[root@localhost ~]# vi /opt/lvs-dr //编写lvs-dr脚本
#!/bin/bash
VIP="192.168.5.198"
/sbin/ifconfig eth0 192.168.5.192/16 up
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
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
[root@localhost ~]# chmod u+x /opt/lvs-dr //添加脚本lvs-dr的执行权限
[root@localhost ~]# echo "/opt/lvs-dr" >> /etc/rc.local //让脚本lvs-dr随机开机启动
[root@localhost ~]# /opt/lvs-dr //执行lvs-dr脚本
[root@localhost ~]# echo "2222" > /var/www/html/index.html //在RealServer1添加测试页
[root@localhost ~]# servcie httpd restart //重启web服务器
四、测试
1)启动heartbeat服务
分别在主、副均衡服务器上启动heartbeat服务,启动命令为:
[root@LVS-Slave ~]# service heartbeat start
2)确定realserver1和realserver2服务器的httpd服务启动,页面能正常访问
3)在两台客户机上分别打开浏览器,输入,将分别看到不同的页面。
在Balancer中的查看测试
[root@LVS-Master ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.5.198:http rr
-> 192.168.5.191:http Route 1 0 6
-> 192.168.5.192:http Route 1 0 5
4)测试HA功能
断掉LVS-Master的eth0和eth1的网络连接或者关闭系统模拟故障发生。
在LVS-Slave中观察日志,大约应在30秒内LVS-Slave接管LVS-Master的资源启动LVS服务。主均衡服务器恢复正常后,必须能够从备份均衡服务器接管资源。
[root@LVS-Slave ~]# tail -f /var/log/ldirectord.log //当LVS-Master发生故障后
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1135] Invoking ldirectord invoked as: /etc/ha.d/resource.d/ldirectord ldirectord.cf status
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1135] Exiting with exit_status 3: Exiting from ldirectord status
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1157] Invoking ldirectord invoked as: /etc/ha.d/resource.d/ldirectord ldirectord.cf start
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1157] Starting Linux Director v1.186-ha-2.1.4 as daemon
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] Added virtual server: 192.168.5.198:80
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] Added fallback server: 127.0.0.1:80 (192.168.5.198:80) (Weight set to 1)
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] Quiescent real server: 192.168.5.192:80 (192.168.5.198:80) (Weight set to 0)
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] Quiescent real server: 192.168.5.191:80 (192.168.5.198:80) (Weight set to 0)
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] system(/sbin/ipvsadm -e -t 192.168.5.198:80 -r 192.168.5.191:80 -g -w 1) failed: No child processes
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] Restored real server: 192.168.5.191:80 (192.168.5.198:80) (Weight set to 1)
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] system(/sbin/ipvsadm -d -t 192.168.5.198:80 -r 127.0.0.1:80) failed: No child processes
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] Deleted fallback server: 127.0.0.1:80 (192.168.5.198:80)
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] system(/sbin/ipvsadm -e -t 192.168.5.198:80 -r 192.168.5.192:80 -g -w 1) failed: No child processes
[Sat Jul 30 17:00:44 2011|ldirectord.cf|1159] Restored real server: 192.168.5.192:80 (192.168.5.198:80) (Weight set to 1)
[root@LVS-Slave ~]# tail -f /var/log/ldirectord.log //当LVS-Master故障恢复后
Sat Jul 30 17:03:40 2011|ldirectord.cf|1264] Invoking ldirectord invoked as: /etc/ha.d/resource.d/ldirectord ldirectord.cf stop
[Sat Jul 30 17:03:40 2011|ldirectord.cf|1159] system(/sbin/ipvsadm -d -t 192.168.5.198:80 -r 192.168.5.191:80) failed: No child processes
[Sat Jul 30 17:03:40 2011|ldirectord.cf|1159] Purged real server (stop): 192.168.5.191:80 (192.168.5.198:80)
[Sat Jul 30 17:03:40 2011|ldirectord.cf|1159] system(/sbin/ipvsadm -d -t 192.168.5.198:80 -r 192.168.5.192:80) failed: No child processes
[Sat Jul 30 17:03:40 2011|ldirectord.cf|1159] Purged real server (stop): 192.168.5.192:80 (192.168.5.198:80)
[Sat Jul 30 17:03:40 2011|ldirectord.cf|1159] system(/sbin/ipvsadm -D -t 192.168.5.198:80) failed: No child processes
[Sat Jul 30 17:03:40 2011|ldirectord.cf|1159] Purged virtual server (stop): 192.168.5.198:80
[Sat Jul 30 17:03:40 2011|ldirectord.cf|1159] Linux Director Daemon terminated on signal: TERM
5)测试ldirectord的功能
在正在提供服务的负载均衡服务器上动态观察日志变动。
断掉realserver1的网络连接,将会看到ldirectord会自动使用ipvsadm命令删除realserver1的服务器记录;恢复realserver1的网络连接后,将会看到ldirectord使用ipvsadm命令恢复了realserver1服务器的记录。此外还可以使用”watch ipvsadm -L -n”命令动态观察。
测试a:断掉realserver1网络连接后:
[root@LVS-Master ~]# watch ipvsadm -L –n
测试b:realserver1网络连接恢复后:
[root@LVS-Master ~]# watch ipvsadm -L –n