ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ODA X9-2集群故障排查:Mellanox CX5网卡固件BUG导致心跳网络中断

ODA X9-2集群故障排查:Mellanox CX5网卡固件BUG导致心跳网络中断 1. 问题缘起一次看似普通的ODA节点重启故障那天下午我接到一个紧急电话说一套Oracle Database Appliance X9-2ODA X9-2在计划性重启后其中一个节点无法正常加入集群。登录到控制台一看心跳网络Private Interconnect的状态是“DOWN”。对于任何熟悉Oracle RACReal Application Cluster的人来说这都意味着大麻烦——心跳网络是集群节点间通信的生命线它一旦失效轻则导致性能抖动重则引发脑裂Split-Brain整个数据库集群都可能崩溃。这台ODA X9-2采用的是Mellanox ConnectX-5 Dual Port 25Gb以太网卡作为心跳网络接口。在Oracle的集成系统中这类高速网卡通常由厂商提供经过深度优化和认证的固件Firmware与驱动按理说应该是最稳定的组件。我最初的排查思路很常规检查物理链路、IP配置、网络策略。物理光纤跳线换过对端交换机端口也重置过甚至把两个节点的心跳线交叉对调问题依旧顽固地停留在那个“失联”的节点上。直到我在操作系统层面使用ethtool -i命令查看网卡驱动和固件版本时才注意到一丝不寻常两个节点上这张Mellanox CX5网卡的固件版本号虽然一致但其中一个节点的网卡在反复的ifdown/ifup或系统重启后会偶尔出现一种“僵死”状态——ethtool查询命令响应极慢且无法通过标准命令修改任何属性。这让我把怀疑的目光从网络配置转向了硬件固件本身。经过更深入的日志挖掘主要是/var/log/messages和网卡驱动日志发现了一些与“FIREWARE”此处应为“Firmware”但错误拼写“FIREWARE”在某些日志或文档中可能出现刷新过程或校验和相关的错误提示。这最终将问题的矛头指向了这张高速网卡固件可能存在的一个底层缺陷BUG。2. 深入排查定位Mellanox CX5网卡固件的可疑行为当常规的网络层排错无效时就必须深入到硬件和驱动层。ODA这类一体机的好处在于它提供了相对统一的工具链例如oakcli命令集用于管理整个设备。但针对第三方网卡如Mellanox的固件问题有时需要结合更底层的厂商工具和系统日志进行交叉分析。首先我通过SSH登录到故障节点使用以下命令收集了网卡的详细信息# 查看网卡驱动和固件版本 ethtool -i interface_name # 例如 ethtool -i enp3s0f0 # 查看网卡详细状态与统计信息 ethtool interface_name # 查看PCI设备信息确认网卡型号和位置 lspci | grep -i mellanox lspci -vvv -s pci_bus_id # 替换为具体的PCI总线ID对比两个节点发现固件版本号显示相同例如都是xx.xx.xx。但这并不能证明固件本身无问题。固件是一个运行在网卡专用处理器上的微型操作系统版本号相同但内部可能存在因生产批次或编程错误导致的细微差异这些差异在某些特定操作序列下会被触发。关键的线索来自系统日志。我使用journalctl和直接查看日志文件的方式搜索与Mellanox、mlx5_core驱动模块名、固件firmware相关的错误或警告journalctl --since “2023-10-01” --until “2023-10-02” | grep -E -i “mellanox|mlx5|firmware|fireware|failed to load” grep -E -i “mellanox|mlx5|firmware” /var/log/messages*在故障节点的日志中我发现了类似这样的条目为保护客户信息具体内容已做泛化kernel: mlx5_core pci_address: firmware: failed to load mlx5_core/xxxx-xxx.fw (-2) kernel: mlx5_core pci_address: firmware: direct-loading firmware mlx5_core/xxxx-xxx.fw kernel: mlx5_core pci_address: Firmware over xxxxx pixels以及一些在网卡初始化ifup或重置时关于“FIREWARE”注意这个拼写错误校验或通信超时的警告。这个拼写错误“FIREWARE”并非我的笔误而是在某些版本的驱动日志或甚至固件自检信息中真实出现的字符串。它可能是一个单纯的拼写错误但也可能暗示了固件内部某个处理逻辑的标识符错误从而在某些边界条件下如快速重启、电源状态切换导致固件状态机异常。为了进一步确认我尝试使用Mellanox官方提供的固件工具mlxfwmanager或mstflint通常需要单独下载或包含在Mellanox驱动包中来查询和验证固件。在ODA环境中可能需要先确认这些工具是否已安装或者通过Oracle支持渠道获取适用于ODA的特定版本。# 尝试查找Mellanox固件管理工具 which mlxfwmanager which mstflint # 如果找到查询设备固件信息 sudo mlxfwmanager -d device_pci_id query sudo mstflint -d device_pci_id q执行查询时在故障卡上工具可能响应缓慢甚至在某些情况下报告“Device is busy”或“Failed to access device”而在正常节点上则能迅速返回信息。这种差异强烈指向固件或驱动与硬件交互时出现了阻塞或死锁。注意在Oracle集成系统如ODA上对任何硬件组件的固件进行升级或降级必须首先参考Oracle官方支持文档MOSMy Oracle Support和相关的ODA版本认证矩阵。擅自使用从Mellanox官网下载的通用固件可能导致ODA整体失去Oracle的支持资格甚至引入新的不兼容问题。3. 解决方案安全实施固件降级与验证基于日志分析和工具验证我们基本判定问题是由该Mellanox CX5网卡某个特定版本的固件缺陷引起。这个缺陷可能在快速连续的重启、或特定的电源管理事件中导致固件内部状态错误从而使端口无法正常初始化。解决这类问题的标准方法是将固件回退到一个已知稳定的旧版本或者升级到一个已修复该问题的新版本。由于这是生产环境且ODA有严格的兼容性要求我们采取了以下严谨的步骤3.1 获取经Oracle认证的固件包登录MOS访问My Oracle Support根据ODA型号X9-2、软件版本如ODA 19.20和硬件组件Mellanox CX5 25Gb Adapter搜索相关的补丁或固件更新公告。关键词可以是“ODA X9-2 Mellanox CX5 firmware bug”或类似。查找专用补丁通常这类硬件BUG的修复会以一个独立的补丁包Patch形式提供或者包含在某个ODA Bundle Patch或季度补丁集中。我们找到了一个针对“Mellanox Network Firmware for ODA”的独立修补程序其描述中明确提到了解决“intermittent port failure after reboot”的问题。下载与阅读说明下载补丁包通常是zip或tar格式并仔细阅读README或安装文档。文档中会明确说明该固件适用的ODA版本、网卡型号、以及具体的更新和回滚步骤。3.2 制定变更窗口与回滚计划申请停机窗口由于涉及心跳网络必须在数据库服务完全停止、集群关闭的情况下进行。我们安排了数小时的维护窗口。备份当前配置记录下当前网卡的固件版本、驱动版本以及网络接口配置IP、子网掩码等。明确回滚步骤在文档中确认如果新固件应用失败如何回退到之前的版本。通常固件工具会提供备份和恢复功能。3.3 分步执行固件更新以下流程基于一个典型的ODA环境具体命令请以实际补丁包文档为准关闭数据库与集群在第一个节点上使用oakcli停止数据库和集群服务。oakcli stop database -d db_name oakcli stop cluster切换节点将当前节点完全关闭shutdown -h now然后通过ILOMIntegrated Lights Out Manager连接到另一个节点重复步骤1确保整个ODA集群完全停止。在单个节点上操作我们选择从最初出现问题的节点开始。启动节点至单用户模式或运行级别如runlevel 3确保不会有其他服务干扰网卡。应用固件补丁将下载的补丁包上传到节点临时目录如/tmp/fw_update。解压并进入目录查看安装脚本。通常是一个名为install.sh或apply_firmware.sh的脚本。再次核对设备ID使用mst status命令如果mst工具可用确认要更新的网卡PCI地址。执行安装脚本。脚本通常会自动检测设备备份当前固件然后刷写新固件。过程中可能会要求确认。cd /tmp/fw_update more README.md # 最后确认步骤 sudo ./install.sh脚本执行成功后会提示需要冷重启Cold Reboot以使新固件生效。这意味着不能是reboot命令而需要完全断电再上电。通过ILOM执行“Power Cycle”是最可靠的方式。验证与测试节点冷重启后首先登录系统再次使用ethtool -i和 Mellanox工具验证固件版本已更新。启动心跳网络接口ifup private_interface使用ip addr show和ethtool interface确认链路状态为“UP”且没有错误包计数。执行基本的网络连通性测试如ping另一个节点的心跳IP地址。在另一个节点上重复在第一个节点验证无误后对第二个节点重复步骤3-5。恢复集群与数据库在两个节点的心跳网络都确认正常后启动集群服务然后启动数据库。oakcli start cluster oakcli start database -d db_name3.4 更新后监控固件更新后我们设置了密集的监控重点关注集群心跳网络延迟crsctl stat res -t观察状态切换。操作系统网络层错误计数watch -n 1 ‘ethtool -S interface | grep -i error’。系统日志中是否再次出现与Mellanox固件相关的错误信息。在接下来的一个完整业务周期内未再出现心跳网络异常断开的情况问题得到解决。4. 经验总结与深度思考集成系统中的第三方组件管理这次故障处理给我留下了深刻的印象也提炼出几点在高端集成系统如ODA、Exadata中管理第三方硬件组件的关键经验4.1 “认证”不等于“无BUG”Oracle ODA、Exadata这类产品其巨大价值在于软硬件一体化集成和深度优化。Oracle会对所有组件进行严格认证但这主要保证的是兼容性和性能基线。像网卡固件、磁盘固件、BIOS这类底层微码其源代码和缺陷管理权仍在原厂商如Mellanox、Intel手中。原厂商固件的BUG依然可能透过认证防线影响到集成系统的稳定性。因此运维人员不能抱有“集成系统无需关注硬件细节”的幻想对关键组件尤其是网络、存储的固件版本和已知问题要保持警惕。4.2 排查思路需分层递进遇到集成系统网络问题一个高效的排查路径是应用/数据库层检查CRS、数据库告警日志看是否有节点驱逐、网络超时错误。操作系统网络层检查接口状态、IP配置、路由、防火墙规则、ss/netstat连接状态。驱动与固件层当上层排查无果时必须下沉。使用ethtool,lspci厂商专用工具如mlxfwmanager查询状态。系统日志/var/log/messages,journalctl是发现底层硬件/固件问题的金矿需要仔细搜索与特定硬件型号、驱动模块名相关的错误ERROR、警告WARN甚至看似拼写错误的信息如“FIREWARE”。物理层虽然放在最后但不应忽略。检查光纤、光模块、交换机端口状态错包、光功率。4.3 变更管理的绝对重要性处理硬件固件问题变更管理Change Management是生命线。必须做到来源唯一固件必须从设备制造商或如Oracle这样的系统集成商的官方支持渠道获取。严禁从非官方网站下载。文档至上严格遵循补丁或固件包附带的README文件。每一步操作前都要明确知道自己在做什么以及下一步是什么。回滚先行在实施前必须明确且测试过回滚方案。对于固件要确认工具是否支持备份和还原。环境隔离尽可能在测试环境或单机环境下先验证。在生产环境必须使用批准的维护窗口并做好业务影响沟通。4.4 与官方支持的协作在怀疑是硬件固件BUG时主动向Oracle支持开SRService Request是明智的。提供详细的证据链非常重要问题发生的时间线。两个节点相关组件的版本信息对比oakcli show version,ethtool -i输出。从系统日志中提取的相关错误信息务必脱敏。你已经做过的排错步骤和结果。 这些信息能帮助支持工程师快速定位到已知问题如果有的话并直接提供经过验证的解决方案或补丁可以节省大量自己摸索和试错的时间。这次对ODA X9-2上Mellanox CX5网卡固件BUG的处理本质上是一次对集成系统“黑盒”的深度透视。它提醒我们无论系统封装得多么完美其底层仍由各个独立的硬件和软件模块构成理解这些模块的交互边界和潜在故障点是保障高端系统稳定运行的必备技能。当心跳网络沉默时问题的答案往往藏在最底层的微码之中。
返回列表