Go to main content

Oracle® ZFS Storage Appliance 管理指南,发行版 OS8.8.0

退出打印视图

更新时间: 2018 年 11 月
 
 

防止“记忆分裂”情况

群集系统中的一种常见故障模式称为“记忆分裂”;在这种情况下,每台群集控制器都认为其对等设备已发生故障并尝试接管。这种情况不进行额外的逻辑推理,会导致大范围难以诊断或更正的破坏性意外行为。这种情况典型的起因是控制器共享的通信介质发生故障;对于 Oracle ZFS Storage Appliance,群集 I/O 链路发生故障时会出现这种情况。除内置三重链路冗余(要避免触发接管,只需要一条链路)外,设备软件还会执行仲裁程序来确定哪台控制器应该继续接管。

类似的产品采用多种仲裁机制,这些机制通常要求使用法定磁盘(使用 SCSI 预留空间)或法定服务器。为了支持使用 ATA 磁盘而无需其他硬件,设备采用一种不同的方法,依靠存储结构自身来提供所需的互斥性。仲裁过程包括尝试以预定义的顺序对存储结构中的每个可见 SAS 扩展器执行 SAS ZONE LOCK 命令。尝试获取所有这些锁定成功的设备将继续接管,另一个将对自身进行重置。由于引导并检测到对等设备无法连接的群集设备将尝试接管并开始相同的仲裁过程,因此将连续循环重置,直到至少恢复一条群集 I/O 链路为止。这可确保另一台控制器以后的故障不会造成长时间中断。执行故障恢复后或处于 AKCS_OWNER 状态的控制器最新续订其自己对存储结构的访问权限大约 10 秒后,即会解除这些 SAS 区域锁定。

这种仲裁机制非常简单、成本较低且无需其他硬件,但是要求两个群集设备都必须至少能够访问存储结构中的一个通用 SAS 扩展器。在正常情况下,每个设备均可访问所有扩展器,仲裁包括采用至少两个 SAS 区域锁定。但是,可能会出现多重故障情形,在这种情况下,设备无法访问任何通用扩展器。例如,如果拔下了两条 SAS 电缆或关闭了磁盘机框的电源,则每个设备可访问不相交的一部分扩展器。在这种情况下,每个设备都将成功锁定所有可连接的扩展器,断定对等设备已发生故障,并尝试继续接管。这样会因磁盘从属关系冲突和/或严重的数据损坏而导致不可修复的挂起。

请注意,尽管这种情况的后果非常严重,但是只会在多重故障情况(通常只在四重或更多故障的情况)下发生。Oracle ZFS Storage Appliance 中嵌入的群集解决方案设计用于确保不会发生单点故障,保护数据和可用性不受任何似乎合理的故障的影响,而不会造成系统的成本和复杂性过高。仍有可能发生大规模的多重故障而导致丢失服务和/或数据,就像没有 RAID 布局可保护系统免受无限数量磁盘故障的影响一样。

图 7  防止“记忆分裂”

image:防止“记忆分裂”

幸运的是,大多数此类故障情形都由人为错误引起,可通过正确安装硬件和对员工进行群集设置和管理最佳做法方面的培训来全面预防。管理员始终都要确保三条群集 I/O 链路全部都已连接且正常运行(参见图),并按照设备随附的安装说明页中所示连接所有存储电缆。特别重要的一点是,将群集投入生产环境前以及此后必须能检测到每个磁盘机框有两个路径(参见图),临时更改布线来支持容量增加或更换故障组件当然除外。管理员应使用警报来监视群集互连链路和磁盘机框路径的状态,并即时解决所有故障。通过确保维持正确的连接,可在硬件或软件组件发生故障时保证可用性和数据完整性。

图 8  群集的两个路径

image:群集的两个路径

相关主题