应急预案:专有云V3环境中ECS集群进行上下电的方法
1. 概述
本文主要介绍在专有云V3环境中,ECS集群进行上下电的方法。
1.1. 适用范围
- 专有云V3企业版,ECS
说明:适用于专有云企业版V3.0.0~V3.12.1r环境,包含V3.0.0和V3.12.1r环境。
1.2. 用户告知
- 适用平台:x86
- 授权级别:L2(二线技术支持工程师)
- 临时或固化方案:临时
- 操作复杂度:中
- 预估执行时长:180分钟
- 业务影响:是
说明:操作过程中整个ECS产品的集群都需要关闭,ECS实例全部关闭,重要数据用户请自行做好备份。
- 风险等级:高
说明:
- 正常集群关机,数据风险可控。
- 停止ECS实例的操作,建议灰度分批执行,每批不超过40个,每批之间间隔1min,具体下电和上电时间与ECS实例数量成正比。
- 在下电前,请关闭ECS集群实例的宕机迁移功能。在上电完毕后,请开启ECS集群实例的宕机迁移功能。
2. 问题描述
在专有云V3环境中,需要对ECS集群进行下电操作,在ECS集群在下电后,需要执行上电操作,恢复正常使用。为了避免以下问题的发生,请按照本方案进行操作。
- 为防止出现集群下电后,上电过程出现非预期问题。
- 由于无标准化恢复方案导致恢复过程时间长,导致用户侧业务数据丢失等故障。
3. 解决方案
3.1. 环境检查
3.1.1. 集群终态检查
- 登录天基控制台,确认ECS集群已达终态。
- 确认ECS依赖的服务角色已达终态。
3.1.2. ECS计算集群物理机的biz_status状态巡检
- 登录ECSAG服务器,关于如何登录ECSAG服务器,请参见专有云如何登录ECSAG服务器。
- 执行
go2houyiregiondbrnd
命令,登录houyiregiondb数据库。 - 执行以下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. 盘古状态检查
- 登录任意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 |
+---------------------+ - 登录天基控制台,在有盘古服务的ECS集群右侧,单击集群运维中心,选择nuwa服务和NuwaTools#服务角色,登录对应的机器。
- 执行以下命令,检查盘古ChunkServer节点状态。
puadmin lscs | grep ttl
说明:
- NORMAL:表示正常服务状态。
- SHUTDOWN:可以手工设置,主动触发数据复制,用于ChunkServer下线 。
- READONLY:表示ChunkServer只读,一般发生在非混合存储集群按照混合存储使用,或混合存储集群SSDCache损坏。
- DISCONNECTED:表示ChunkServer进程停止工作。
- 依次执行以下命令,进行盘古数据安全检查。
puadmin fs -abnchunk -t none
系统显示类似如下,如输出
puadmin fs -abnchunk -t onecopy
puadmin fs -abnchunk -t lessmin
puadmin fs -abnchunk -t lessmaxFoundTime
,则表示正常。ChunkId Type FoundTime
3.2. 实施步骤
3.2.1. ECS产品下电
3.2.1.1. 关闭ECS集群宕机迁移功能
- 登录ECSAG服务器,执行以下命令,查询区域ID。
go2houyirnd -Ne " select big_region_no from big_region_info ;"
- 执行以下命令,检查ECS集群的宕机迁移功能。
说明:输出
down_migration_flag
的取值为true,则说明集群宕机迁移功能为开启状态,取值为false,则说明为关闭状态。go2hyapi describe_clusters region_id=[$Region_ID] | egrep 'cluster_no|down_migration_flag'
说明:[$Region_ID]为上一步获取的区域ID。
系统显示类似如下。 - 执行以下命令,关闭集群宕机迁移功能。
注意:将所有ECS集群的宕机迁移功能都关闭。
go2hyapi modify_cluster_attribute user_id=166 region_id=[$Region_ID] cluster_no=[$Cluster_No] down_migration_flag=false
说明:[$Cluster_No]为需要关闭宕机迁移功能的集群。
系统显示类似如下。 - 执行以下命令,检查ECS集群宕机迁移功能。输出
down_migration_flag
的取值为false,则说明集群宕机迁移功能关闭成功。go2hyapi describe_clusters region_id=[$Region_ID] | egrep 'cluster_no|down_migration_flag'
系统显示类似如下,ECS所有集群宕机迁移功能已全部关闭。
3.2.1.2. 停止ECS实例
- 登录ECSAG服务器,执行以下命令,查看状态为运行中的实例ID,并将运行中的实例ID记录到
vm.list
文件中,实例ID之间以回车作为分隔符。
houyiregiondb -e "select name from vm where status='running'"
系统显示类似如下。 - 执行以下命令,批量停止运行中的实例。
说明:每批40个分批执行,每批之间间隔1min。
go2hyapibatch stop_vm_with_vmlist vm_list=vm.list
系统显示类似如下。 - 执行以下命令,确认所有实例都已停止。
houyiregiondb -e "select name from vm where status='running'"
3.2.1.3. 停止houyi管控服务
- 登录天基控制台,在Project框中搜索ecs,单击ECS-Controller-XXX集群右侧的集群运维中心,选择ecs-houyi服务和Apiproxy#服务角色,单击机器右侧的Terminal,登录对应的机器。
说明:两个apiproxy容器都需要执行以下操作。
- 进入apiproxy容器,执行以下命令,检查Nginx服务的运行状态。
sudo service nginx status
- 执行以下命令,停止Nginx服务。
sudo service nginx stop
- 执行以下命令,检查Nginx服务运行状态,确认已停止。
sudo service nginx status
- 进入另一个apiproxy容器,停止Nginx服务。
3.2.1.4. 停止houyi-api服务
- 在天基控制台,选择ecs-houyi服务和Apiserver#服务角色,单击机器右侧的Terminal,登录对应的机器。
说明:两个apiserver容器都需要执行以下操作。
-
进入apiserver容器,执行以下命令,检查houyi-api服务的状态。
sudo service houyi-api check
-
执行以下命令,停止houyi-api服务。
sudo service houyi-api stop
-
执行以下命令,检查houyi-api服务状态,确认已停止。
sudo service houyi-api check
- 进入另一个apiserver容器,停止houyi-api服务。
3.2.1.5. 停止houyi-regionmaster服务
- 在天基控制台,选择ecs-houyi服务和Regionmaster#服务角色,单击机器右侧的Terminal,登录对应的机器。
说明:两个apiserver容器都需要执行以下操作。
- 进入regionmaster容器,执行以下命令,检查houyi-regionmaster服务状态。
sudo service houyi-regionmaster check
- 执行以下命令,停止houyi-regionmaster服务。
sudo service houyi-regionmaster stop
- 执行以下命令,检查houyi-regionmaster服务状态,确认已停止。
sudo service houyi-regionmaster check
- 进入另一个regionmaster容器,停止houyi-regionmaster服务。
3.2.1.6. 停止ECS物理机(计算型ECS实例)的pync服务
- 登录ECSAG服务器,执行以下命令,查看ECS物理机的IP地址,并将IP地址记录到
nc_iplist
文件中,IP之间以回车作为分隔符。houyiregiondb -e "select ip from nc where is_deleted=0;"
- 执行以下命令,批量查看ECS物理机中pync进程的状态。
for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync status";echo -e "\n";done
- 执行以下命令,批量停止ECS物理机中的pync进程。
for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync stop";echo -e "\n";done
- 执行以下命令,批量查看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服务
- 执行以下命令,批量查看ECS物理机中tdc进程的状态。
for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc status";echo -e "\n";done
- 执行以下命令,批量停止ECS物理机中的tdc进程。
for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc stop";echo -e "\n";done
- 执行以下命令,批量查看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服务
- 登录任意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 |
+---------------------+ - 登录天基控制台,查找上一步获取的ECS集群,单击右侧的集群运维中心,选择nuwa服务和NuwaTools#服务角色,单击机器右侧的Terminal,登录对应的机器。
说明:上一步获取的ECS集群对应的NuwaTools#服务角色机器都需要执行以下操作。
- 执行以下命令,获取ECS集群中物理机对应的IP地址。
/apsara/deploy/puadmin lscs | grep ttl | awk -F "[ :/]+" '{print $9}' >/tmp/nc_iplist.txt
-
执行以下命令,批量查看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
-
执行以下命令,批量停止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
说明:启动物理机后apsarad服务会自动启动,如果物理机是逐台启动需先停止apsarad服务,等全部物理机上电启动后,统一启动apsarad服务。
-
执行以下命令,批量查看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
- 至此ECS产品下电操作已完毕,可以从天基控制台关闭ECS产品的物理机。
3.2.2. ECS产品上电
注意:请确保ECS产品所有物理机加电正常进入操作系统。
3.2.2.1. 启动ECS物理机(计算存储型ECS实例)的apsarad服务
- 登录任意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 |
+---------------------+ - 登录天基控制台,查找上一步获取的ECS集群,单击右侧的集群运维中心,选择nuwa服务和NuwaTools#服务角色,单击机器右侧的Terminal,登录对应的机器。
说明:上一步获取的ECS集群对应的NuwaTools#服务角色机器都需要执行以下操作。
- 执行以下命令,获取ECS集群中物理机对应的IP地址。
/apsara/deploy/puadmin lscs | grep ttl | awk -F "[ :/]+" '{print $9}' >/tmp/nc_iplist.txt
-
执行以下命令,批量查看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
-
执行以下命令,批量启动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
-
执行以下命令,批量查看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服务
- 登录ECSAG服务器,执行以下命令,查看ECS物理机的IP地址,并将IP地址记录到
nc_iplist
文件中,IP之间以回车作为分隔符。houyiregiondb -e "select ip from nc where is_deleted=0;"
- 执行以下命令,批量查看ECS物理机中tdc进程的状态。
for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc status";echo -e "\n";done
- 执行以下命令,批量启动ECS物理机中的tdc进程。
for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service tdc start";echo -e "\n";done
- 执行以下命令,批量查看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服务
- 登录ECSAG服务器,执行以下命令,查看ECS物理机的IP地址,并将IP地址记录到
nc_iplist
文件中,IP之间以回车作为分隔符。houyiregiondb -e "select ip from nc where is_deleted=0;"
- 执行以下命令,批量查看ECS物理机中pync进程的状态。
for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync status";echo -e "\n";done
- 执行以下命令,批量启动ECS物理机中的pync进程。
for ip in `cat /tmp/nc_iplist`;do echo $ip; ssh $ip "sudo service pync start";echo -e "\n";done
- 执行以下命令,批量查看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服务
- 登录天基控制台,在Project框中搜索ecs,单击ECS-Controller-XXX集群右侧的集群运维中心,选择ecs-houyi服务和Regionmaster#服务角色,单击机器右侧的Terminal,登录对应的机器。
说明:两个apiserver容器都需要执行以下操作。
- 进入regionmaster容器,执行以下命令,检查houyi-regionmaster服务状态。
sudo service houyi-regionmaster check
- 执行以下命令,启动houyi-regionmaster服务。
sudo service houyi-regionmaster start
- 执行以下命令,检查houyi-regionmaster服务状态,确认已启动。
sudo service houyi-regionmaster check
- 进入另一个regionmaster容器,启动houyi-regionmaster服务,等待天基控制台中对应的服务到达终态。
3.2.2.5. 启动houyi-api服务
- 在天基控制台,选择ecs-houyi服务和Apiserver#服务角色,单击机器右侧的Terminal,登录对应的机器。
说明:两个apiserver容器都需要执行以下操作。
-
进入apiserver容器,执行以下命令,检查houyi-api服务的状态。
sudo service houyi-api check
-
执行以下命令,启动houyi-api服务。
sudo service houyi-api start
-
执行以下命令,检查houyi-api服务状态,确认已启动。
sudo service houyi-api check
- 进入另一个apiserver容器,启动houyi-api服务,等待天基控制台中对应的服务到达终态。
3.2.2.6. 启动houyi管控服务
- 在天基控制台,选择ecs-houyi服务和Apiproxy#服务角色,单击机器右侧的Terminal,登录对应的机器。
说明:两个apiproxy容器都需要执行以下操作。
- 进入apiproxy容器,执行以下命令,检查Nginx服务的运行状态。
sudo service nginx status
- 执行以下命令,启动Nginx服务。
sudo service nginx start
- 执行以下命令,检查Nginx服务运行状态,确认已启动。
sudo service nginx status
- 进入另一个apiproxy容器,启动Nginx服务,等待天基控制台中对应的服务到达终态。
3.2.2.7. 启动ECS实例
- 根据之前记录的
vm.list
文件,执行以下命令,重新分批启动实例。说明:每批20个分批执行,每批之间间隔1min。
go2hyapibatch start_vm_with_vmlist vm_list=vm.list
- 执行以下命令,确认所有实例都已启动。
houyiregiondb -e "select name from vm where status='running'"
3.2.2.8. 开启ECS集群宕机迁移
- 登录ECSAG服务器,执行以下命令,查询区域ID。
go2houyirnd -Ne " select big_region_no from big_region_info ;"
- 执行以下命令,检查ECS集群的宕机迁移功能。输出
down_migration_flag
的取值为false,则说明集群宕机迁移功能为关闭状态。go2hyapi describe_clusters region_id=[$Region_ID] | egrep 'cluster_no|down_migration_flag'
系统显示类似如下。
- 执行以下命令,开启集群宕机迁移功能。
注意:将所有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]为需要开启宕机迁移功能的集群。
- 执行以下命令,检查ECS集群宕机迁移功能。输出
down_migration_flag
的取值为true,则说明集群宕机迁移功能开启成功。go2hyapi describe_clusters region_id=[$Region_ID] | egrep 'cluster_no|down_migration_flag'
系统显示类似如下,ECS所有集群宕机迁移功能已全部开启。
3.3. 结果验证
3.1.1. 集群终态检查
- 登录天基控制台,确认ECS集群已达终态。
- 确认ECS依赖的服务角色已达终态。
3.1.2. ECS计算集群物理机的biz_status状态巡检
- 登录ECSAG服务器,执行
go2houyiregiondbrnd
命令,登录houyiregiondb数据库。 - 执行以下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. 盘古状态检查
- 登录任意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 |
+---------------------+ - 登录天基控制台,在有盘古服务的ECS集群右侧,单击集群运维中心,选择nuwa服务和NuwaTools#服务角色,登录对应的机器。
- 执行以下命令,检查盘古ChunkServer节点状态。
puadmin lscs | grep ttl
说明:
- NORMAL:表示正常服务状态。
- SHUTDOWN:可以手工设置,主动触发数据复制,用于ChunkServer下线 。
- READONLY:表示ChunkServer只读,一般发生在非混合存储集群按照混合存储使用,或混合存储集群SSDCache损坏 。
- DISCONNECTED:表示ChunkServer进程停止工作。
- 依次执行以下命令,进行盘古数据安全检查。
puadmin fs -abnchunk -t none
系统显示类似如下,如输出
puadmin fs -abnchunk -t onecopy
puadmin fs -abnchunk -t lessmin
puadmin fs -abnchunk -t lessmaxFoundTime
,则表示正常。ChunkId Type FoundTime
4. 回滚方案
此方案无需回滚。