环境:阿里云

压测主机:阿里云ECS(非LB后的主机)

压测目标:阿里云k8s自己的某个服务

k8s配置在kube-system 按照之前的ingress-nginx 配置了一个内网的ingress-nginx,对监听的443和80进行代理

LB为内网IP的lb,共享性的,然后在service的kube-system的ingress里添加了lb的实例

压测经过LB的时候,总是出现超时3%左右的超时连接

最后优化nginx-controler还是不行

然后试着把 ingress-nginx的Cluster类型改成了Local ---- externalTrafficPolicy: Local,结果好了。Cluster和Local为什么会影响压测结果呢

补充:

当时还优化了一部分参数,主要是nginx-ingress内参数

具体优化的参数:
1:我按照阿里云那边的建议把ingress副本调成了3个;
2:优化了部分参数,参数文章https://cloud.tencent.com/developer/article/1537695
3:对比fat环境把nginx-ingress-intranet 的类型改成了Local
具体优化的参数:
net.ipv4.tcp_syncookies = 0
fs.file-max=655350
$ cat /etc/security/limits.conf
...
*  hard  nofile  655350
*  soft  nofile  655350
*  hard  nproc  655350
*  soft  nproc  655350

$ kubectl -n kube-system edit configmap nginx-configuration
...
apiVersion: v1
data:
  keep-alive: "75"
  keep-alive-requests: "100"
  upstream-keepalive-connections: "10000"
  upstream-keepalive-requests: "100"
  upstream-keepalive-timeout: "60"

  

dev-azero环境进行压测api和azvs出现超时,错误率较多
解决:
1、绕开LB判断超时是否和LB有关,直接压测后端node:port,正常
2、api经LB到kube-system名称空间ingress-nginx-controller转发,初步判断是这里问题
3:搜索ingress调优,修改如下:

$ kubectl -n kube-system edit configmap nginx-configuration
...
apiVersion: v1
data:
  keep-alive: "75"
  keep-alive-requests: "100"
  upstream-keepalive-connections: "10000"
  upstream-keepalive-requests: "100"
  upstream-keepalive-timeout: "60"

以上内容具体解释
keep-alive-requests指令用于设置一个keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭
Keep-Alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。默认75为timeout时间,对于一些请求比较大的内部服务器通讯的场景,适当加大为120s或者300s。
upstream-keepalive-connections 到upstream服务器即到server的空闲keepalive连接的最大数量 ,如何调:根据到服务器接受请求的响应时间和qps去设置,如果相应时间为100ms,性能要达到10000qps,值需设置为1000
upstream-keepalive-requests: 设置通过一个keepalive连接可以处理的最大请求数。发出最大数量的请求后,将关闭连接。
upstream-keepalive-timeout :设置一个超时,在此超时期间,与upstream服务器的空闲keepalive连接将保持打开状态
从官网总结的这几个参数 http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive,前三个如何调优给出了结论,后两个没找到优化的依据
4:以上优化完成后错误率仍然存在,稍有降低,按照prod环境修改ingress类型为Local

aliyun---经过LB到后端k8s压测超时的问题的更多相关文章

  1. 通过k8s(Kubernetes)搭建jmeter的压测环境master-slave架构,实现弹性伸缩

    在k8s上部署jmeter的mater和slave,根据压测需求动态增减master和slave节点数量,即可以完成压测任务,又可以是资源利用最大化 https://blog.kubernauts.i ...

  2. CentOS单机安装k8s并部署.NET 6程序 压测 记录

    前面部分依照CentOS单机安装k8s并部署.NET 6程序来进行,内存.cpu.centos版本一致,之前222元买的三年8M 2c4g腾讯云轻量服务器,这个教程算是写的很详细的了,基本可以一致执行 ...

  3. HAProxy压测及参数调优

    背景 小米容器云平台,在构建云厂商集群时,需要通过HAProxy将云厂商LB流量从宿主机转到容器中,但对于HAProxy的性能没有把握.参考网上的一篇HAProxy压测文章,文章中提到HAProxy ...

  4. 使用mysqlslap对mysql进行压测,观察Azure虚拟机cpu使用率

    一直想做这个测试,原因很简单,很多人一直比较怀疑Azure的虚拟机性能,说相同的配置凭啥比阿里的虚拟机贵那么多,其实,我自己以前也怀疑过,但是接触Azure的几个月,确实发现Azure的虚拟机性能真的 ...

  5. 真刀真枪压测:基于TCPCopy的仿真压测方案

    郑昀 基于刘勤红和石雍志的实践报告 创建于2015/8/13 最后更新于2015/8/19 关键词:压测.TCPCopy.仿真测试.实时拷贝流量 本文档适用人员:技术人员 提纲: 为什么要做仿真测试 ...

  6. 压测2.0:云压测 + APM = 端到端压测解决方案

    从压力测试说起 压力测试是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患.与功能测试不同,压测是以软件响应速度为测试目标的,尤其是针对在较短时间内大量并发用户的访 ...

  7. Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)

    性能测试计划 性能测试用例 录制脚本 性能测试结果 性能测试报告 性能测试监控报告 准备工作 从脚本已录制成功之后开始进行压测 安装Jmeter拓展插件 查看 Transactions per Sec ...

  8. wrk 压测中请求无法响应问题解决过程

    ================= 遇到问题 =================$ 直连压测 wrk -c10000 -t100 -d100m http://localhost:9981/order/ ...

  9. jmeter压测、操作数据库、分布式linux下运行、webservice接口测试、charles抓包

    一.jmeter压测 在线程组中设置好,然后添加http请求,t添加聚合报告查看压力测试结果,如图: 一般压测时间10-15分钟,如果是稳定性测试,一般n*12小时,这些并发用户一直在请求. tps: ...

随机推荐

  1. 一个动态扩展表格控件列和行的 jQuery 插件

    一个动态扩展表格控件列和行的 jQuery 插件 不过这并不影响使用鸭! 看这里:https://github.com/zhuwansu/table-ext.js 一个简单的示范 html <t ...

  2. Java 项目热部署,节省构建时间的正确姿势

    上周末,帮杨小邪(我的大学室友)远程调试项目.SpringBoot 构建,没有热部署,改一下就得重启相关模块.小小的 bug ,搞了我一个多小时,大部分时间都还在构建上(特么,下次得收钱才行).我跟他 ...

  3. sg函数的变形 - 可以将一堆石子分开

    Nim is a two-player mathematic game of strategy in which players take turns removing objects from di ...

  4. Java知识体系框架

    前言:自从出生,每个人都是一个学习者或探索者.永远保持一颗谦逊的心态,遵循一定的方法和规范,去学习和实践,永远记得走走停停,多回头看看自己走过的路,温故而知新,也能更好地指导未来的路怎么走(同样,本篇 ...

  5. 如何高效实用 Git

    Git 工作流 只要项目是多人参与的,那么就需要使用正确的 Git 工作流程. 下面介绍一个简单有效的工作流程. 场景 假设有一个项目,要开发下一代的 Facebook,你就是这个项目的技术 lead ...

  6. 【JDK1.8】 Java小白的源码学习系列:HashMap

    目录 Java小白的源码学习系列:HashMap 官方文档解读 基本数据结构 基本源码解读 基本成员变量 构造器 巧妙的tableSizeFor put方法 巧妙的hash方法 JDK1.8的putV ...

  7. pandas时间序列常用操作

    目录 一.时间序列是什么 二.时间序列的选取 三.时间序列的生成 四.时间序列的偏移量 五.时间前移或后移 五.时区处理 六.时期及算术运算 七.频率转换 一.时间序列是什么 时间序列在多个时间点观察 ...

  8. TCP客户端服务器编程模型

    1.客户端调用序列 客户端编程序列如下: 调用socket函数创建套接字 调用connect连接服务器端 调用I/O函数(read/write)与服务器端通讯 调用close关闭套接字 2.服务器端调 ...

  9. Mixing .NET

  10. printf 函数笔记

    函数声明 int printf (const char*, ...); 说明 <返回值> printf ("<格式化字符串>", <参数表>); ...