记一次keepalived lvs 负载均衡异常的问题
属于一个线上的问题,就大概介绍下处理
背景
一个需要需要进行内外网流量的切分(基于dns)外部dns 解析到一个公网ip,然后公网ip 映射到内网的lvs vip
为了部署简单,内网流量以及外网流量使用了一套keepalived(dr 模式,够用了),不同业务流量的请求到vip
然后vip 转发到实际提供服务的服务器节点
现象
在进行测试阶段,配置好keepavlied 之后,测试lb 都是正常的(包括内网网的处理,但是外网的是基于内部vip的)
在基本的测试都没问题之后,添加了外网ip到内网的映射(基于F5),同时修改了dns A记录(以前外网的ip还可用,这样业务影响很小)
dns 切换完成之后,观测外网服务节点的流量很比较正常(基于prometheus+node exporter),然后晚上突然收到报警服务
有异常,因为在路上,只能手机测试下(没有问题,应该不是100%问题),后边过了20分钟,收到短信通知服务恢
复(实际上系统负载小了,系统自动恢复可用了)
排查
到家之后,查看系统配置(通过vpn),以及lvs 状态,发现一个很怪异的问题,lvs 外网流量只有一个节点可处理请求,其他节点基本就是空闲状态
自然怀疑lvs 是不是故障了,但是内网流量很正常,lvs real server 的配置也没问题,一句话系统的负载均衡有问题,因为排查很晚了,还没解决
就休息了(临时调整了一些服务器参数,保障业务处理会好点)
找到问题原因
第二天到公司,查看服务的请求日志发现了一个比较怪异的问题,理论上我是要内外网流量切换的,但是提供服务的机器,获取到的一直是同一个ip
(F5入口的),这个就比较怪异了,而且也不应该的,因为我们系统需要回话的处理,keepalived 配置了回话保持,基于lvs的策略,负载当然就不均
衡了(之前还尝试过修改lvs 的负载均衡算法,按照实际的请求都是一个ip,修改也没用),之后联系开通外网ip的同事,调整f5提供ip 的模式,让
用户端ip可以透传到lvs 的vip 请求数据包中,通过ipvsadmn -ln 观测master 的链接请求,负载均衡立马正常,各real server 都可以提供服务了,系统
响应以及状态也都慢慢正常了
说明
以上是一个关于lvs的问题,很多时候我们可能只关注了一点,同时只测试了系统的部分链路,这样可能就会有风险,同时我们在搞方案设计的时候
应该对于整个请求的链路以及环节都应该清楚点,至少解决问题会快很多,不会那么盲目,还有就是多看看源码,了解系统的工作原理也是很重要的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-07-11 dbt 集成presto试用
2019-07-11 dbt 0.14.0 试用
2019-07-11 dbt 0.14.0 发布
2018-07-11 purescript 基本试用
2017-07-11 “VT-x is not available. (VERR_VMX_NO_VMX)” in VirtualBox