lvs的单点故障:当lvs负载均衡器出现故障的时候,那么后端所有的服务器都将无法访问;
lvs对后台服务器没有健康监测机制:当后台服务器宕机之后lvs还是会调度服务到后台的服务器;
所以我们就需要一款工具来解决以上问题。
keepalived是基于VRRP协议进行工作的,其内部结构为:
lvs wrapper:提供lvs的调度
checker:进行rs的健康监测机制,配置lvs wrapper进行调度
VRRP stack:调用vrrp协议进行工作
smtp:进行邮件通知
watchdog:发现keepalived内部服务异常立即重启服务,防止软件故障;
一、实验环境
4台服务器,两台lvs负载均衡,两台RS服务器提供http服务:
-
lvs-1:192.168.11.100
-
lvs-2:192.168.11.101
-
RS-1:192.168.11.201
-
RS-2:192.168.11.202
拓扑如下:
二、实验步骤
RS配置:
-
安装nginx并提供网页
-
配置Lvs-DR调度方法,在rs执行如下脚本:
#RS服务器配置VIP地址和主机路由,并且关闭arp应答和响应# #!/bin/bash # VIP=192.168.11.250 NETMASK=255.255.255.255 BRO=192.168.11.230 NETWORK=lo:0 case $1 in start) 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/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig $NETWORK $VIP netmask $NETMASK broadcast $BRO up route add -host $VIP $NETWORK ;; stop) 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/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig $NETWORK down route del -host $VIP $NETWORK ;; *) echo "Usage:$0 [start|stop]" esac
keepalived配置:
-
采用lvs-dr调度算法,两台lvs服务器都需要安装keepalived
yum install -y keepalived ipvsadm
-
编辑keepalived配置文件/etc/keepalived/keepalived.conf,两台lvs配置文件需要一致:
! Configuration File for keepalived global_defs { notification_email { root@localhost #当主从服务器发生变更的时候发邮件到此邮箱进行通知# } notification_email_from keepalived@localhost #通过keepalived@localhost发邮件# smtp_server 127.0.0.1 #smtp服务器配置# smtp_connect_timeout 30 #smtp服务器连接超时时长# router_id node1 #运行keepalived机器的标识# vrrp_mcast_group4 224.0.115.15 #组播地址为224.0.115.115# } vrrp_instance VI_1 { #vrrp VI_1实例# stater MASTER #本机为MASTER# interface ens33 #虚拟ip配置到ens33网卡# virtual_router_id 14 #虚拟路由编号为14# priority 100 #自身优先级为100,范围从1-254# advert_int 1 #每1秒钟发出一次组播信息通告自身优先级和虚拟路由编号# authentication { #进行认证# auth_type PASS #认证方法为简单字符认证# auth_pass b1946ac9 #认证字符为b1946ac9,两台服务器需要一致# } virtual_ipaddress { 192.168.11.250/24 dev ens33 #浮动ip地址为192.168.11.250,并且配置为ens33的辅助ip,也可以绑定到别名网卡上# } } virtual_server 192.168.11.250 80 { #lvs的vip地址# delay_loop 3 #lvs轮询时间间隔# lb_algo rr #RS调度算法为轮询# lb_kind DR #LVS调度方式为DR# protocol TCP #使用的协议,仅支持TCP协议# real_server 192.168.11.201 80 { #RS-1的地址和端口# weight 1 #RS-1权重为1# HTTP_GET { #做应用层健康状况监测# url { path / #要监控的url为/# status_code 200 #响应状态码为200表示健康# } } connect_timeout 1 #RS连接超时时长为1秒# nb_get_retry 3 #最大重试连接次数为3次# delay_before_retry 1 #两次连接重试间隔为1秒# } real_server 192.168.11.202 80 { #第二台RS# weight 1 HTTP_GET { url { path / status_code 200 } } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 }
-
两台lvs都需要做如此配置,不过第二台服务器需要修改优先级和状态为BACKUP;
-
启动keepalived,然后通过ipvsadm -ln可以看到lvs已经配置成功,当一台RS的网页文件被删除之后则被认为RS故障,会从ipvs中移除。
注意:
RS还可以进行传输层的健康状态检测,参数为:
TCP_CHECK {
connect_ip #向RS的那个地址发起健康状态检测,默认为RIP#
connect_port #想RS的哪个端口发起健康状态检测,默认为提供服务的端口#
bindto #发出健康状态检测的源地址,默认为lvs的dip#
bindto #发出健康状态检测的源端口,默认为lvs的对外提供服务端口#
connect_timeout #超时连接时长#
}
原创文章,作者:王子豪,如若转载,请注明出处:http://www.178linux.com/79338