【实例分享】访问后端服务超时,银河麒麟服务器操作系统分析及处理建议

ops/2024/9/23 3:05:58/

1.服务器环境以及配置

【机型】

处理器:

Intel 32核

内存:

128G

整机类型/架构:

x86_64虚拟机

【内核版本】

4.19.90-25.22.v2101.kylin.x86_64

【OS镜像版本】

kylin server V10 SP2

【第三方软件】

开阳k8s

2.问题现象描述

前端机器访问后端容器超时,业务中断。

3.问题分析

3.1. 网络环境拓扑

centos前端访问腾讯负载均衡CLB的9083端口,CLB从k8s集群的20个节点中选择一台将前端的访问请求转发到其30170端口,转发节点再将前端的访问请求转发到提供所需服务的worker node,由worker node的pod为前端提供服务。

3.2. 2月20日网络数据包文件分析

hive.n920e1nodap0050.0220.pcap为2月20日复现问题时在转发节点n920e1nodap0050捕获的网络数据包文件。

转发节点n920e1nodap0050,tcp stream 171为前端和后端之间的TCP连接。

前端发送给转发节点的783号包的seq为2879,tcp data len为4。

图 2

前端发送给转发节点的784号包的tcp data len为1398, IP首部带有不允许分片的flag。

图 3

图 4

前端发送给转发节点的785号包的tcp data len为1307。

图 5

转发节点发送给前端的786号包的ack为2883,这正好是783号的seq+len。说明,后端pod收到了783号包,786号包是对783包的ack。

图 6

786号包带有TCP选项SACK,向发送端(前端)报告了一个空缺,后端pod还未收到seq为2883到4280(长度为1398)的数据,即784号包,就已经收到了seq为4281到5587(长度为1307)的数据,即785号包。

图 7

前端收到786号包后,了解到后端pod已经收到了785号包,但是没有收到784号包,于是重传784号包,重传多次,均未收到后端pod对该包的ack,最终导致TCP连接中断。

图 8

图 9

3.3. 2月29日网络数据包文件分析

n920e1infap0001.0229.pcap为2月29日复现问题时在转发节点n920e1infap0001捕获的网络数据包文件。tcp stream 59为转发节点和后端pod之间的TCP连接。

图 10

转发节点发送给后端pod的864号包包含seq从2939到2942长度为4的tcp data。

图 11

转发节点发送给后端pod的865号包包含seq从4341到5073长度为733的tcp data。还未发送seq为2943到4340长度为1398的tcp data,就已经发送了seq从4341到5073长度为733的tcp data。因次,wireshark给865号包打上了”TCP Previous segment not captured”的提示。和2月20日的情形一致,后端pod均未收到长度为1398的tcp data。

图 12

3.4 长度为1398的tcp data丢包原因分析

由3.2部分的分析可知,后端转发节点的eth0网卡收到了frame len为1464,tcp len为1398的tcp数据包,但是后端pod并未收到。由3.3部分的分析可知,后端转发节点的eth0网卡并未将tcp len为1398的tcp数据包转发给后端pod。

后端转发节点的eth0网卡收到前端发送的数据包之后,在转发给后端pod前,会先交给后端转发节点的tunl0网卡处理(设置IP头部数据等)。

因此,tcp len为1398的tcp数据包是在转发节点的tunl0网卡的接收或者转发过程中丢失的。

小包可以成功接收,但收不到大包,一个常见的原因是IP数据报的长度超过了网卡的mtu。

tcp len为1398的tcp数据包的IP数据报的长度为20(IP首部长度)+32(TCP首部长度)+1398(应用数据)=1450。

图 13

k8s集群节点的tunl0网卡的mtu为1440,小于tcp len为1398的IP数据报的长度1450。由图 4可知,前端发送的数据包IP首部带有不允许分片的flag。因此,该数据包会在转发节点的tunl0网卡接收过程中被drop掉。

图 14

4.问题分析结果

前端机器访问后端容器超时的原因是: 前端发送的长度超过后端转发节点的tunl0网卡的mtu的IP数据报在传输过程中被后端转发节点的tunl0网卡drop,前端多次重传,均收不到对该类包的ack,最终导致TCP连接中断。

5.后续计划与建议

建议联系k8s厂商或客户侧k8s环境管理员,适当调整集群节点的tunl0网卡的mtu。


http://www.ppmy.cn/ops/49915.html

相关文章

探索PostgreSQL:从基础到进阶的实用教程

PostgreSQL是一种强大、开源的对象关系型数据库管理系统,广泛应用于各类数据密集型应用中。本文将带领你从基础知识到高级特性,全面了解PostgreSQL的使用和管理技巧,帮助你在工作和学习中得心应手。 一、PostgreSQL简介 PostgreSQL是什么 PostgreSQL,简称Postgres,是一个…

大众点评_token,mtgsig

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载&#xff0…

LLVM Cpu0 新后端10

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

【SCAU数据挖掘】数据挖掘期末总复习题库判断题及解析

1.离群点可以是合法的数据对象或者值。( ✓) 解析:离群点(Outliers)通常是与数据集中其他数据显著不同的数据点,但它们可以是合法的数据值。这些值可能是由于测量误差、数据录入错误、数据分布的自然属性等原因产生的。 3.关联规则挖掘过程是发现满足最小支持度的所有项集…

机器学习——决策树

决策树 决策树可以理解为是一颗倒立的树,叶子在下端,根在最上面 一层一层连接的是交内部节点,内部节点主要是一些条件判断表达式,叶子叫叶节点,叶节点其实就是最终的预测结果,那么当输入x进去,…

React基础教程(07):条件渲染

1 条件渲染 使用条件渲染,结合TodoList案例,进行完善,实现以下功能: 当列表中的数据为空的时候,现实提示信息暂无待办事项当列表中存在数据的时候,提示信息消失 这里介绍三种实现方式。 注意这里的Empty是…

如何有效处理服务器后台密码暴露

服务器后台密码的暴露是信息安全领域中的严重事件,它可能引发未经授权的数据访问、恶意软件植入或系统功能滥用等一系列问题。本文将探讨几种处理服务器后台密码暴露的有效策略,包括紧急响应步骤、密码安全增强措施及长期预防机制,并提供实际…

从 Solana 课程顺利毕业获得高潜岗位,他的 Web3 开发探险之旅

在 TinTinLand 的学习,给了我入门 Web3 行业的 Entry Ticket,我认为这张 Ticket 是非常宝贵和重要的。 Alex,一位从某家知名研究所毅然辞职,踏入Web3世界的年轻开发者,凭借在 TinTinLand 推出的「Solana 黑客松先锋训练…