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

本文主要是介绍【实例分享】访问后端服务超时,银河麒麟服务器操作系统分析及处理建议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.chinasem.cn/article/1054185

相关文章

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾