应急预案:专有云V3环境中LVS物理机内存泄漏的修复方法

应急预案:专有云V3环境中LVS物理机内存泄漏的修复方法

更新时间:2020-08-17 14:31:16

1. 概述

本文主要介绍在专有云V3环境中,LVS物理机内存泄漏的修复方法。

1.1. 适用范围

  • 专有云V3企业版,SLB
    说明:适用于专有云V3.0.0~V3.7.1环境,包含V3.0.0和V3.7.1环境。

1.2. 用户告知

  • 适用平台:x86
  • 授权级别:L1(一线驻场工程师)
  • 临时或固化方案:临时
  • 操作复杂度:中
  • 预估执行时长:60分钟
  • 业务影响:否
    说明:LVS出现内存泄漏问题时,需要重启物理机,请按步骤逐台重启,对业务无影响。
  • 风险等级:中

2. 问题描述

在控制台上新创建的SLB实例,对应的vip访问不通,经典网络类型和VPC网络类型的实例均存在此问题,存量的SLB实例转发正常。

3. 解决方案

3.1. 环境检查

  1. 登录LVS机器,执行以下命令,确认可用内存为0。
    free -g
  2. 新建SLB实例后,执行以下命令,确认配置未下发至转发节点。
    sudo ipvsadm -ln|grep -A 5 [$VIP]
    说明:[$VIP]为vip地址。
  3. 执行以下命令,查看keepalived.log日志文件,显示分配vip内存报错。
    cat /home/slb/logs/keepalived.log-xxx-xxx | grep Memory
    系统显示类似如下,LVS上分配给每个vip的内存报Memory allocation problem错误。
  4. 执行以下命令,查看LVS的netframe.log日志。

    cat /var/log/netframe.log |grep acl
    系统显示类似如下,报alloc slb_acl_ctl failed错误。
    2019-05.10 14:44:30 ERROR (slb_add_acl_impl:501) svc is not exists
    2019-05.10 14:59:31 ERROR (slb_add_service_impl:250) alloc slb_acl_ctl failed

3.2. 实施步骤

如果发现内存泄漏的问题,需要将LVS物理机按照以下操作步骤,逐台下线,并重启恢复。重启完一台,引流后,再重启另一台。

LVS机器下线 

  1. 登录LVS机器,执行以下命令,检查当前的水位。
    注意:在LVS集群中下线物理机前,需要使用tsar命令查看流量。
    • 如果集群中只有两台LVS物理机,请确保单台LVS网卡流量不超过5GB(按照单台LVS两块10GB业务网卡计算)。
    • 如果集群中的LVS物理机大于2台,请确保剩余的几台都是转发状态,方可对单台LVS执行下线的操作。
    tsar -lvs -li1
  2. 执行以下命令,查看对应mgt的IP地址。
    ifconfig lo:mgt |grep inet
  3. 执行以下命令,查看LVS节点信息。
    list admin lb_node
    系统返回类似如下,确认LVS节点的service_enable参数值为enabled且转发状态为online
  4. 登录天基控制台。在Project框中搜索slb,单击对应集群右侧的集群运维中心,选择slb-controller服务与SlbAg#服务角色,单击Terminal,登录对应的机器。
  5. 登录slb-ag容器,执行cli命令,输入1并回车。
  6. 执行以下命令,关闭机器引流,移除转发流量,下线LVS物理机。
    config admin maintain_agent address [$MGT_IP] enable 0
    说明:[$MGT_IP]为第2步获取的对应mgt的IP地址。
    系统显示类似如下。
  7. 登录待下线的LVS机器,依次执行以下命令,关闭SLB转发进程并确认进程状态。
    sudo service slb_monitord stop
    sudo service slb_monitord status
    系统返回类似如下。
    说明:移除流量成功后,方可重启机器或关机维修。

重启LVS物理机

执行以下命令,使用tsar命令查看流量,确认流量为0后,执行reboot命令,重启物理机。

tsar -lvs -li1

LVS机器上线

重启进入系统后,使用CLI工具进行上线,上线成功后,在LVS上使用tsar命令确认引流成功。

  1. 登录重启后的LVS机器。执行以下命令,确认SLB转发进程已经启动。
    说明:slb_monitord进程通常会开机自启动。
    sudo service slb_monitord status
    系统返回类似如下。
  2. 登录slb-ag容器,执行cli命令,输入1并回车。
  3. 执行以下命令,开启机器引流。
    config admin maintain_agent address [$MGT_IP] enable 1
    系统返回类似如下。
  4. 执行以下命令,查看LVS节点信息。
    list admin lb_node
  5. 登录LVS机器,执行以下命令,确认引流成功。
    tsar -lvs -li1

3.3. 结果验证

登录LVS机器,执行以下命令,使用ipvsadm命令查看新建的SLB实例的vip,确认配置已下发至转发节点。

sudo ipvsadm -Ln|grep -A 5 [$VIP]

系统显示类似如下。

4. 回滚方案

单台LVS下线后,对存量的SLB业务产生影响,请参见LVS机器上线,进行上线。