LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。[源于百度]
keepalived可以实现服务的高可用或热备,用来防止单点故障的问题;而Keepalived的核心VRRP协议,VRRP协议主要实现了在路由器或三层交换机处的冗余;Keepalived就是使用VRRP协议来实现高可用的。
lvs+keepalived结合可以更好的提高系统可用性,lvs提供负载,keepalived提供健康检查、故障转移,提高系统可用性。
下面是一个keepalived的原理图:
Keepalived启动后会有三个进程:
父进程:内存管理,子进程管理
子进程:VRRP子进程
子进程:healthchecker子进程
由上图可知:
两个子进程都被系统WatchDog看管,两个子进程各自复杂自己的事,healthchecker子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的VRRP子进程,让它删除通告,并且去掉虚拟IP,转换为BACKUP状态。
实验环境如下图所示:
系统版本及机器用途列表:
使用centos 6.6,ipvsadmin-1.26,keepalived-1.2.9
LVS系统下集群VIP是:192.168.100.2
机器名称 | 机器用途 | 机器IP |
vm1 | lvs-master |
192.168.100.11 |
vm2 | lvs-backup | 192.168.100.12 |
vm3 | realserver1(web1) | 192.168.100.13 |
vm4 | realserver2(web2) | 192.168.100.14 |
所有服务器上iptables和selinux全部关闭。
下面是安装步骤:
1、先安装LVS:
LVS包含两部分:IPVS模块(lvs已经是Linux标准内核的一部分,直接被编译到内核中)和IPVS管理工具ipvsadm
使用如下两种方法检查是否安装IPVS模块,显示如下内容说明已经安装IPVS模块了:


2、安装ipvsadm
[root@vm1 src]# cd ipvsadm-1.26 [root@vm1 ipvsadm-1.26]# make
直接安装会有这个报错,需要安装popt,popt-static,libnl,libnl-devel这四个rpm包。

安装上述四个包以后再执行make和make install
可以使用ipvsadm –help验证是否安装成功。
3、安装keepalived
安装keepalived前需要安装kernel-devel、openssl、openssl-devel三个包。
[root@vm1 src]# cd keepalived-1.2.9 [root@vm1 keepalived-1.2.9]# ./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.12.1.el6.x86_64/
执行过./configure以后这三项必须是YES状态。
[root@vm1 keepalived-1.2.9]# make && make install
再加一个链接方便使用:
[root@vm1 keepalived-1.2.9]# ln -s /usr/local/sbin/keepalived /sbin/
到此ipvsadm和keepalived全部安装完毕,接下来配置下keepalived,然后启动keepalived测试。
4、需要给keepalived配置文件写入如下内容,此处采用DR模式实现。:
[root@vm1 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id DR1 } ########VRRP Instance######## vrrp_instance VI_1 { state MASTER #指定Keepalived的角色,MASTER为主机服务器,BACKUP为备用服务器 interface eth0 #BACKUP为备用服务器 virtual_router_id 51 priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR。 advert_int 1 authentication { auth_type PASS #设置验证类型,主要有PASS和AH两种 auth_pass 1111 #设置验证密码 } virtual_ipaddress { 192.168.100.2 #设置主DR的虚拟IP地址(virtual IP),可多设,但必须每行1个 } } ########Virtual Server######## virtual_server 192.168.100.2 80 { #注意IP地址与端口号之间用空格隔开 delay_loop 6 #设置健康检查时间,单位是秒 lb_algo wrr #设置负载调度算法,默认为rr,即轮询算法,最优秀是wlc算法 lb_kind DR #设置LVS实现LB机制,有NAT、TUNN和DR三个模式可选 nat_mask 255.255.255.0 persistence_timeout 50 #会话保持时间,单位为秒 protocol TCP #指定转发协议类型,有TCP和UDP两种 real_server 192.168.100.13 80 { weight 4 #配置节点权值,数字越大权值越高 TCP_CHECK { connect_timeout 3 #表示3秒无响应,则超时 nb_get_retry 3 #表示重试次数 delay_before_retry 3 #表示重试间隔 } } real_server 192.168.100.14 80 { #配置服务器节点,即Real Server2的public IP weight 3 #配置节点权值,数字越大权值越高 TCP_CHECK { connect_timeout 3 #表示3秒无响应,则超时 nb_get_retry 3 #表示重试次数 delay_before_retry 3 #表示重试间隔 } } }
这个是master上的配置,复制到bakcup机器上需要修改如下地方:
state BACKUP priority 90
5、后端web服务器上需要添加如下脚本,两台web服务器上都需要做如下操作,添加一个VIP:
[root@vm3 init.d]# cat /etc/init.d/realserver.sh #add for chkconfig #chkconfig: 2345 70 30 #234都是文本界面,5就是图形界面X,70启动顺序号,30系统关闭,脚本 #止顺序号 #description: RealServer's script #关于脚本的简短描述 #processname: realserver.sh #第一个进程名,后边设置自动时会用到 #!/bin/bash VIP=192.168.100.2 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /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 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $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
[root@vm3 init.d]# ./realserver.sh start
看到如下结果说明成功:

6、分别启动两台lvs上的keepalived服务:
[root@vm1 ~]# service keepalived start
然后通过ipvsadm查看是否正常:

7、检查VIP是否正常:
vm1是master服务器,在vm1上查看IP如下:

8、模拟服务器宕机操作,通过查看日志看IP切换漂移情况。
现在vm1上暂停keepalived服务,不嫌麻烦的直接关机操作。然后看vm2上的日志以及ip飘移情况:


通过日志可以发现vm2已经由原来的BACKUP变为MASTER状态了,并且VIP也跟着飘移过来了。
9、模拟后端web服务器宕机,看keepalived的检查情况。通过日志查看如下图所示:
通过日志可以发现服务暂停会自动移除,恢复正常会自动添加进来。
后端的web访问就不在做测试了,可以在目录下放个简单的页面看访问情况。
如果其他检查都没错可以使用下边两个脚本直接安装ipvsadm和keepalived,安装完以后修改下BACKUP服务器上的状态和优先级。rar包里边的init.sh先初始化一下服务器,进行一些常规设置,用另外一个安装,需要先给ipvsadm-1.26.tar.gz和keepalived-1.2.9.tar.gz放到/usr/local/src下面。