Keepalived + LVS
LVS+Keepalived实现高可用集群
1.操作环境
操作系统平台:CentOS6.5
软件:keepalived-1.2.12.tar.gz
Ipvsadm使用yum自带的安装
2.原理技术
LVS提 供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的配置文件即可。Keepalived在这里主要用作RealServer的健康状态检查以及master主机和backup主机之间failover(故障转移)的实现
单点故障:在公司整个业务流程中,某一点出现故障就会导致整个系统架构不可用,单点故障常发生在数据库、核心业务系统等。对此我们的解决办法是对核心业务系统进行高可用负载均衡。
3.架构图:
拓扑图介绍
keepalived--master和keepalived--backup两者之间通过vrrp协议利用虚拟IP进行通信,master主机对外接受请求并将请求转发至后方的realserver,backup主机只接受请求而不转发请求。某时刻当backup主机没有接受到master主机发送的信息时,于是发送vrrp通告信息并广播arp信息,宣称自己是master,如果收到其他主机发送的通告信息的优先级比自己的高,那么自己将继续转为backup,优先级别高的机器,此时就是新master主机,并接替原master主机的工作。
每个keepalived机器都对后方的realserver进行监控,只不过master负责将外部请求转发至后方的realserver,backup则不作该处理。
4.软件的安装
软件的下载
#wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
1>、keepalived的安装配置
# tar xf keepalived-1.2.12.tar.gz
# cd keepalived-1.2.12
# ./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64
# make && make install
# ln -s /usr/local/sbin/keepalived /sbin/keepalived
# chkconfig --add keepalived
# chkconfig --level 2345 keepalived on
注: --sysconf 指定Keepalived配置文件的安装路径。即路径为
/etc/keepalived/keepalived.conf
--with-kernel-dir 指定使用源码中的头文件,即include目录。只有在使用LVS时,才使用到 --with-kernel-dir 参数,其他时候是不需要的。
2>、配置文件的更改
# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
}
router_id LVS_DEVEL
}
vrrp_instance VI_1 { #定义一个vrrp组,组名唯一
state MASTER #定义改主机为keepalived的master主机
interface eth0 #监控eth0号端口
virtual_router_id 58 #虚拟路由id号为58,id号唯一,这个id决定了多播的MAC地址
priority 150 #设置本节点的优先级,master的优先级 要比backup的优先级别高,数值要大
advert_int 1 #检查间隔,默认为1秒
authentication {
auth_type PASS #认证方式,密码认证
auth_pass 1111 #认证的密码,这个密码必须和backup上的一致
}
virtual_ipaddress { #设置虚拟的ip, 这个ip是以后对外提供服务的ip。
192.168.2.100
}
}
virtual_server 192.168.2.100 80 { #虚拟主机设置,ip同上。
delay_loop 2 #服务器轮询的时间间隔
lb_algo rr #lvs的调度算法
lb_kind DR #lvs的集群模式
nat_mask 255.255.255.0
persistence_timeout 50 #会话超时50s
protocol TCP #健康检查是用tcp还是udp
real_server 10.68.2.200 80 { #后端真实主机1
weight 100 #每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。
TCP_CHECK { #健康检查项目,以下
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.68.2.201 80 { #后端真实主机2
weight 100 #每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。
TCP_CHECK { #健康检查项目,以下
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
backup主机的配置基本同上,只有以下地方需要修改。
state BACKUP #定义改主机为keepalived的backup主机,监控主master
priority 100 #设置本节点的优先级,数值要比master主机上的小
3>、master和backup安装ipvsadm软件
# yum -y install ipvsadm
5.测试keepalived的故障漂移
首先,在192.168.2.10和192.168.2.11上同时启动keepalived,此时观察master主机和backup主机
# service keepalived restart
2.10
2.11
可以看出虚拟ip此时绑定在2.10--master上,然后停止2.10上keepalived服务
# service keepalived stop
2.10
2.11
通过查看2.11上的日志,可以看到2.11已经宣告自己是master了。并且虚拟ip也漂移到新的mater机器上。
# tail -fn 100 /var/log/messages
以上的配置,keepalived的高可用功能已经实现。
6.realserver服务器配置
本例中,我在2.200和2.201上,分别安装了httpd,模拟两台web服务器。然后要在两台服务器上配置虚拟vip,使用以下脚本。
# service httpd restart
添加测试页面:
# cd /var/www/html/
[root@ser html]# ls
[root@ser html]# echo WEB1111 > index.html
# cd /var/www/html/
[root@ser2 html]# ls
[root@ser2 html]# echo WEB2222 > index.html
# vim realserver.sh
#!/bin/bash
#description: config realserver lo and apply noarp
WEB_VIP=192.168.2.100 #虚拟vip,也就是虚拟ip
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfiglo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP
/sbin/route add -host $WEB_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"1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo"2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo"1" > /proc/sys/net/ipv4/conf/default/arp_ignore
echo"2" > /proc/sys/net/ipv4/conf/default/arp_announce
sysctl -p>/dev/null 2>&1
echo"RealServer Start OK"
;;
stop)
ifconfiglo:0 down
route del$WEB_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"0" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo"0" > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo"0" > /proc/sys/net/ipv4/conf/default/arp_ignore
echo"0" > /proc/sys/net/ipv4/conf/default/arp_announce
echo"RealServer Stoped"
;;
status)
#Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $WEB_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
exit 0
# chmod +x realserver.sh
将此脚本分别在2.200和2.201上执行下。此时,我们在两台keepalived的主机上可以查看到如下相同信息。
# ./realserver.sh start
RealServer Start OK
# scp [email protected]:/root/Desktop/realserver.sh .
查看信息:
7.测试
此时,通过网页访问102.168.2.100,时,根据ipvsadm查询到的realserver主机的顺序,可以看出此时优先访问2.200
而当我们将2.200这台机器的httpd的服务停掉,首先可以看到两台keepalived主机都会将2.200这台机器剔除,此时我们再次查询时ipvsadm,只可以看到一台web服务器,再次页面访问,这时就是在访问2.2018这台机器了。
# tail -fn 100 /var/log/messages
启动2.200机器后,keepalived又会自动将改服务器添加进来。
# tail -fn 100 /var/log/messages
从上面的测试可知,lvs的负载均衡功能已经实现
遇到的问题:
问题原因:
keepalived.conf配置文件real_server的IP地址有问题。