硬件设备不是我这边维护,所以对硬件故障与更换的情况不清楚。我到现场进行故障处理时被告知 RAID 卡故障,主机的数据文件系统坏了需要修复。

主机文件系统损坏

服务器带外的虚拟终端中一直在打印虚拟块设备 dm-3 的 error,VRM 上显示主机状态为故障,虚拟机不可用。

带外终端中 dm-3 报错与 VRM 主机故障状态
图 1 · 带外终端 dm-3 报错

于是重启 CNA,进入内核选择界面按 e 进入 GRUB 界面,输入用户名 root,密码为装机时输入的 GRUB 密码,进入内核修改界面,在 Linux 行后添加 console=tty0 init=/bin/sh rwCtrl + X 启动系统进入单用户模式。检查块虚拟块设备和逻辑卷的对应关系 ls -l /dev/mapper/dm-3 对应 log 分区。

ls -l /dev/mapper/ 查看逻辑卷对应关系
图 2 · 逻辑卷与 dm 设备对应关系

在此模式下没有 fsck 命令,需要挂载其中的 root 分区 vnaVG-lv_rootfs,调用 CNA 系统中的命令:

mount /dev/mapper/vnaVG-lv_rootfs /mnt
/mnt/sbin/fsck -n /dev/mapper/*
/mnt/sbin/fsck.ext4 -y /dev/mapper/*

然后重启系统,进入到系统后发现原用户名密码登录不了系统了,遂重新进入单用户模式,挂载 root 卷到 /mnt 下,chroot/mnt 下, passwd gandalfpasswd root 修改用户密码,随后重启可以进入系统了,但是又发现网不通了,OVS 的配置全不见了,Mgnt 的端口什么的都没了, 尝试修没修好,没办法只能通过挂载 CNA 镜像安装的时候选择恢复模式,进行修复。

重装 CNA

通过安装介质引导进入 installation(recover)模式,hard drive 选择当前的系统分区,注意不能选错,不要勾选 format all partition 选项。

如果提示:Failed to check whether the system can be restored,需要检查 /etc/new.part 文件。

检查方法:通过上面的进入单用户模式,或者在安装界面按下 Alt + F2 进入命令行模式,输入 root 用户,无需密码,检查 /etc/new.part 文件与正常主机的分区及挂载点是否一致。

重装完成后,重新 cnaInit,随后终于可以通过 VRM 的主机故障恢复将这个 CNA 重新加回 VRM 且保留所有虚拟机和原配置。

VRM 备机故障

VRM 故障,好消息主机似乎修好了,坏消息,VRM 备节点在此主机上,也故障了,一直刷屏 dm-5 有问题,一样的流程进单用户模式修文件系统,再次回来后,VRM 主备间通信的告警消了,但主备数据库异常告警还在。 数据库就会个增删查改,修复故障,我选择饶过自己,遂开了 case。华为官方的建议是重装备节点 VRM,因为使用 fsck 修补好 VRM 可能会导致文件系统里的各种文件有权限问题、目录丢失问题等, 但这边 VRM 做过补丁升级,现场不具备安装 VRM 和升级 VRM 的条件,当初的部署环境都撤了镜像就留了个 CNA 的,没办法还是硬着头皮修,通过命令检查服务状态。

service had query

service had query 检查 VRM 服务运行状态
图 3 · service had query 服务状态(测试环境截图)

我这里的截图是我的测试环境,非当时现场的截图,现场是主备部署,这里很多服务的状态是异常的。对于备节点,TYPE 为 Single_active 的服务,状态为 STOP 的是正常的, 当主节点挂了的情况下,服务切换到备节点上时才会启动。对于 Double_active 的服务状态应该是运行态,数据库为 standby_normal

记得现场是 fmagaussdb 两个服务不正常。数据库不好搞,先去看了 fma,service fmad status,看到服务异常错误信息里有个 /opt/galax/vrm/om/fma/fmad文件不存在的错误,华为的支持人员直接让我去看了/var/log/galaxenginelog/fma 这个文件夹,看了下,log文件权限变成了 root root,遂改成和 VRM 主节点一致,随后该服务就正常了,无需人工重启该服务,VRM 上 had 就是监控和干这个故障恢复的事情的(好像是这样)。 至于为何直接去看log文件的权限,我好像并没有在status状态中看到有这个log文件的报错,应该是经验,当然也可能是我看漏了。

之后就是去修数据库,准备重新 rebuild 数据库然后从主节点同步数据,敲了华为那边提供的命令。命令记不清楚了应该是这个:

su - postgres -s /bin/bash -c "gs_ctl rebuild"

准备重建实例,但报错了,做了很多检查最后发现 vg_vrm-lv_gaussdb 这个逻辑卷也坏了,fsck -n /dev/mapper/* 检查的时候发现这个卷有错误,但我记得 VRM 也是跑过 fsck 的, 没办法再去修一次好了,重新进入到单用户模式,发现 fsck 检查逻辑卷没问题了,当时想的是难道单用户模式下看到的 /dev/mapper 的逻辑卷不是系统正真的逻辑卷,但还是 fsck.ext4 -y /dev/mapper/* 去修了一遍,一样的没有找到有问题的卷组。没办法先开机看看能不能 umount 掉那个 db 的卷组去修,开机后重新再 fsck -n /dev/mapper/* 检查,db 那个卷组的文件系统问题消失了,service had query 检查所有服务都正常了,备节点的 RESS 状态也恢复到了 normal,神特喵的自己好了。 也是很难绷,然后主备倒换验证没问题,VRM 也没有了告警算是把这个问题解决了。

主机主板更换

故障进入高潮阶段,然后客户那边要修主机了,当时我就是一个 WTF,主机硬件有问题还没修吗?不是 RAID 卡坏了吗?那我这修的系统是怎么进来的,黑人问号.jpg。 然后才知道,硬件维保商检查告知主板坏了要换主板,主板还没修,CNA 先出现了故障,让我们这边先来修系统,还真特喵的给系统修好了。那就等好了,等他们换完主板,此时我还不知道,CNA 换主板,官方的建议是,将 CNA 主机移除出 VRM 换完再重新加回来, 产品文档里也有「更换主板」这部分的章节,这是后来开 case 问的时候告诉我的,我是真不知道。但知道了应该也不会这么做,这个环境就两个 CNA,备节点的 VRM 还在这台主机上呢,移除主机要删除网络配置,数据存储配置,相当于回到刚 cnaInit 的状态,无法接受。反正换完主板发现了三个问题,开修。

主机 NTP 服务异常

VRM 上出现主机 NTP 告警,断开连接/连接失败,NTP 服务器肯定是好的,网络也正常,查了华为的案例库有一样的情况,重启 NTP 服务解决。

虚拟机无法迁移

虚拟机迁移时需要选择目标主机,报目标主机的 CPU 架构和当前虚拟机的架构不一致需要开启 IMC,两台主机同一型号,CPU 同一型号,各种检查后发现,更换主板使得主板的 BIOS 比原来更新了,导致没法从更新的 BIOS 架构往低版本上迁移,开启 IMC 重启虚拟机后就可以迁移了。

主机网络冗余丢失

更换主板时把板载的电口网卡也一并更换了,导致新的网卡新的 MAC 导致和原来的配置对应不起来了,VRM 的数据库没有更新能够配置的还是旧的网卡,无法配置新替换上去的板载卡。重新走「主机网卡更换」流程,参考「产品文档 - 故障管理 - 故障处理 - 部件更换 - 更换物理网卡」, 没成功「更新网卡」那个步骤始终报错「主机返回失败」,也可能是我操作的问题,最后直接主机置维护,修改 /etc/udev/rules.d/50-persistent-net.rules 文件, automatically generated by the install-scripts 部分的网络接口保留原先配置,新识别到的网络接口的 NAME 部分继续延续已有的编号,比如原先已经用到了 eth5,那新识别到的网口就从 eth6 开始用。 然后也不用再重启主机,去「系统管理 - 网络变更 - 主机网卡新增」那里点「预处理」成功了,就直接点「新增网卡」,之后 VRM 上就同步新增了这台主机上的新网口。

主机网卡新增与网络冗余恢复
图 4 · 主机网卡新增

至此,没有发现其他问题了,若是再有,只能遇山开山,遇水架桥了。最后,还是 VMware vSphere 好用啊,岂可修。