应急预案:专有云V3环境中ECS集群进行上下电的方法

应急预案:专有云V3环境中ECS集群进行上下电的方法

更新时间:2020-09-04 09:41:10

1. 概述

本文主要介绍在专有云V3环境中,ECS集群进行上下电的方法。

1.1. 适用范围

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

1.2. 用户告知

  • 适用平台:x86
  • 授权级别:L2(二线技术支持工程师)
  • 临时或固化方案:临时
  • 操作复杂度:中
  • 预估执行时长:180分钟
  • 业务影响:是
    说明:操作过程中整个ECS产品的集群都需要关闭,ECS实例全部关闭,重要数据用户请自行做好备份。
  • 风险等级:高
    说明
    • 正常集群关机,数据风险可控。
    • 停止ECS实例的操作,建议灰度分批执行,每批不超过40个,每批之间间隔1min,具体下电和上电时间与ECS实例数量成正比。
    • 在下电前,请关闭ECS集群实例的宕机迁移功能。在上电完毕后,请开启ECS集群实例的宕机迁移功能。

2. 问题描述

在专有云V3环境中,需要对ECS集群进行下电操作,在ECS集群在下电后,需要执行上电操作,恢复正常使用。为了避免以下问题的发生,请按照本方案进行操作。

  • 为防止出现集群下电后,上电过程出现非预期问题。
  • 由于无标准化恢复方案导致恢复过程时间长,导致用户侧业务数据丢失等故障。

3. 解决方案

3.1. 环境检查

3.1.1. 集群终态检查

  1. 登录天基控制台,确认ECS集群已达终态。
  2. 确认ECS依赖的服务角色已达终态。

3.1.2. ECS计算集群物理机的biz_status状态巡检

  1. 登录ECSAG服务器,关于如何登录ECSAG服务器,请参见专有云如何登录ECSAG服务器
  2. 执行go2houyiregiondbrnd命令,登录houyiregiondb数据库。
  3. 执行以下SQL语句,查看ECS集群物理机相关信息,确认正常。
    select count(*),zone.cluster_name,nc.cluster_id,nc.biz_status,nc.is_nc_down,nc.status
    from nc,zone
    where zone.cluster_id=nc.cluster_id and is_deleted='0'
    group by nc.cluster_id,nc.biz_status,nc.is_nc_down,nc.status;
    系统显示类似如下。

3.1.3. 盘古状态检查

  1. 登录任意ECS集群的ECSAG服务器,执行以下命令,查询有盘古的ECS集群。
    go2riverdbrnd -e 'select name from cluster_info;'
    系统显示类似如下,下图输出的集群名称对应nuwa服务的NuwaTools#服务角色,都需要进行盘古巡检。
    +---------------------+
    | name |
    +---------------------+
    | ECS-IO7-A-550f |
    | ECS-IO7River-A-5513 |
    | ECS-IO8-A-3e7f |
    | ECS-IO8-A-5508 |
    | ECS-IO8River-A-550b |
    +---------------------+
  2. 登录天基控制台,在有盘古服务的ECS集群右侧,单击集群运维中心,选择nuwa服务和NuwaTools#服务角色,登录对应的机器。
  3. 执行以下命令,检查盘古ChunkServer节点状态。
    puadmin lscs | grep ttl
    说明
    • NORMAL:表示正常服务状态。
    • SHUTDOWN:可以手工设置,主动触发数据复制,用于ChunkServer下线 。
    • READONLY:表示ChunkServer只读,一般发生在非混合存储集群按照混合存储使用,或混合存储集群SSDCache损坏。
    • DISCONNECTED:表示ChunkServer进程停止工作。
  4. 依次执行以下命令,进行盘古数据安全检查。
    puadmin fs -abnchunk -t none
    puadmin fs -abnchunk -t onecopy
    puadmin fs -abnchunk -t lessmin
    puadmin fs -abnchunk -t lessmax
    系统显示类似如下,如输出FoundTime,则表示正常。
    ChunkId Type    FoundTime

3.2. 实施步骤

3.2.1. ECS产品下电

3.2.1.1. 关闭ECS集群宕机迁移功能
  1. 登录ECSAG服务器,执行以下命令,查询区域ID。
    go2houyirnd -Ne " select big_region_no from big_region_info ;"
  2. 执行以下命令,检查ECS集群的宕机迁移功能。
    说明:输出down_migration_flag的取值为true,则说明集群宕机迁移功能为开启状态,取值为false,则说明为关闭状态。
    go2hyapi describe_clusters region_id=[$Region_ID] | egrep 'cluster_no|down_migration_flag'
    说明:[$Region_ID]为上一步获取的区域ID。
    系统显示类似如下。
  3. 执行以下命令,关闭集群宕机迁移功能。
    注意:将所有ECS集群的宕机迁移功能都关闭。
    go2hyapi modify_cluster_attribute user_id=166 region_id=[$Region_ID] cluster_no=[$Cluster_No] down_migration_flag=false
    说明:[$Cluster_No]为需要关闭宕机迁移功能的集群。
    系统显示类似如下。
  4. 执行以下命令,检查ECS集群宕机迁移功能。输出down_migration_flag的取值为false,则说明集群宕机迁移功能关闭成功。
    go2hyapi describe_clusters region_id=[$Region_ID] | egrep 'cluster_no|down_migration_flag'
    系统显示类似如下,ECS所有集群宕机迁移功能已全部关闭。
3.2.1.2. 停止ECS实例
  1. 登录ECSAG服务器,执行以下命令,查看状态为运行中的实例ID,并将运行中的实例ID记录到vm.list文件中,实例ID之间以回车作为分隔符。
    houyiregiondb -e "select name from vm where status='running'"
    系统显示类似如下。
  2. 执行以下命令,批量停止运行中的实例。
    说明:每批40个分批执行,每批之间间隔1min。
    go2hyapibatch stop_vm_with_vmlist vm_list=vm.list
    系统显示类似如下。
  3. 执行以下命令,确认所有实例都已停止。
    houyiregiondb -e "select name from vm where status='running'"
3.2.1.3. 停止houyi管控服务
  1. 登录天基控制台,在Project框中搜索ecs,单击ECS-Controller-XXX集群右侧的集群运维中心,选择ecs-houyi服务和Apiproxy#服务角色,单击机器右侧的Terminal,登录对应的机器。
    说明:两个apiproxy容器都需要执行以下操作。
  2. 进入apiproxy容器,执行以下命令,检查Nginx服务的运行状态。
    sudo service nginx status
  3. 执行以下命令,停止Nginx服务。
    sudo service nginx stop
  4. 执行以下命令,检查Nginx服务运行状态,确认已停止。
    sudo service nginx status
  5. 进入另一个apiproxy容器,停止Nginx服务。
3.2.1.4. 停止houyi-api服务
  1. 在天基控制台,选择ecs-houyi服务和Apiserver#服务角色,单击机器右侧的Terminal,登录对应的机器。
    说明:两个apiserver容器都需要执行以下操作。
  2. 进入apiserver容器,执行以下命令,检查houyi-api服务的状态。

    sudo service houyi-api check
  3. 执行以下命令,停止houyi-api服务。

    sudo service houyi-api stop
  4. 执行以下命令,检查houyi-api服务状态,确认已停止。

    sudo service houyi-api check
  5. 进入另一个apiserver容器,停止houyi-api服务。
3.2.1.5. 停止houyi-regionmaster服务
  1. 在天基控制台,选择ecs-houyi服务和Regionmaster#服务角色,单击机器右侧的Terminal,登录对应的机器。
    说明:两个apiserver容器都需要执行以下操作。
  2. 进入regionmaster容器,执行以下命令,检查houyi-regionmaster服务状态。
    sudo service houyi-regionmaster check
  3. 执行以下命令,停止houyi-regionmaster服务。
    sudo service houyi-regionmaster stop
  4. 执行以下命令,检查houyi-regionmaster服务状态,确认已停止。
    sudo service houyi-regionmaster check
  5. 进入另一个regionmaster容器,停止houyi-regionmaster服务。
3.2.1.6. 停止ECS物理机(计算型ECS实例)的pync服务
  1. 登录ECSAG服务器,执行以下命令,查看ECS物理机的IP地址,并将IP地址记录到nc_iplist文件中,IP之间以回车作为分隔符。
    houyiregiondb -e "select ip from nc where is_deleted=0;"
  2. 执行以下命令,批量查看ECS物理机中pync进程的状态。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync status";echo -e "\n";done
  3. 执行以下命令,批量停止ECS物理机中的pync进程。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync stop";echo -e "\n";done
  4. 执行以下命令,批量查看ECS物理机中pync进程的状态,确认已停止。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync status";echo -e "\n";done
3.2.1.7. 停止ECS物理机(计算型ECS实例)的tdc服务
  1. 执行以下命令,批量查看ECS物理机中tdc进程的状态。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc status";echo -e "\n";done
  2. 执行以下命令,批量停止ECS物理机中的tdc进程。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc stop";echo -e "\n";done
  3. 执行以下命令,批量查看ECS物理机中tdc进程的状态,确认已停止。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc status";echo -e "\n";done
3.2.1.8. 停止ECS物理机(计算存储型ECS实例)的apsarad服务
  1. 登录任意ECS集群的ECSAG服务器,执行以下命令,查看包含apsarad服务的ECS集群。
    go2riverdbrnd -e 'select name from cluster_info;'
    系统显示类似如下。
    +---------------------+
    | name |
    +---------------------+
    | ECS-IO7-A-550f |
    | ECS-IO7River-A-5513 |
    | ECS-IO8-A-3e7f |
    | ECS-IO8-A-5508 |
    | ECS-IO8River-A-550b |
    +---------------------+
  2. 登录天基控制台,查找上一步获取的ECS集群,单击右侧的集群运维中心,选择nuwa服务和NuwaTools#服务角色,单击机器右侧的Terminal,登录对应的机器。
    说明:上一步获取的ECS集群对应的NuwaTools#服务角色机器都需要执行以下操作。
  3. 执行以下命令,获取ECS集群中物理机对应的IP地址。
    /apsara/deploy/puadmin lscs | grep ttl | awk -F "[ :/]+" '{print $9}' >/tmp/nc_iplist.txt
  4. 执行以下命令,批量查看ECS物理机中apsarad进程的状态。

    for ip in `cat /tmp/nc_iplist.txt`;do echo $ip; ssh $ip "cd /cloud/tool/tianji && ./apsarad status";echo -e "\n";done
  5. 执行以下命令,批量停止ECS物理机中的apsarad进程。

    for ip in `cat /tmp/nc_iplist.txt`;do echo $ip; ssh $ip "cd /cloud/tool/tianji && ./apsarad stop";echo -e "\n";done
  6. 执行以下命令,批量查看ECS物理机中apsarad进程的状态,确认已停止。

    for ip in `cat /tmp/nc_iplist.txt`;do echo $ip; ssh $ip "cd /cloud/tool/tianji && ./apsarad status";echo -e "\n";done
  7. 至此ECS产品下电操作已完毕,可以从天基控制台关闭ECS产品的物理机。

3.2.2. ECS产品上电

注意:请确保ECS产品所有物理机加电正常进入操作系统。

3.2.2.1. 启动ECS物理机(计算存储型ECS实例)的apsarad服务
  1. 登录任意ECS集群的ECSAG服务器,执行以下命令,查看包含apsarad服务的ECS集群。
    go2riverdbrnd -e 'select name from cluster_info;'
    系统显示类似如下。
    +---------------------+
    | name |
    +---------------------+
    | ECS-IO7-A-550f |
    | ECS-IO7River-A-5513 |
    | ECS-IO8-A-3e7f |
    | ECS-IO8-A-5508 |
    | ECS-IO8River-A-550b |
    +---------------------+
  2. 登录天基控制台,查找上一步获取的ECS集群,单击右侧的集群运维中心,选择nuwa服务和NuwaTools#服务角色,单击机器右侧的Terminal,登录对应的机器。
    说明:上一步获取的ECS集群对应的NuwaTools#服务角色机器都需要执行以下操作。
  3. 执行以下命令,获取ECS集群中物理机对应的IP地址。
    /apsara/deploy/puadmin lscs | grep ttl | awk -F "[ :/]+" '{print $9}' >/tmp/nc_iplist.txt
  4. 执行以下命令,批量查看ECS物理机中apsarad进程的状态。

    for ip in `cat /tmp/nc_iplist.txt`;do echo $ip; ssh $ip "cd /cloud/tool/tianji && ./apsarad status";echo -e "\n";done
  5. 执行以下命令,批量启动ECS物理机中的apsarad进程。

    for ip in `cat /tmp/nc_iplist.txt`;do echo $ip; ssh $ip "cd /cloud/tool/tianji && ./apsarad start";echo -e  "\n";done
  6. 执行以下命令,批量查看ECS物理机中apsarad进程的状态,确认已启动。

    for ip in `cat /tmp/nc_iplist.txt`;do echo $ip; ssh $ip "cd /cloud/tool/tianji && ./apsarad status";echo -e "\n";done
3.2.2.2. 启动ECS物理机(计算型ECS实例)的tdc服务
  1. 登录ECSAG服务器,执行以下命令,查看ECS物理机的IP地址,并将IP地址记录到nc_iplist文件中,IP之间以回车作为分隔符。
    houyiregiondb -e "select ip from nc where is_deleted=0;"
  2. 执行以下命令,批量查看ECS物理机中tdc进程的状态。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc status";echo -e "\n";done
  3. 执行以下命令,批量启动ECS物理机中的tdc进程。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc start";echo -e "\n";done
  4. 执行以下命令,批量查看ECS物理机中tdc进程的状态,确认已启动。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc status";echo -e "\n";done
3.2.2.3. 启动ECS物理机(计算型ECS实例)的pync服务
  1. 登录ECSAG服务器,执行以下命令,查看ECS物理机的IP地址,并将IP地址记录到nc_iplist文件中,IP之间以回车作为分隔符。
    houyiregiondb -e "select ip from nc where is_deleted=0;"
  2. 执行以下命令,批量查看ECS物理机中pync进程的状态。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync status";echo -e "\n";done
  3. 执行以下命令,批量启动ECS物理机中的pync进程。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync start";echo -e "\n";done
  4. 执行以下命令,批量查看ECS物理机中pync进程的状态,确认已启动。
    for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync status";echo -e "\n";done
3.2.2.4. 启动houyi-regionmaster服务
  1. 登录天基控制台,在Project框中搜索ecs,单击ECS-Controller-XXX集群右侧的集群运维中心,选择ecs-houyi服务和Regionmaster#服务角色,单击机器右侧的Terminal,登录对应的机器。
    说明:两个apiserver容器都需要执行以下操作。
  2. 进入regionmaster容器,执行以下命令,检查houyi-regionmaster服务状态。
    sudo service houyi-regionmaster check
  3. 执行以下命令,启动houyi-regionmaster服务。
    sudo service houyi-regionmaster start
  4. 执行以下命令,检查houyi-regionmaster服务状态,确认已启动。
    sudo service houyi-regionmaster check
  5. 进入另一个regionmaster容器,启动houyi-regionmaster服务,等待天基控制台中对应的服务到达终态。
3.2.2.5. 启动houyi-api服务
  1. 在天基控制台,选择ecs-houyi服务和Apiserver#服务角色,单击机器右侧的Terminal,登录对应的机器。
    说明:两个apiserver容器都需要执行以下操作。
  2. 进入apiserver容器,执行以下命令,检查houyi-api服务的状态。

    sudo service houyi-api check
  3. 执行以下命令,启动houyi-api服务。

    sudo service houyi-api start
  4. 执行以下命令,检查houyi-api服务状态,确认已启动。

    sudo service houyi-api check
  5. 进入另一个apiserver容器,启动houyi-api服务,等待天基控制台中对应的服务到达终态。
3.2.2.6. 启动houyi管控服务
  1. 在天基控制台,选择ecs-houyi服务和Apiproxy#服务角色,单击机器右侧的Terminal,登录对应的机器。
    说明:两个apiproxy容器都需要执行以下操作。
  2. 进入apiproxy容器,执行以下命令,检查Nginx服务的运行状态。
    sudo service nginx status
  3. 执行以下命令,启动Nginx服务。
    sudo service nginx start
  4. 执行以下命令,检查Nginx服务运行状态,确认已启动。
    sudo service nginx status
  5. 进入另一个apiproxy容器,启动Nginx服务,等待天基控制台中对应的服务到达终态。
3.2.2.7. 启动ECS实例
  1. 根据之前记录的vm.list文件,执行以下命令,重新分批启动实例。
    说明:每批20个分批执行,每批之间间隔1min。
    go2hyapibatch start_vm_with_vmlist vm_list=vm.list
  2. 执行以下命令,确认所有实例都已启动。
    houyiregiondb -e "select name from vm where status='running'"
3.2.2.8. 开启ECS集群宕机迁移
  1. 登录ECSAG服务器,执行以下命令,查询区域ID。
    go2houyirnd -Ne " select big_region_no from big_region_info ;"
  2. 执行以下命令,检查ECS集群的宕机迁移功能。输出down_migration_flag的取值为false,则说明集群宕机迁移功能为关闭状态。
    go2hyapi describe_clusters region_id=[$Region_ID] | egrep 'cluster_no|down_migration_flag'

    系统显示类似如下。

  3. 执行以下命令,开启集群宕机迁移功能。
    注意:将所有ECS集群宕机迁移功能都开启。
    go2hyapi modify_cluster_attribute user_id=166 region_id=[$Region_ID] cluster_no=[$Cluster_No] down_migration_flag=true
    说明
    • [$Region_ID]为上一步获取的区域ID。
    • [$Cluster_No]为需要开启宕机迁移功能的集群。
    系统显示类似如下。
  4. 执行以下命令,检查ECS集群宕机迁移功能。输出down_migration_flag的取值为true,则说明集群宕机迁移功能开启成功。
    go2hyapi describe_clusters region_id=[$Region_ID] | egrep 'cluster_no|down_migration_flag'
    系统显示类似如下,ECS所有集群宕机迁移功能已全部开启。

3.3. 结果验证

3.1.1. 集群终态检查

  1. 登录天基控制台,确认ECS集群已达终态。
  2. 确认ECS依赖的服务角色已达终态。

3.1.2. ECS计算集群物理机的biz_status状态巡检

  1. 登录ECSAG服务器,执行go2houyiregiondbrnd命令,登录houyiregiondb数据库。
  2. 执行以下SQL语句,查看ECS集群物理机相关信息,确认正常。
    select count(*),zone.cluster_name,nc.cluster_id,nc.biz_status,nc.is_nc_down,nc.status
    from nc,zone
    where zone.cluster_id=nc.cluster_id and is_deleted='0'
    group by nc.cluster_id,nc.biz_status,nc.is_nc_down,nc.status;
    系统显示类似如下。

3.1.3. 盘古状态检查

  1. 登录任意ECS集群的ECSAG服务器,执行以下命令,查询有盘古的ECS集群。
    go2riverdbrnd -e 'select name from cluster_info;'
    系统显示类似如下,下图输出的集群名称对应nuwa服务的NuwaTools#服务角色,都需要进行盘古巡检。
    +---------------------+
    | name |
    +---------------------+
    | ECS-IO7-A-550f |
    | ECS-IO7River-A-5513 |
    | ECS-IO8-A-3e7f |
    | ECS-IO8-A-5508 |
    | ECS-IO8River-A-550b |
    +---------------------+
  2. 登录天基控制台,在有盘古服务的ECS集群右侧,单击集群运维中心,选择nuwa服务和NuwaTools#服务角色,登录对应的机器。
  3. 执行以下命令,检查盘古ChunkServer节点状态。
    puadmin lscs | grep ttl
    说明
    • NORMAL:表示正常服务状态。
    • SHUTDOWN:可以手工设置,主动触发数据复制,用于ChunkServer下线 。
    • READONLY:表示ChunkServer只读,一般发生在非混合存储集群按照混合存储使用,或混合存储集群SSDCache损坏 。
    • DISCONNECTED:表示ChunkServer进程停止工作。
  4. 依次执行以下命令,进行盘古数据安全检查。
    puadmin fs -abnchunk -t none
    puadmin fs -abnchunk -t onecopy
    puadmin fs -abnchunk -t lessmin
    puadmin fs -abnchunk -t lessmax
    系统显示类似如下,如输出FoundTime,则表示正常。
    ChunkId Type    FoundTime

4. 回滚方案

此方案无需回滚。