通用方案:升级到专有云V3.5后5U操作系统的Docker宿主机负载过高

通用方案:升级到专有云V3.5后5U操作系统的Docker宿主机负载过高

更新时间:2020-06-08 21:06:22

1. 概述

本文主要介绍由低版本升级到专有云V3.5后,5U操作系统Docker宿主机负载过高的解决方法。

1.1. 适用范围

  • 专有云V3,飞天操作系统

说明:

  • 适用于专有云V3.5及以上版本,并且Docker宿主机是5U操作系统的项目,哪台Docker宿主机出现负载高导致夯机,经过阿里云技术支持排查后,再添加每天清理cache的计划任务,未出现此现象的机器不可用。
  • 当出现负载过高的问题时,先由阿里云技术支持排查确认问题相似后,再使用此变更方案。

1.2. 用户告知

  • 操作方式:黑屏
  • 操作复杂度:低
  • 预估执行时长:单台预估执行时长为15分钟
  • 风险等级:低
    说明:无风险。
  • Docker宿主机负载过高可被监控发现。
  • 灰度策略:一台机器操作完成之后在操作另一台机器,操作时间间隔为3小时。每台机器添加计划任务时,建议间隔5分钟,例如一台是0点执行,另一台是0点5分执行,下一台是0点10分执行。

2. 问题描述

在专有云V3.5及以上版本中,Docker宿主机使用5U系统。在升级时,多次出现Docker宿主机有负载高的现象,影响升级,甚至影响到客户业务,最终判断是5U内核内存缺陷导致该问题。在5U内核下暂无根本解决方法,短期采用物理机提高内存使用率的水位线且定期清理缓存来缓解,固化的方法则需要升级到7U内核。

3. 解决方案

3.1. 环境检查

检查Docker宿主机的内核版本

登录Docker宿主机,执行以下命令,查看内核版本,5U内核的版本都需要进行操作。本文以2.6.32-220.23.2.ali1113.el5.x86_64为例,包括但不限于el5系列的内核。

uname -r

检查内核参数和定时任务是否符合预期

  1. 执行以下命令,查看并记录内核参数的值。
    cat /proc/sys/vm/min_free_kbytes
    确认不符合以下预期数值,需要进行修改,以实际环境为准。
    注意:如果符合预期数值则无需修改。
  2. 执行以下命令,确认固化配置。
    grep "vm.min_free_kbytes" /etc/sysctl.conf
    系统显示类似如下,如果已经有固化配置,且是预期数值,则无需再修改。
  3. 执行以下命令,查看定时任务。
    crontab -l
    确认不存在符合预期的以下定时任务,需要进行修改,以实际环境为准。
    注意:确认存在预期的定时任务则无需修改。
    9ef692be-e18a-4310-8655-425c294f8f7c.png

检查宿主机是否有PanguMaster Primary节点

  1. 登录OPS1服务器,执行以下命令,获取ApsaraAG的IP地址。
    tj_show -r="pangu.PanguTools#"
  2. 登录到ApsaraAG服务器,切换到admin用户,执行以下命令,检查宿主机是否有PanguMaster Primary节点。如果宿主机上有PanguMaster,且是Primary节点,则可能导致主备切换,需要和阿里云技术支持共同确认。
    puadmin gems
    系统显示类似如下。

3.2. 实施步骤

配置内核参数

  1. 执行以下命令,配置内核参数,配置参数的值以实际环境为准。
    echo 8192000 > /proc/sys/vm/min_free_kbytes
  2. 执行以下命令,固化内核参数,配置参数的值以实际环境为准。
    echo "vm.min_free_kbytes = 8192000" >> /etc/sysctl.conf

配置定时任务

  1. 执行以下命令,备份定时任务的配置文件。
    cp /var/spool/cron/root /var/spool/cron/root.bak
  2. 执行以下命令,配置定时任务,执行时间可以自定义,默认每天0点执行一次定时任务。
    echo "0 0 * * * echo 1 > /proc/sys/vm/drop_caches" >> /var/spool/cron/root
    说明:
    • 建议每台机器执行定时任务的时间分散,间隔五分钟,如一台机器是0点执行定时任务,另一台机器0点5分执行定时任务,下一台机器0点10分执行定时任务。
    • 哪台Docker宿主机出现负载高导致夯机,经过阿里云技术支持排查后,再添加每天清理cache的计划任务,未出现此现象的机器不可用。

3.3. 结果验证

验证内核参数和定时任务是否修改。

  1. 执行以下命令,确认内核参数已修改。
    cat /proc/sys/vm/min_free_kbytes
    系统显示类似如下。
  2. 执行以下命令,确认固化配置已添加。

    grep "vm.min_free_kbytes" /etc/sysctl.conf
    系统显示类似如下。
  3. 执行以下命令,确认定时任务添加成功。
    crontab -l
    系统显示类似如下。
    b0cdc984-358c-4a9f-83a9-63366f93d3fc.png
    注意:如果现场设置的不是每天0点执行定时任务,则以实际环境的验证为准。

4. 回滚方案

  1. 登录Docker宿主机,执行以下命令,还原内核参数配置。
    echo [$Num] > /proc/sys/vm/min_free_kbytes
    说明:[$Num]为确认内核参数和定时任务是否符合预期步骤中记录内核参数的值。
  2. 删除/etc/sysctl.conf文件中的vm.min_free_kbytes = 8192000所在行。
  3. 编辑/var/spool/cron/root文件,删除以下配置。
    注意:可以使用crontab -e命令编辑定时任务,然后删除以下配置。
    0 0 * * * echo 1 > /proc/sys/vm/drop_caches
    说明:因为定时任务执行的时间分散,需按实际情况处理。
  4. 依次执行以下命令,确认回滚成功。
    cat /proc/sys/vm/min_free_kbytes
    grep "vm.min_free_kbytes" /etc/sysctl.conf
    crontab -l