《云原生网络数据面可观测性最佳实践》——五、 典型问题华山论剑——5.某客户SVC后端负载不均

简介: 《云原生网络数据面可观测性最佳实践》——五、 典型问题华山论剑——5.某客户SVC后端负载不均

问题背景

客户反馈在使用ipvlan模式时,将nginx的upstream的唯一后端设置为clusterip的service,会出现负载不均的问题。

 

排查过程

当upstream与nginx不区分节点部署时,能够发现对于所有与nginx位于相同节点upstream,被动新建连接数量比不在相同节点上要小,并且相对稳定

image.png

 

增加两个副本,在不进行ct变动情况下压测,发现流量不均衡 image.png

 手动清理全部ct后,进行测试,可以发现流量趋于均衡

image.png

 

当压测过程中,对upstream所在deployment增加副本数,新增副本与已经有流量副本会有严重不均衡,经过数据面排查,ct表中数量有较大差异,lb表确认在副本调整后时间不久即完成endpoint扩充

image.png

 经过monitor抓取后发现新扩容副本和旧副本之间差别较大 

image.png

 

在monitor这对不同endpoint抓取后发现,固定nginx侧端口最终进入ct后端是一样,即如果某个端口五元组有到达某个固定upstreamct,则会一直保持分配到这个upstream,如下图: 

image.png

 初步怀疑是ct一致保持在cilium_ct4_global表中不会过期导致某个nginx端口持续会分配到固定upstream,查看ct表发现expires时间几乎保持不变,如下图:

image.png

 

根因原理

选取cilium_ct4_global表中某个键值查看,较长时间,月30s不会有过期,猜测与map的过期机制有关。

image.png

 在ciliumservicelb4_local代码逻辑中,如果能够从ct表中找到,无论是establish还是reopend,都会复用ct

image.png

cilium_ct4_global表是lru_hash类型的map: 

image.png

查询linux内核文档发现,lru_hash表的查找操作会让expires的时间重置,因此在流量较高的情况下,ct不会过期:

https://lore.kernel.org/all/d69d44ca-206c-d818-1177-c8f14d8be8d1@iogearbox.net/T/

 

lru_hashidle回收逻辑是每1s进行一次,1s内如果ct被访问过,则不会被删除并且一直复用,产生这个现象

 

关于删除时间,观察到经过10min左右的静默后,ct表中相关的数据已经过期,但是重新开始压测,发现依然存在负载不均衡的现象。分析cilium代码发现,选择后端时会通过hash的方式选择: 

/* The daddr is explicitly excluded from the hash here in order to allow for
* backend selection to choose the same backend even on different service VIPs.
*/
static __always_inline __u32 hash_from_tuple_v4(const struct ipv4_ct_tuple *tuple)
{
    return jhash_3words(tuple->saddr,
                        ((__u32)tuple->dport << 16) | tuple->sport,
                        tuple->nexthdr, HASH_INIT4_SEED);
}

 根据这段逻辑,即使ct被销毁,只要hash因子不变,一致性哈希还是会选到相同的节点,新加入的endpoint很难被选中,经过测试发现,在重建nginx的pod之后可以均衡,应该是哈希因子重建之后,恢复均匀。

 

查看代码发现

https://github.com/cilium/cilium/blob/master/bpf/lib/conntrack.h,对Service类型不会设置为Close,最终的超时时间为6小时

社区也有相关的issue:https://github.com/cilium/cilium/issues/18442

最终解决是在最新的这次提交中 https://github.com/cilium/cilium/pull/19451

提交的内容是,当Service的连接收到任何一方的fin/rst包后,在30s内如果不再有在这个连接上的包进来,那么下次命中同样conntrack的syn包会被走到CT_NEW的逻辑来重新选择后端

所以只要在这个修改的基础上,然后应用的端口复用的间隔>30s就能避免这个问题

 

修改已经cherry-pick到terwaypolicy中:

https://github.com/AliyunContainerService/terway/pull/365

 

解决办法

Terway 已经在1.2.4 版本中修复

https://help.aliyun.com/document_detail/113090.html

image.png

image.png

相关文章
|
9天前
|
人工智能 Cloud Native 安全
从云原生到 AI 原生,网关的发展趋势和最佳实践
本文整理自阿里云智能集团资深技术专家,云原生产品线中间件负责人谢吉宝(唐三)在云栖大会的精彩分享。讲师深入浅出的分享了软件架构演进过程中,网关所扮演的各类角色,AI 应用的流量新特征对软件架构和网关所提出的新诉求,以及基于阿里自身实践所带来的开源贡献和商业能力。
|
6天前
|
存储 运维 监控
云原生应用的可观察性:理解、实现与最佳实践
【10月更文挑战第10天】随着云原生技术的发展,可观察性成为确保应用性能和稳定性的重要因素。本文探讨了云原生应用可观察性的概念、实现方法及最佳实践,包括监控、日志记录和分布式追踪的核心组件,以及如何通过选择合适的工具和策略来提升应用的可观察性。
|
12天前
|
监控 Cloud Native 数据库
云原生后端
云原生后端是当今软件开发领域的一个重要概念,它代表了将软件应用程序容器化部署在云环境中,并采用微服务架构进行开发和管理的一种趋势。这种趋势的兴起,得益于云计算和微服务架构的快速发展,以及企业对高效、灵活、可扩展的应用程序架构的迫切需求。
27 2
|
1月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
262 12
|
5月前
|
运维 Kubernetes Cloud Native
构建高效云原生运维体系:Kubernetes最佳实践
【5月更文挑战第9天】 在动态和快速演变的云计算环境中,高效的运维是确保应用稳定性与性能的关键。本文将深入探讨在Kubernetes环境下,如何通过一系列最佳实践来构建一个高效且响应灵敏的云原生运维体系。文章不仅涵盖了容器化技术的选择与优化、自动化部署、持续集成/持续交付(CI/CD)流程的整合,还讨论了监控、日志管理以及灾难恢复策略的重要性。这些实践旨在帮助运维团队有效应对微服务架构下的复杂性,确保系统可靠性及业务的连续性。
|
5月前
|
Kubernetes 监控 Cloud Native
全栈声明式可观测:KubeVela开箱即用且灵活定制的云原生应用洞察
KubeVela 是一个开箱即用的现代化应用交付与管理平台。本文我们将聚焦 KubeVela 的可观测体系,介绍云原生时代的可观测挑战及 KubeVela 的解决方案。
|
3月前
|
存储 监控 Cloud Native
kubevela可观测体系问题之KubeVela云原生时代可观测性挑战的问题如何解决
kubevela可观测体系问题之KubeVela云原生时代可观测性挑战的问题如何解决
|
4月前
|
弹性计算 监控 Cloud Native
构建多模态模型,生成主机观测指标,欢迎来战丨2024天池云原生编程挑战赛
本次比赛旨在如何通过分析 ECS 性能数据和任务信息,综合利用深度学习、序列分析等先进技术,生成特定机器的性能指标。参赛者的解决方案将为云资源管理和优化决策提供重要参考,助力云计算资源的高效稳定运行和智能化调度。
641 14
|
5月前
|
自然语言处理 监控 Cloud Native
对话阿里云云原生产品负责人李国强:推进可观测产品与OpenTelemetry开源生态全面融合
阿里云宣布多款可观测产品全面升级,其中,应用实时监控服务 ARMS 在业内率先推进了与 OpenTelemetry 开源生态的全面融合,极大丰富了可观测的数据类型及规模,大幅增强了 ARMS 核心能力。本次阿里云 ARMS 产品全面升级的背景是什么?为什么会产生围绕 OpenTelemetry 进行产品演进的核心策略?在云原生、大模型等新型应用架构类型层出不穷的今天,又将如何为企业解决新的挑战?阿里云云原生应用平台产品负责人李国强接受采访解答了这些疑问,点击本文走进全新升级的阿里云可观测产品。
42003 11
|
4月前
|
人工智能 监控 Cloud Native
多款可观测产品全面升级丨阿里云云原生 5 月产品月报
多款可观测产品全面升级丨阿里云云原生 5 月产品月报。

热门文章

最新文章