超融合HCI 【HCI-VN】热升级过程到 aSV 控制面 locald 进程卡住,导致升级流程失败

【HCI-VN】热升级过程到 aSV 控制面 locald 进程卡住,导致升级流程失败

更新时间:2024-09-01 15:22:31
680 系列升级到 6100,升级到aSV控制面卡住。

1. 升级卡住 sSV 控制面

 

2. 查看升级日志 /sf/log/today/update.log,卡在如下任务

 

3. ps 看下是什么任务,pstree 追踪是什么子任务

ps auxf|grep restart

pstree -asp <pid> # pid 是上图拿到的

 

4. 看 vn-node-agent 日志(/sf/log/today/vn/vn-node-agent-rpc.log),发现卡在和 cfgdb 通信超时;

继续看 cfgdb 日志(/sf/log/today/cfgdb.log),发现卡在和 locald 通信超时

 

5. 看 locald 的堆栈,卡在 tty 写日志

ps aux|grep locald # 拿到 pid

cat /proc/pid/stack

 

当时在进行原地热升级,会重启rsyslogd,而升级过程中VN的一些服务是通过openlog接口来输出日志的,正常情况下输出的日志会由rsyslogd处理,但是由于这个进程重启了,在重启期间,日志会输出到/dev/console控制台,对应就是就是/dev/tty7,查看这个tty7的状态发现,这个tty7被stop了,导致monitord在往这个控制台输出日志时被阻塞,而这个monitord进程此时正拿着tty7的atomic_write_lock和读信号量,其中atomic_write_lock导致了lldpad进程阻塞,而着lldpad进程也拿个tty7的一个读信号量。

因为持有读信号量的进程被阻塞,导致menuconfigd进程在申请写信号量时也被阻塞了,阻塞前menuconfigd进程拿个tty7的legacy_mutex锁,因为写者被阻塞,后面来的读者locald申请tty7的读信号量时也被阻塞了,此外dialog进程阻塞在legacy_mutex上

分析tty7被stop的原因,根据它的内部状态,应该是接收到了特殊字符。

临时解决方案:

当前卡住的主机,执行:

container_exec -n vn-a -c '/sf/vn/etc/init.d/sdn.sh restart'

# 注意:该命令会影响当前主机的网络中断10-30s,建议迁移虚拟机

然后查看服务是否启动完成:

container_exec -n vn-a -c '/sf/vn/etc/init.d/sdn.sh status'

除了 dataplane.o 是 dead,其他必须是 alive 才算完成

 

如果该方式无法恢复,则继续下面的重启主机的方法:

1. 后台关闭维护模式(mv /cfs/cluster_protect.json /sf/data/local)(可选,重启主机才需要做

2. 把当前主机上的虚拟机迁移到其他主机上(如不影响业务,可关机开机)

3. 重启主机

4. 重启主机之后,等待虚拟存储正在同步数据
5. 同步完成后,再把维护模式标记文件挪回去(mv /sf/data/local/cluster_protect.json /cfs)
6. 重试升级

 

永久解决方案:

该问题在 HCI6.10.0 已解决,以前的版本有合集补丁(可以看下合集补丁修复问题列表中有没有该问题(关键字:数据面进程偶现写日志卡住问题),如果没有,找VN技术支持确认)

卡住主机上业务受影响

热升级卡住 aSV 控制面升级;

后台查看日志发现卡在 locald 通信快速判断是该问题