LVS架构中,不管是NAT还是DR模式,当后端的rs宕机时,调度器依然会把请求转发到宕掉的rs上,这样的结果不是我们想要的,keepalived就可以解决该问题,它不仅有高可用功能,同时还有负载均衡的功能。在调度器上安装了keepalived就不需要再安装ipvsadm了,也不用去编写关于LVS的脚本了,也就是说keepalived已经嵌入了LVS功能,完整的keepalived+LVS架构需要有两台调度器实现高可用,提供调度服务的只需要一台,另一台备用。
环境介绍
主keepalived(调度器):192.168.153.134
备keepalived(调度器):192.168.153.133(在文章的最后加入)
真实服务器rs1:192.168.153.135
真实服务器rs2:192.168.153.136
VIP :192.168.153.110
在调度器上安装keepalived
yum install -y keepalived
编辑keepalived配置文件
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
#备用服务器上为 BACKUP
state MASTER
#绑定vip的网卡为ens33,你的网卡和我的可能不一样,这里需要你改一下
interface ens33
virtual_router_id 51
#备用服务器上为90
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 111111
}
virtual_ipaddress {
192.168.153.110
}
}
virtual_server 192.168.153.110 80 {
#(每隔10秒查询realserver状态)
delay_loop 10
#(lvs 算法)
lb_algo wlc
#(DR模式)
lb_kind DR
#(同一IP的连接60秒内被分配到同一台realserver)
persistence_timeout 60
#(用TCP协议检查realserver状态)
protocol TCP
real_server 192.168.153.135 80 {
#(权重)
weight 100
TCP_CHECK {
#(10秒无响应超时)
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.153.136 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
如果之前在调度器上执行过LVS脚本
ipvsadm-C 把之前的ipvsadm规则清空
systemctl restart network 可以把之前设置的VIP删除掉
由于在keepalived上定义的LVS是DR模式,所以需要在两台真实服务器rs上执行lvs_dr_rs.sh脚本(同之前介绍LVS的文章中关于DR模式脚本)
分别在两台真实服务器上执行
bash /usr/local/sbin/lvs_dr_rs.sh
脚本如下
#/bin/bash
vip=192.168.153.110
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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
分别在真实服务器rs上执行完脚本后在调度器上启动keepalived服务
systemctl start keepalived
ps aux | grep keepalived 检查有无keepalived进程
检验:
在浏览器访问vip(192.168.153.110)
可以在调度器上执行ipvsadm -ln命令查看连接数
#ipvsadm -ln
IPVirtual Server version 1.2.1 (size=4096)
ProtLocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.153.110:80 wlc persistent 60
-> 192.168.153.135:80 Route 100 0 0
-> 192.168.153.136:80 Route 100 4 7
停用153.136nginx后
#ipvsadm -ln
IPVirtual Server version 1.2.1 (size=4096)
ProtLocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.153.110:80 wlc persistent 60
-> 192.168.153.135:80 Route 100 4 0
大功告成~
加入高可用keepalived的备用调度器
backup(调度器):192.168.153.133
安装keepalived
配置备用keepalived配置文件
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
#备用服务器上为 BACKUP
state BACKUP
#绑定vip的网卡为ens33,你的网卡和我的可能不一样,这里需要你改一下
interface ens33
virtual_router_id 51
#备用服务器上为90
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 111111
}
virtual_ipaddress {
192.168.153.110
}
}
virtual_server 192.168.153.110 80 {
#(每隔10秒查询realserver状态)
delay_loop 10
#(lvs 算法)
lb_algo wlc
#(DR模式)
lb_kind DR
#(同一IP的连接60秒内被分配到同一台realserver)
persistence_timeout 60
#(用TCP协议检查realserver状态)
protocol TCP
real_server 192.168.153.135 80 {
#(权重)
weight 100
TCP_CHECK {
#(10秒无响应超时)
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.153.136 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
配置完后启动keepalived服务
systemctl start keepalived
停用主调度器的keepalived
systemctl stop keepalived
浏览网页测试依然正常,已正常切换到backup上
启动master停用backup调度器
依然可以访问网页。启动backup备用
测试成功