使用keepalived实现LVS的DR模式热备
在《LVS之一:三种工作模式的优缺点比较(NAT/TUN/DR)》文章讲述了LVS的三种转发模式对比,我们先就用LVS的DR模式来实现Web应用的负载均衡。为了防止LVS服务器自身的单点故障导致整个Web应用无法提供服务,因此还得利用Keepalived实现lvs的高可用性,keepalived主要使用VRRP协议来保存链路的高可用性。而VRRP(VirtualRouter Redundancy Protocol)协议本身是用于实现路由器冗余的协议。LVS-DR模式的原理如下(借用别人的图):
说明:
1、LVS服务器和WEB服务器必须在同一网段;
2、多台Web服务器间使用NFS服务器等共享存储存放用户上传附件,以保障数据的一致性(如上传图片)。下文讨论
IP地址规划:
VIP 192.168.18.60
LVS-MASTER 192.168.18.51
LVS-BACKUP 192.168.18.52
NFS Server 192.168.18.20
MySQL 192.168.18.18
WEB1 192.168.18.61
WEB2 192.168.18.62
三、安装LVS+Keepalived:
1、使用yum在线安装:
# yum install ipvsadmkeepalived –y
2、检查安装结果:
# rpm -qa |grep ipvsadm
ipvsadm-1.25-10.el6.x86_64
# rpm -qa |grep keepalived
keepalived-1.2.7-3.el6.x86_64
3、服务配置:
# chkconfig keepalived on ##设置为开机启动
# service keepalived start ##立即启动keepalived服务
四、配置LVS服务器:
1、备份配置文件:
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.bak
2、修改配置文件,具体如下:
原始的配置文件包含了三种模式的配置,而这里我们只需要用到DR模式,因此最终保留配置如下:
#vim /etc/keepalived/keepalived.conf
global_defs { ##全局配置部分
# notification_email { ##下面几行均为全局通知配置,可以实现出现问题后报警,但功能有限,因此注释掉,并采用Nagios监视lvs运行情况
# admin@toxingwang.com
# }
# notification_email_from master@toxingwang.com
# smtp_server smtp.exmail.qq.com
# smtp_connect_timeout 30
router_id LVS_MASTER ##设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 { ##设置vrrp组,唯一且同一LVS服务器组要相同
state MASTER ##备份LVS服务器设置为BACKUP
interface eth0 # #设置对外服务的接口
virtual_router_id 51 ##设置虚拟路由标识
priority 100 #设置优先级,数值越大,优先级越高,backup设置为99,这样就能实现当master宕机后自动将backup变为master,而当原master恢复正常时,则现在的master再次变为backup。
advert_int 1 ##设置同步时间间隔
authentication { ##设置验证类型和密码,master和buckup一定要设置一样
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { ##设置VIP,可以多个,每个占一行
192.168.18.60
}
}
virtual_server 192.168.18.60 80 {
delay_loop 6 ##健康检查时间间隔,单位s
lb_algo wrr ##负载均衡调度算法设置为加权轮叫
lb_kind DR ##负载均衡转发规则
nat_mask 255.255.255.0 ##网络掩码,DR模式要保障真是服务器和lvs在同一网段
persistence_timeout 50 ##会话保持时间,单位s
protocol TCP ##协议
real_server 192.168.18.61 80 { ##真实服务器配置,80表示端口
weight 3 ##权重
TCP_CHECK { ##服务器检测方式设置
connect_timeout 5 ##连接超时时间
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.18.62 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
作为高可用的备份lvs服务器配置只需在上述配置中的master修改backup即可,其他保持相同。
3、分别在两台lvs服务器上重启服务:
# service keepalived start
注:由于keepalived配置文件有语法错误也能启动,因此看到启动了lvs服务,不代表配置文件没有错误,如果遇到lvs不能正常转发,及时跟踪日志进行处理。
日志跟踪方法:
1、开两个ssh窗口连接到lvs服务器,第一个窗口运行如下命令:
# tail -F /var/log/message
2、第二个窗口重新启动keepalived服务,同时观察窗口1中日志的变化,然后根据日志提示解决即可。
五、WEB服务器IP绑定配置:
在两台WEB服务器安装并配置(非本文重点,不做web安装配置讲解),建立测试网页,先使用实际IP进行访问测试,能正常访问后,进行如下操作:
在前面的文章中介绍DR模式时提到:负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。但实际上客户端访问时,IP都是指向的负载均衡器的ip(也就是LVS的VIP),如何能让真是服务器处理IP头为VIP的请求,这就需要做下面的操作,将VIP绑定到真实服务器的lo网口(回环),为了防止IP广播产生IP冲突,还需关闭IP广播,具体如下:
1、编辑开机启动脚本:
# vim /etc/init.d/realserver
#!/bin/bash
#chkconfig: 2345 79 20
#description:realserver
SNS_VIP=192.168.18.60
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
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
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
脚本说明:
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;默认;
1:仅在请求的目标地址配置在到达的接口上的时候,才给予响应;
arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;默认;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
2、设置脚本开机启动并立即启动:
# chkconfig realserver on
# service realserver start
RealServer Start OK
3、检测IP配置:
# ifconfig
eth0 Link encap:EthernetHWaddr 00:50:56:B3:54:5A
inet addr:192.168.18.61Bcast:192.168.18.255Mask:255.255.255.0
inet6 addr: fe80::250:56ff:feb3:545a/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:98940 errors:4 dropped:4 overruns:0 frame:0
TX packets:82037 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:23077218 (22.0 MiB)TX bytes:16043349 (15.3 MiB)
Interrupt:18 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNINGMTU:16436Metric:1
RX packets:300 errors:0 dropped:0 overruns:0 frame:0
TX packets:300 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:528420 (516.0 KiB)TX bytes:528420 (516.0 KiB)
lo:0 Link encap:Local Loopback
inet addr:192.168.18.60 Mask:255.255.255.255
UP LOOPBACK RUNNINGMTU:16436Metric:1
4、测试LVS:
在lvs master服务器上运行如下命令:
# watch -n 1 ipvsadm -ln
在多台客户端通过浏览器访问VIP或域名(域名需解析到VIP),看能否获取到正确的页面,且同时观察上述窗口的变化。
<a href="http://www.toxingwang.com/wp-content/uploads/2013/06/32.png" class="cboxElement" rel="example4" 996"="" style="text-decoration: none; color: rgb(1, 150, 227);">
从上图(为了方便观察,使用了压力测试)可以看出,访问被正常的分担到了两台后端web服务器 。
六、后继问题探讨:
1、用户新上传的附件存放问题;目前我们采用的是NFS方式解决,但存在单点故障,需要配合其他方式解决。NFS的基本用法请参考《NFS的配置和使用》
2、后端数据库高可用性;
3、会话共享和保持问题(Session共享);算法调整为SH可解决,但有RealServer宕机时,其上的session也会丢失。后期将调整为实现共享session。
页:
[1]