使用救援镜像恢复Nutanix集群中故障的节点CVM(适用于ESXi虚拟化)

Posted on

当Nutanix集群中某一节点的CVM遇到操作系统故障无法启动时,可以尝试通过救援镜像恢复CVM服务,而无需重刷整个节点。

风险说明:CVM作为节点存储控制器,异常的恢复操作可能导致所在节点上的数据不可用或元数据损坏。如果无法确定是否能通过该方式恢复CVM,建议将该节点强制踢出集群再重新加回。踢出集群的步骤请参阅:https://portal.nutanix.com/kb/2379

环境说明

以下操作基于AOS 5.5+ESXi 6/6.5环境。所涉及的相关CVM配置项请根据实际情况修改。示例如下:

  • 待恢复的故障CVM(CVM-1):IP为192.168.1.3,所在Hypervisor的IP为192.168.1.2
  • 集群内任意一台正常的CVM(CVM-2):IP为192.168.1.6

恢复流程

1. 登录到CVM-2,找到CVM的OS镜像目录:

$ cd /home/nutanix/data/installer
$ ls

确认当前AOS版本号(以V5.5.9.1为例):el7.3-release-euphrates-5.5.9.1-stable-8853e467f66bd91981d3bb9e8f7ee074

$ cd el7.3-release-euphrates-5.5.9.1-stable-8853e467f66bd91981d3bb9e8f7ee074/

2. 生成镜像文件:

$ ./make_iso.sh svmrescue RescueShell 50

3. 等待ISO镜像生成完毕,将ISO从CVM-2中复制到CVM-1的本地存储介质(local datastore)上:

$ cd ..
$ scp svmrescue.iso root@192.168.1.2:/vmfs/volumes/NTNX-local-ds-CVM-1-A/ServiceVM_Centos/

4. 在vCenter中,编辑CVM-1虚拟机上的“CD/DVD驱动器”挂载路径:

[NTNX-local-ds-CVM-1-A] ServiceVM_Centos/ServiceVM_Centos.iso改为[NTNX-local-ds-CVM-1-A] ServiceVM_Centos/svmrescue.iso

保存虚拟机设置,并打开CVM电源。

5. 打开VNC虚拟控制台。当系统进入引导列表时,选择“Rescue Shell”,回车继续。

6. 等待进入Shell,待初始化完毕后,在Shell中执行恢复命令:

$ chmod +x do_svmrescue.sh
$ ./do_svmrescue.sh

该脚本将执行CVM救援操作。

7. 待重刷完成,通过vCenter手动关闭CVM-1,并恢复该虚拟机的“CD/DVD驱动器”挂载路径:[NTNX-local-ds-CVM-1-A] ServiceVM_Centos/ServiceVM_Centos.iso

8. 打开CVM电源,使用nutanix账户进入系统。然后等待约5分钟,至所有服务自启动完毕。

CVM登陆用户名:nutanix;密码:nutanix/4u

9. 根据原网络配置CVM-1上的eth0网卡:

$ vi/etc/sysconfig/network-scripts/ifcfg-eth0

# Auto generated by CentosNetworkInterfacesConfig on Timepoint

GATEWAY="192.168.1.254"
NM_CONTROLLED="no"
NETMASK="255.255.255.0"
IPADDR="192.168.1.3"
DEVICE="eth0"
TYPE="Ethernet"
ONBOOT="yes"
BOOTPROTO="none"

保存,然后重启网络服务:

$ service network restart

网络重启完毕,确认与集群内其他CVM能互相Ping通即可。

10. 返回至CVM-2上,对CVM-1发起AOS引导修复:

$ boot_disk_replace -i 192.168.1.3

注:如果第一次执行脚本报错,可以检查./data/logs/boot_disk_replace.log若发现提示Failed to run gen2_svm_boot with ret=255 out= err=Connection to 192.168.1.3 closed by remote host.则再次执行上述命令。(这是重刷脚本的一个已知Bug,不影响实际结果)

11. 修复期间CVM-1会重启一次,当再次进入系统时,跟踪AOS服务启动状态:

$ watch genesis status

待所有服务启动后,故障CVM修复完毕。

12. 确认集群状态即可:

$ cluster status | grep -v -i up

注意事项

1. 恢复后的CVM所带的NCC组件版本将重置成当前AOS内置的NCC版本,可能会比集群所用的版本低。此情况一般出现在集群单独升级过NCC时。该节点CVM将在下次NCC检查任务发起时自动进行升级,同时在Prism的“任务”标签卡中可以查看到升级进度。若提示升级失败,则需要使用离线NCC安装脚本手动更新。不一致的版本可能会触发错误的报警事件,影响集群稳定性。

2. 恢复后的CVM可能会出现节点时钟与集群不一致的问题,并触发相关报警事件。这可能是当前节点NTP同步还未完成导致的,一般等待若干小时后即可自行恢复。

END