keepalive工作原理和优点
代理服务器和调度都是单点模式,keepalive就是用来实现调度的高可用集群。
keepalive的工作原理:
keepalive就是专门为了lvs集群开发出来的,但是适用场景不仅仅局限于lvs。
而且keepalive为后台真实服务器做了一个健康检查,当服务不可用时,会自动的移除ipvs的转发策略,服务恢复时,会自动重新把策略加入到ipvs。
他是基于vrrp协议(vrrp:虚拟路由的冗余协议)实现的调度器的高可用方案。
keepalive可以实现:
1、主备切换,优先级,当主故障时,可以自动切换到备,主恢复之后,如果主的优先级比备高,还是会自动的切换到主。
2、故障检测和恢复功能
3、主备之间通过组播地址(224.0.0.18),互相发送健检查的报文,确定主备之间通信(确定双方是否工作正常)。
4、通过配置vip来实现集群的入口,vrrp是一个冗余(一方工作另一方备着)协议,主在工作时,备完全不参与集群的工作,只是监听主的状态。
keepalived实现lvs负载均衡
数据流向图如下:
zw4:主调度器 IP:192.168.254.14 VIP:192.168.254.100
zw5:备调度器 IP:192.168.254.15
zw6:后端真实服务器1 IP:192.168.254.16
tocat1:后端真实服务器2 IP:192.168.254.21
1、安装ipvsadm 和 keepalived软件
apt -y install ipvsadm keepalived
2、复制移动keepalive配置文件到 /etc/keepalived/下
cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
3、修改主调度器的 keepalive 配置文件 keepalived.conf
global_defs:整个vrrp的全局配置
- vrrp_iptables:配置了之后,keepalive重启之后不会添加iptables的策略
vrrp_instance VI_1:指定网卡设备和vip地址的模块,以及确定vrrp中主备的关系
virtual_server:指定转发的策略,以及lvs的工作模式和负载均衡的算法
check:负责健康检查,主要是检查服务的端口(监控服务状态一般就是监听端口)。
script:文本模式,也可以支持脚本形式的监控。
keepalived.conf配置文件具体解释如下
! Configuration File for keepalived 2 3 global_defs { 4 notification_email { 5 acassen 6 } 7 notification_email_from Alexandre.Cassen@firewall.loc 8 smtp_server 127.0.0.1
#本地邮件服务,可以删除不要
9 smtp_connect_timeout 30
#本地邮件服务,可以删除不要
10 router_id LVS_01
#确定主备服务器的id号,必须不同
11 vrrp_iptables
配置了之后keepalived重启之后不会添加iptables的策略。
12 } 13 14 vrrp_instance VI_1 { 15 state MASTER
确定服务器的身份 主
16 interface ens33
指定网卡设备
17 virtual_router_id 50
虚拟路由的id,主备保持一致
18 priority 100
优先级。谁数字大就是主
19 advert_int 1
主备之间检查的心跳率
20 virtual_ipaddress { 21 192.168.233.100
集群的vip地址
22 } 23 } 24 25 virtual_server 192.168.233.100 80 {
26 delay_loop 6
健康检查的间隔时间
27 lb_algo rr
负载均衡的算法
28 lb_kind DR
lvs的模式
29 persistence_timeout 50
连接保持的时间
30 protocol TCP
服务采用的协议
31 #指定的后台真实的服务器 32 real_server 192.168.233.61 80 { 33 weight 1
负载算法的圈子
34 TCP_CHECK {
tcp的健康
35 connect_port 80
检查的目标端口是80
36 connect_timeout 3
连接检查的超时时间3秒
37 retry 3
重试的次数
38 delay_before_retry 3
重试的间隔时间
39 } 40 } 41 } 42 }
4、修改备调度器的 keepalive 配置文件 keepalived.conf
首先把主调度器的 keepalived.conf 复制到 备调度器 /etc/keepalived/上
再配置 keepalived.conf
5、重启keepalived服务后检查配置的转发策略是否生效
6、检查主调度器VIP是否产生
这时候VIP地址已经绑定到了主调度器上
并且备调度器上没有VIP
7、模拟故障切换,主的VIP能否跳到备
stop keepalived.service停掉主的服务后,这时候VIP地址已经绑定到了备调度器上
8、检查主恢复之后VIP是否能够回到主
9、配置两台调度器内核文件
route add -host 192.168.254.100 dev ens33 #路由指向到服务器
10、配置真实服务器
首先配置网卡ens37
再配置真实服务器内核配置文件
最后路由指向到服务器
route add -host 192.168.254.100 dev ens37
11、实现,这时候我们访问192.168.254.100,调度器会采取轮询方式让我们访问两个后端真实服务器
keepalived实现nginx代理高可用
keepalived可以不依赖lvs的环境实现故障切换个高可用
数据流向图如下:
zw4:主代理服务器 IP:192.168.254.14 VIP:192.168.254.100
zw5:备代理服务器 IP:192.168.254.15
zw6:后端真实服务器1 IP:192.168.254.16
tocat1:后端真实服务器2 IP:192.168.254.21
1、修改主代理服务器的keepalived配置文件,调动keepalived脚本模块
调用nginx检查的配置
- 配置从可执行的脚本中来,位置一定是绝对路径。
- interval 5
- 每5秒通过脚本检查nginx的状态
2、配置脚本check_nginx.sh
表示如果关闭了nginx,则会关闭keepalived服务。
并使用chmod 777给脚本赋执行权限
3、修改备代理服务器的keepalived配置文件
router_id LVS_02、state BACKUP和priority 90
4、先启动nginx,在启动keepalived,检查主备切换是否正常
这时候VIP地址在主调度器上,不在备调度器上。
5、配置两台代理服务器的nginx
这里我们使用的是7层代理轮询,两台代理服务器配置一样
6、配置完之后重启两台代理服务器的nginx,这时候我们访问192.168.254.100这个VIP地址,便可访问两个真实服务器的nginx
这时候我们我们关闭主代理服务器的keepalived服务,VIP地址会移交给备代理服务器,我们依然可以正常访问nginx,实现了高可用。
脑裂
在HA系统,只要是通过VIP这个机制实现的,都可能会出现脑裂这个问题。
即VIP地址同时出现在了主和备上
脑裂原因
1、防火墙屏蔽了主备之间的224.0.0.1的报文,导致互相都收不到,就认为都已经挂了,都认为自己是主。
2、网卡出现了故障(硬件故障),配置出问题:IP地址冲突。
3、心跳线:网线之间连接故障,断开,老话。
4、keepalived配置文件有问题,router_id一样、优先级一样、虚拟路由不一样都可能会导致问题(80%)。
解决办法
软件层面
1、抓包进行定位,查看组播的报文是否正常
2、配置文件进行排查(网卡配置,应用配置)
硬件层面
1、更换心跳线(网线)进行测试
2、网卡硬件的问题
3、内存和cpu,硬盘空间不足,也会出现脑裂
keepalived重点
vrrp协议实现的冗余高可用。
224.0.0.18发送组播的报文。
lvs的负载均衡支持的算法:rr、wrr、lc、wlc
脑裂的现象,原因及解决方法