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

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

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

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清