五百万会话级LVS调优实践

某生产系统前端LVS软负载均衡业务会话量达5百万级,某日出现业务卡顿,LVS服务器Ping响应丢包和时延较大,本文记录了调优过程。

一、问题现象:

某生产系统前端LVS软负载均衡业务会话量达5百万级,服务器为8核16G的虚拟机,某日出现业务卡顿,LVS服务器Ping响应丢包和时延较大。top查看CPU负荷如下图:

可以看到CPU已完全跑满,业务当然要受影响了。

二、原因分析

1、经与业务侧沟通,业务侧进行了策略调整,将原长连接调整为短连接了,业务终端并没有增加,但每秒连接量有大幅增加。

2、检查业务情况,高CPU占用的进程均为ksoftirqd进程,显示为网卡软中断切换占据了全部CPU时间,导致系统卡顿,响应出现问题。

三、问题处理

1、首先尝试对虚拟服务器进行CPU扩容,从8核16G调整为16核16G,增加了8个CPU核,重启后检查服务器负荷如下:

2、此时服务器不再卡顿、Ping也恢复正常。分析可知,Cpu0目前负荷降下来了,服务器操作就不受影响了,但明显可以看到CPU 1、3、5、7、9、10、12、14核处于跑满的情况,对应占用CPU核的进程还是ksoftirqd,业务连接还是不畅。

3、检查irqbalance服务状态,可以看到irqbalance服务运行正常。

[root@lvs-10 ~]# systemctl status irqbalance
● irqbalance.service - irqbalance daemon
     Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-03-20 22:11:44 CST; 10h ago
       Docs: man:irqbalance(1)
             https://github.com/Irqbalance/irqbalance
    Process: 1091 ExecStart=/usr/sbin/irq_balancer (code=exited, status=0/SUCCESS)
   Main PID: 1098 (irqbalance)
      Tasks: 2 (limit: 98893)
     Memory: 588.0K
     CGroup: /system.slice/irqbalance.service
             └─1098 /usr/sbin/irqbalance --pid=/var/run/irqbalance.pid

3月 20 22:11:44 lvs-10.227.49.244 systemd[1]: Starting irqbalance daemon...
3月 20 22:11:44 lvs-10.227.49.244 systemd[1]: Started irqbalance daemon.

4、检查网卡的中断占用情况

[root@lvs-10 ~]# cat /proc/interrupts |egrep "CPU|ens192"
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       CPU8       CPU9       CPU10      CPU11      CPU12      CPU13      CPU14      CPU15      
 57:          0          0          0          0          0          0          0          0          0          0    2327223      80554          0          0          0          0   PCI-MSI 5767168-edge      ens192-rxtx-0
 58:          0          0          0          0          0          0          0          0          0          0          0          0    2400361          0          0          0   PCI-MSI 5767169-edge      ens192-rxtx-1
 59:          0    2305749          0          0          0          0          0          0          0          0          0          0          0      80809          0          0   PCI-MSI 5767170-edge      ens192-rxtx-2
 60:          0          0          0          0          0          0          0          0          0          0          0          0          0          0    2507274          0   PCI-MSI 5767171-edge      ens192-rxtx-3
 61:          0          0          0    2355732          0          0          0          0          0          0          0          0          0          0          0      80091   PCI-MSI 5767172-edge      ens192-rxtx-4
 62:      81682          0          0          0          0    2370166          0          0          0          0          0          0          0          0          0          0   PCI-MSI 5767173-edge      ens192-rxtx-5
 63:          0      81439          0          0          0          0          0    2269751          0          0          0          0          0          0          0          0   PCI-MSI 5767174-edge      ens192-rxtx-6
 64:          0          0      81183          0          0          0          0          0          0    2328560          0          0          0          0          0          0   PCI-MSI 5767175-edge      ens192-rxtx-7
 65:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   PCI-MSI 5767176-edge      ens192-event-8

可以看到CPU 1、3、5、7、9、10、12、14核分别对应网卡队列关系如下:

 CPU10 <------->  ens192-rxtx-0
 CPU12 <------->  ens192-rxtx-1
 CPU1  <------->  ens192-rxtx-2
 CPU14 <------->  ens192-rxtx-3
 CPU3  <------->  ens192-rxtx-4
 CPU5  <------->  ens192-rxtx-5
 CPU7  <------->  ens192-rxtx-6
 CPU9  <------->  ens192-rxtx-7

 综上可见,服务器对应的网卡队列数为8,irqbalance服务也运行生效了,网卡中断分配到了8个CPU核上,但因为业务负荷大,8个CPU核无法完成相关数据的转发任务,导致相应CPU负荷打满。解决办法应该就是增加网卡的队列数。

5、检查虚拟服务器网卡

服务器为vmware虚拟机,网卡为VMXNET3型虚拟网卡:

该型网卡仅支持8队列,不能增加队列数,将虚拟网卡更换为E1000E,测试发现E1000E虚拟网卡也仅支持8队列,不能增加队列数。看来用vmware虚拟机无法解决,遂考虑切换到物理机平台。

6、切换业务到物理机平台(2路16核CPU,总计32物理核,支持超线程)

支持的线程数如下:

[root@localhost opt]# nproc
64

 7、查看物理机网卡情况

物理机网卡为2个万兆光口,配置为bond,网卡情况

# ip add |grep "state UP"
4: ens4f0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
12: ens6f0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
18: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 10

查看物理机网卡队列数 

[root@lvs-10 tmp]# ethtool -l ens4f0
Channel parameters for ens4f0:
Pre-set maximums:
RX:             n/a
TX:             n/a
Other:          1
Combined:       63
Current hardware settings:
RX:             n/a
TX:             n/a
Other:          1
Combined:       63
[root@lvs-10 tmp]# ethtool -l ens6f0            
Channel parameters for ens6f0:
Pre-set maximums:
RX:             n/a
TX:             n/a
Other:          1
Combined:       63
Current hardware settings:
RX:             n/a
TX:             n/a
Other:          1
Combined:       63

可以看到两张网卡的队列数均支持到63个且配置为63个队列。

8、启动LVS服务,观察CPU负荷:

可以看到CPU负荷不均衡,CPU0承担了较大负荷,继续观察,服务器卡顿及Ping丢包问题依然存在。

9、检查irqbalance服务运行情况,可以看到其在运行

[root@lvs-10 log]# systemctl status irqbalance
● irqbalance.service - irqbalance daemon
     Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-03-22 14:51:20 CST; 14min ago
       Docs: man:irqbalance(1)
             https://github.com/Irqbalance/irqbalance
    Process: 1763 ExecStart=/usr/sbin/irq_balancer (code=exited, status=0/SUCCESS)
   Main PID: 1769 (irqbalance)
      Tasks: 2 (limit: 821304)
     Memory: 932.0K
     CGroup: /system.slice/irqbalance.service
             └─ 1769 /usr/sbin/irqbalance --pid=/var/run/irqbalance.pid

Mar 22 14:51:20 lvs-10.227.49.245 systemd[1]: Starting irqbalance daemon...
Mar 22 14:51:20 lvs-10.227.49.245 systemd[1]: Started irqbalance daemon.

10、查看网卡中断的CPU占用情况

[root@lvs-10 log]# cat /proc/interrupts |egrep "CPU|ens4f0"
            CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       CPU8       CPU9       CPU10      CPU11      CPU12      CPU13      CPU14      CPU15      CPU16      CPU17      CPU18      CPU19      CPU20      CPU21      CPU22      CPU23      CPU24      CPU25      CPU26      CPU27      CPU28      CPU29      CPU30      CPU31      CPU32      CPU33      CPU34      CPU35      CPU36      CPU37      CPU38      CPU39      CPU40      CPU41      CPU42      CPU43      CPU44      CPU45      CPU46      CPU47      CPU48      CPU49      CPU50      CPU51      CPU52      CPU53      CPU54      CPU55      CPU56      CPU57      CPU58      CPU59      CPU60      CPU61      CPU62      CPU63      
  90:        212         25          0          0          0         38         51    7855040          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0         46         94          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0  IR-PCI-MSI 1048576-edge      ens4f0-TxRx-0
  91:         76         23         37         32          0         83          0         74          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0    8017172          0         90          0         30          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0  IR-PCI-MSI 1048577-edge      ens4f0-TxRx-1
  92:          0          0         21    1567822          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0      52904          0        159          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0  IR-PCI-MSI 1048578-edge      ens4f0-TxRx-2
  93:          0    1846548          0         23          0         31          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0        132          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0  IR-PCI-MSI 1048579-edge      ens4f0-TxRx-3
  94:          0         42          0          0    2354851          0          0      53144          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0      

相关推荐

  1. 并发分布式锁

    2024-03-29 12:22:06       52 阅读
  2. 如何实现数据从Excel导入到数据库

    2024-03-29 12:22:06       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 12:22:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 12:22:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 12:22:06       87 阅读
  4. Python语言-面向对象

    2024-03-29 12:22:06       96 阅读

热门阅读

  1. go实现哈夫曼编码

    2024-03-29 12:22:06       45 阅读
  2. 记录一条递归查询子孙节点的sql

    2024-03-29 12:22:06       42 阅读
  3. 网络入门基础

    2024-03-29 12:22:06       45 阅读
  4. Flink基于Hudi维表Join缺陷解析及解决方案

    2024-03-29 12:22:06       48 阅读
  5. 使用 react-router-dom v6.22 的 useRoutes 路由表

    2024-03-29 12:22:06       42 阅读
  6. ubuntu22.04基于docker部署k8s1.29.x 高可用集群

    2024-03-29 12:22:06       45 阅读
  7. 以Monkey为例全方位解析App压力测试的关键要点

    2024-03-29 12:22:06       37 阅读
  8. React Material UI A Blogging Platform

    2024-03-29 12:22:06       31 阅读
  9. C语言基于TCP的多线程服务器

    2024-03-29 12:22:06       42 阅读
  10. 【Rust】——编写自动化测试(一)

    2024-03-29 12:22:06       41 阅读