LVS+Heartbeat 配置
|字号 订阅
LVS+Heartbeat 安装
http://xfshean.blog.163.com/blog/static/602065662012729111557850/
4、实践环境
http://xfshean.blog.163.com/blog/static/602065662012729111557850/
4、实践环境
DR1:192.168.1.80 负载服务器-主
DR2:192.168.1.81 负载服务器-备
R1: 192.168.1.82 WEB1
R2: 192.168.1.83 WEB2
VIP:192.168.1.85 虚拟IP
1、准备工作:DR1和DR1的/etc/hosts内加入以下内容:以便解析
vi /etc/hosts
192.168.1.80 master.30920.cn
192.168.1.81 backup.30920.cn
2、修改 # vi /etc/ha.d/ha.cf 配置文件
(主、备一样)
#debugfile /var/log/ha-debug
logfile /var/log/ha-log
#日志存放位置
#crm yes
#是否开启集群资源管理功能
logfacility local0
#记录日志等级
keepalive 2
#心跳的时间间隔,默认时间单位为秒
deadtime 5
#超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 3
#超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中,但此时不会切换
initdead 10
#在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。
udpport 694
#设置广播通信使用的端口,694为默认使用的端口号。
bcast eth0 # Linux指定心跳使用以太网广播方式,并在eth0上进行广播。"#"后的要完全删除,要不然要出错。
#ucast eth0 192.168.1.81 # 采用网卡eth0的UDP多播来组织心跳,后面跟的IP地址应为双机中对方的IP地址
auto_failback on
#在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代备用节点。off主节点恢复后变为备用节点,备用为主节点。
#stonith_host * baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3 rps10 /dev/ttyS1 kathy 0
#stonith_host kathy rps10 /dev/ttyS1 ken3 0
#watchdog /dev/watchdog
node backup.30920.cn
#主机节点名,可通过 uname -n 查看,默认为主节点
node master.30920.cn
#备用机节点名,默认为次节点,要注意顺序哟
#ping 192.168.1.1 # 选择ping节点,选择固定路由作为节点。ping节点仅用来测试网络连接。
ping_group group1 192.168.1.80 192.168.1.55
#并不是双机中的两个节点,仅仅用来测试网络的连通性,都不能过主动切换
respawn root /usr/lib/heartbeat/ipfail #选配项。其中rootr表示启动ipfail进程的身份。
apiauth ipfail gid=root uid=root
3、修改资源文件(# vi /etc/ha.d/haresources )
(主、备一样) 注意:DR1和DR2的资源文件要完全一致
master.30920.cn 192.168.1.85 ldirectord
#设置master.30920.cn为主节点,集群VIP为192.168.1.85,heartbeat托管的服务为ldirectord.
4、配置heartbeat的认证文件( # vi /etc/ha.d/authkeys )
(主、备一样)
auth 1
#auth后面指定的数字,下一行必须作为关键字再次出现。
1 crc
#2 sha1 HI!
#3 md5 Hello!
#最后保证文件的权限为 600
# chmod 600 /etc/ha.d/authkeys
# chmod 600 /etc/ha.d/authkeys
5、修改 # vi /etc/ha.d/ldirectord.cf
(主、备一样)他的作用就是监控集群中有故障时,从集群中T出,恢复了又加入服务。他通过调用ipvsadm命令创建LVS路由表信息。
# GlobalDirectives
checktimeout=10 # 判定realserver出错时间
checkinterval=10 # 指定ldirectord在两次检查之间的间隔时间
fallback=127.0.0.1:80
# 当所有RS机器不能访问的时候WEB重写向地址
autoreload=yes # 是否自动重载配置文件
logfile="/var/log/ldirectord.log" # 设定Ldirectord日志输出文件路径
#logfile="local0"
#emailalert="root@30920.cn"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=yes # 选择为no是,如果一个节点在checktimeout设置的时间周期内没响应,将会被T除,中断现有客户端的连接。 yes新的连接不能到达。
# Samplefor an http virtual service
virtual=192.168.1.85:80 #
指定虚拟IP,注意在virtual这行后面的行必须缩进4个空格或以一个tab字符进行标记
real=192.168.1.104:80 gate #gate 为DR模式,ipip表示TUNL模式,masq表示NAT模式
real=192.168.1.105:80 gate
#fallback=127.0.0.1:80 gate
#service=http #指定服务类型,这里对HTTP进行负载均衡
#request="index.html" #请求监控地址
#receive="Test Page" # 指定请求和应答字符串,也就是index.html的内容
#virtualhost=some.domain.com.au #虚拟服务器的名称可任意指定
scheduler=wrr #指定调度算法,这里是wrr(加权轮叫调度算法)
#netmask=255.255.255.255
protocol=tcp
checktype=connect
checkport=80
6、在RS上加入如下脚本并运行(两台真实的RS都要加入并开机启动)# vi /etc/init.d/lvs
#!/bin/bash
#
# lvsdrrs init script to hide loopback interfaces on LVS-DR
# Real servers. Modify this script to suit
# your needs. You at least need to set the correct VIP address(es).
#
# Script to start LVS DR real server.
#
# chkconfig: 2345 20 80
# description: LVS DR real server
#
# You must set the VIP address to use here:
VIP=10.0.0.20
/etc/rc.d/init.d/functions
case "$1" in
start)
# Start LVS-DR real server on this machine.
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
;;
stop)
# Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo:0 down
;;
status)
# Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep $VIP`
isrothere=`netstat -rn | grep "lo" | grep $VIP`
if [ ! "$islothere" -o ! "$isrothere" ];then
# Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR Running."
fi
;;
*)
# Invalid entry.
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
# /etc/init.d/lvs start
7、启动相关
在RS1\RS2上启动
/etc/init.d/lvs start
在DR1/DR2上启动
/etc/init.d/heartbeat start
然后就可以测试了
看到有的网站上写的需要给主备heartbeat写脚本,其实是不需要的。
--------------------------------------------
HA主备切换报错,无法切换
ERROR: Could not send gratuitous arps. rc=127
解决办法:
ldd /usr/lib/heartbeat/send_arp,看看读取的libnet.so.0属于哪个路径,如果没有的话,弄个软连接过去吧。
libnet.so.1 => not found
ln -s /usr/local/lib/libnet.so.1 /lib