RHEL 6.7 使用multipathd reload命 令有导致DB实例Crash风险,特发Alert提醒,请关注!
Ø 背景介绍 在Redhat 6.7 kernel或者OL6.7 的RHCK中, 如果使用类似OS命令service multipathd reload" 或者" kpartx -a /dev/mapper/asm1时,可能会导致IO短暂中断,引发LGWR,DBWR等进程IO操 作失败,最终DB实例Crash。 Ø 故障现象 1. 执 行OS命令service multipathd reload" 或者" kpartx -a /dev/mapper/asm1, 例如需要增加ASM磁盘时; 2. 在RHEL6.7中 会导致LGWR,DBWR进 程IO操作失败,导致DB实 例Crash; 以下是一些报错示例: 最常见的报错发生在DB实例的alert日志中,类似如下: ORA-63999: data file suffered media failure ORA-01114: IO error writing block to file 7(block # 1158) ORA-01110: data file 7: '+DATA _DG/datafile/data.256.818069029' ORA-15081: failed to submit an I/O operation to a disk ORA-15081: failed to submit an I/O operation to a disk DBW3 (ospid: 11370): terminating the instance due to error 63999
Ø 影响的产品及版本 ASMLib+OL6.7 RHCK(2.6.32-573.xx) 或者 ASMLib+Redhat 6.7 kernel(2.6.32-573.el6.x86_64) Ø 原因和触发条件 由于在RHEL6.7中引入了新的Kernel bug(1163769)。 当执行 OS命令service multipathd reload" 或者类似" kpartx -a /dev/mapper/asm1时。会短暂地将block设备的queue limits设置为默认值。 而ASMLib会 不断读取这个值,当发现这个值改变时,会将IO fail,从而 引发DB Crash。 例如:在增加ASM磁盘的场景中, 如果使用multipath reload会触发;
Ø 详细说明 在multipathd reload的 时候,在多路径设备上的磁盘,短暂的把它的队列限制( queue limits)设置成了默认的值。如果这时候ASMlib正 在发起I/O,那么这个默认的值会导致错误。 当没有使用ASMlib的时候,kernel走的是另一个代码路径,不会触发队列限制( queue limits)的修改,因此不会出现这个问题。 这个问题是在RHEL6.7 kernel中 由下面的补丁引起的: dm: remove request-based logic from make_request_fn wrapper 然而这个fix不够周全,它会把已 经设置了队列限制的设备恢复到默认值,因此这个补丁还需要一个补丁来修复。
Ø 解决方案 这个bug 已经提交给Linux社区和RedHat公 司,但是目前RedHat6.7 和 RH 6.8 还没有 发布修复; 在Oracle Linux 6.7的Redhat kernel里也有这个问题.但Oracle Linux 6.7的UEK里是没有这个问题的.
Ø 临时规避方案 执 行以上OS命令之前,请确保数据库处于关闭状态; |