lvs加keepalive高可用集群

lvs集群当中的高可用架构只是针对调度器的高可用

基于vrrp来实现调度器的主和备

高可用的HA架构

主调度器和备调度器(多台)

在主调度器正常工作的时候,备完全处于冗余状态(待命),不参与集群的运转,只有当主调度器出现故障时,备才会承担主调度器的工作。主调度器恢复功能后,主继续做为集群的入口,备继续处于冗余状态(取决于优先级)

keepalive基于vrrp协议来实现lvs高可用的方案

1、组播地址:

224.0.0.18,根据组播地址来进行通信,主和备之间发送报文,确定对方是否存活

2、根据优先级的大小来确定主和备的位置

3、故障切换,主挂了,备来继续工作,主恢复了,备继续等待

4、主和备之间的切换是vip地址的切换

keepalive是专门为了lvs而出现的,但是不是lvs专用的

keepalive是调度器的高可用

vip地址主备之间的切换,主在工作时,vip地址只在主上,主停止工作,vip漂移到备服务器

在主备的优先级不变的情况下,主恢复工作,vip会漂移回到主服务器

1、配优先级

2、配置vip和真实服务器

3、主备的id要一致

4、主备的id要区分

keepalive也可以使用nginx,haproxy

keepalive+nginx实现高可用

*问:脑裂是什么?

HA架构(高可用架构)中的一个特殊现象,只要使用VIP地址代理的冗余模式的高可用,都有可能出现脑裂的问题。即主和备同时都有VIP地址。

主和备无法确定各自的身份,同时出现了VIP地址,两边都起来了,但两边都无法使用。

可能原因:

1、keepalive的配置文件问题

2、心跳线(网线)断了,老化

3、网卡问题(硬件),ip地址配置冲突

4、防火墙的策略,iptables的策略,屏蔽了组播的地址广播,屏蔽了vrrp协议的报文

5、两台服务器的时间不同步也可能导致

6、其他的服务配置对心跳线的检测造成了干扰

怎么解决脑裂?

1、检查硬件,网卡,网线等

2、查看主备节点的keepalived日志,查看具体报错信息,定位问题

3、检查端口冲突和监听设置,确保其他服务没有占用keepalived使用的VIP或者监控端口。

4、查看配置文件,检查IP地址配置、心跳线检测的间隔和超时时间等配置是否合理

5、查看防火墙策略,确定心跳线检测消息没有被屏蔽

6、查看服务器网络状态,以及时间是否同步

7、准备两条心跳线,这样一条坏了,另一条仍然能继续传送

keepalive实验:

test1 192.168.233.10 主

test2 192.168.233.50 备

vip 192.168.233.100

nginx1 192.168.233.20

nginx2 192.168.233.30

客户端  192.168.233.40

步骤

1.主和备都要同样操作    

yum -y install ipvsadm keepalived

vim /etc/sysctl.conf

net.ipv4.ip_forward=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0

sysctl -p

ipvsadm -C

ipvsadm -A -t 192.168.233.100:80 -s rr

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.20:80 -g

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.30:80 -g

ipvsadm-save >/etc/sysconfig/ipvsadm

systemctl restart ipvsadm

ipvsadm -ln

2、修改主的配置文件

 cd /etc/keepalive 

vim keepalived.conf

3、修改备的配置文件

实验结果:

keepalive+nginx实现高可用(主备切换)

数据流向:

实验步骤:

1.vim check_nginx.sh

写一个check_nginx.sh的脚本

#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi

2、主的配置

 chmod 777 check_nginx.sh

     cd /etc/keepalived/

    vim keepalived.conf

script "/opt/check_nginx.sh"

调用脚本内容,检测nginx的状态

interval 5

检测的间隔时间是5s

可以删除这个后面的所有内容并添加监控配置

重启

systemctl restart nginx

systemctl restart keepalived

3、备的配置

把主的配置复制到备进行修改

scp root@192.168.233.20:/etc/keepalived/keepalived.conf /etc/keepalived/

cd /etc/keepalived/

vim keepalived.conf

实验结果

如果主nginx停止 keepalive也自动停止  备启用,vip偏移到备上

<think>我们面对的是一个LVS+Keepalived高可用集群的问题:当Master节点宕机后,备用服务器(BACKUP)接管了VIP,但访问VIP失败。我们需要系统地排查这个问题。 根据引用[1][2][3][4],我们知道正常情况下,当Master宕机时,BACKUP会接管VIP并继续提供服务。现在接管后无法访问VIP,说明故障转移过程出现了问题。 排查步骤: 1. **确认BACKUP节点状态**: - 登录BACKUP节点,检查keepalived服务是否正常运行:`systemctl status keepalived` - 检查BACKUP节点是否已经成功接管VIP:`ip addr show` 查看VIP是否绑定在BACKUP节点的网卡上(注意:VIP应该绑定在配置文件中指定的网卡接口上) 2. **检查VRRP通信**: - 根据引用[2],Master会发送VRRP广播包,当BACKUP收不到时就会接管。所以需要检查防火墙是否允许VRRP通信(VRRP协议使用IP协议号112,或者组播地址224.0.0.18)。在BACKUP节点上,使用tcpdump抓包:`tcpdump -i 网卡名 vrrp`,查看是否有VRRP报文。如果防火墙阻止了VRRP通信,可能导致脑裂或者无法正确切换。 3. **检查LVS配置**: - 在BACKUP节点上,检查LVS的配置是否正确:`ipvsadm -Ln` 查看是否有正确的虚拟服务器和后端真实服务器。注意:在BACKUP节点上,当它成为Master时,应该能够通过keepalived的配置自动LVS规则。如果LVS规则没有正确载,那么即使VIP绑定了,也无法转发流量。 4. **检查后端真实服务器(Real Server)**: - 检查后端真实服务器是否健康:使用`ipvsadm -Ln --stats`可以查看连接情况,或者直接访问后端真实服务器的服务端口,确保后端服务正常。 - 根据引用[5],Keepalived会进行健康检查,如果健康检查失败,真实服务器会被移除。但这里需要确认健康检查配置是否正确,以及后端服务器是否真的可用。 5. **检查网络路由**: - 检查客户端访问VIP的路由是否可达BACKUP节点。例如,在客户端使用`traceroute`或`mtr`命令检查路由路径。 - 检查BACKUP节点上的路由表:`ip route`,确保有正确的路由将来自VIP的流量导向后端服务器(或者通过LVS转发)。 6. **检查ARP缓存**: - 在同一个局域网内,当VIP从Master切换到BACKUP时,需要更新其他设备的ARP缓存。通常,BACKUP节点在接管VIP后会发送GARP(免费ARP)来更新其他设备的ARP缓存。但是,如果网络设备(如交换机)对ARP更新有限制,可能会导致其他设备仍然将VIP指向旧的Master节点(此时已宕机)。可以在同一网段的其他机器上检查ARP缓存:`arp -n | grep VIP`,看是否指向了BACKUP节点的MAC地址。 7. **查看日志**: - 检查keepalived的日志:`journalctl -u keepalived` 或者查看/var/log/messages,寻找错误信息。 8. **脑裂问题**: - 根据引用[2],脑裂问题可能导致两个节点都认为自己是Master,从而都持有VIP。这会导致冲突。可以通过在BACKUP节点上检查是否有多个节点同时持有VIP(比如在局域网内扫描)来排除脑裂。如果发生脑裂,需要检查VRRP通信是否正常,以及防火墙设置。 9. **配置检查**: - 检查BACKUP节点的keepalived配置文件(通常为/etc/keepalived/keepalived.conf),确认其配置正确,特别是virtual_router_id、priority、advert_int、认证密码等需要和Master节点一致(除了priority应该比Master低)。同时检查LVS的配置部分(virtual_server等)是否正确。 10. **测试健康检查脚本**: - 如果配置了自定义健康检查脚本,确保脚本在BACKUP节点上能正常运行,并且返回正确的状态。 按照以上步骤进行排查,应该能够定位问题所在。 注意:在排查过程中,可以尝试在BACKUP节点上手动停止keepalived服务,然后启动,观察日志和VIP绑定情况,以及LVS规则是否被正确创建。 相关问题: 1. 如何配置Keepalived以防止脑裂? 2. LVS+Keepalived高可用集群中,如何配置健康检查? 3. 在LVS+Keepalived集群中,如何实现负载均衡算法的选择? 4. 当LVS+Keepalived集群出现故障时,有哪些常见的故障排除方法? 5. 如何优化LVS+Keepalived集群以提高性能?</think>### LVS+Keepalived集群VIP接管失败排查指南 当Master节点宕机后,备用服务器接管VIP但访问失败,需按以下步骤系统排查: #### 1. **检查VIP绑定状态** - **在BACKUP节点执行**:`ip addr show` 确认VIP是否成功绑定到网卡(如ens33)。若未绑定: - 检查Keepalived服务状态:`systemctl status keepalived` - 查看日志定位错误:`journalctl -u keepalived -n 50` - **关键现象**:若BACKUP日志显示"Entering MASTER STATE"但VIP未绑定,可能是网卡配置错误或VRRP通信故障[^2]。 #### 2. **验证VRRP通信** - **在BACKUP节点抓包**: ```bash tcpdump -i ens33 vrrp -nn ``` - **排查点**: - 防火墙是否阻塞VRRP协议(IP协议号112/组播地址224.0.0.18) - 主备节点`virtual_router_id`是否一致(配置文件中需相同) - 网络设备是否禁止组播通信(需检查交换机配置)[^2][^4] #### 3. **检查LVS规则同步** - **在BACKUP节点执行**:`ipvsadm -Ln` 对比Master节点的规则,确认: - 虚拟IP(VIP)和端口是否存在 - 后端Real Server列表是否完整 - 调度算法(如wlc)是否一致 - **故障修复**:若规则丢失,检查Keepalived配置中`virtual_server`段是否与Master节点同步[^3][^5]。 #### 4. **后端服务健康检查** - **手动测试Real Server**: ```bash curl -I http://RealServer_IP:80 # 替换实际IP和端口 ``` - **关键点**: - 若Real Server不可达,Keepalived会将其移出LVS池(即使VIP已接管) - 检查Keepalived健康检查配置(如HTTP_GET或自定义脚本)[^5] #### 5. **ARP缓存问题** - **在客户端刷新ARP**: ```bash arp -d VIP # Linux客户端 arp -d | findstr VIP # Windows客户端 ``` - **现象**:客户端可能缓存了旧Master的MAC地址,导致流量仍发往宕机节点[^2]。 #### 6. **脑裂问题诊断** - **同时检查Master/BACKUP**: ```bash # 在Master节点(若未完全宕机) ip addr show | grep VIP ``` - **处理方案**: - 强制停止旧Master的Keepalived:`systemctl stop keepalived` - 增VRRP通信检测(如配置多播转单播)[^2][^4] #### 7. **网络配置验证** - **路由检查**:`ip route show table local | grep VIP` 确认VIP存在于本地路由表。 - **安全组/ACL**:检查云平台安全组或物理防火墙是否放行VIP流量。 --- ### 故障排查流程图 ```mermaid graph TD A[VIP访问失败] --> B{检查VIP绑定} B -->|VIP未绑定| C[检查Keepalived日志] B -->|VIP已绑定| D{检查LVS规则} D -->|规则异常| E[对比主备配置文件] D -->|规则正常| F{测试后端服务} F -->|服务不可用| G[排查Real Server] F -->|服务正常| H{检查客户端ARP} C -->|VRRP错误| I[验证防火墙/组播] I --> J[调整VRRP通信参数] ``` ### 关键配置示例(Keepalived) ```conf vrrp_instance VI_1 { state BACKUP interface ens33 # 网卡名需与实际一致 virtual_router_id 51 # 主备必须相同 priority 100 # BACKUP需低于Master advert_int 1 authentication { auth_type PASS auth_pass 1111 # 主备密码需一致 } virtual_ipaddress { 192.168.1.100/24 # VIP配置 } } ``` ### 相关问题 1. 如何防止Keepalived脑裂导致VIP冲突? 2. LVS+Keepalived中如何配置HTTP健康检查? 3. 当Real Server故障时,Keepalived如何自动更新LVS规则? 4. 如何优化VRRP协议在跨网段环境中的通信? 5. 云环境下部署LVS+Keepalived有哪些特殊注意事项? [^1]: 主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息时接管VIP [^2]: 只有作为master服务器会一直发送VRRP广播包,当slave监听不到广播包时启动接管 [^3]: 当master主机出现故障及时切换到backup节点保证业务正常 [^4]: 解决单点故障问题,实现高可用 [^5]: Keepalived通过脚本或协议对后端服务器和LVS节点的状态进行监控
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值