oracle asm lib中使用multipath的陷井
作者:osdba | 分类: 大话技术 | 标签: | 日期:2009-07-24
今天,查看一个数据库时,发现这个数据库没有使用到powerpath提供的多路径盘上。
这个数据库使用EMC的存储,操作系统是Linux,使用了asm lib包。
查看/dev/oracleasm/disks下的盘时:
#cd /dev/oracleasm/disks
#ls -l
admin@dbrac1:/dev/oracleasm/disks>ls -l
total 0
brw-rw—- 1 oracle dba 65, 17 Jun 18 16:44 ASM_VOL1
brw-rw—- 1 oracle dba 65, 1 Jun 18 16:44 ASM_VOL10
brw-rw—- 1 oracle dba 65, 33 Jun 18 16:44 ASM_VOL11
brw-rw—- 1 oracle dba 8, 113 Jun 18 16:44 ASM_VOL12
brw-rw—- 1 oracle dba 8, 225 Jun 18 16:44 ASM_VOL13
brw-rw—- 1 oracle dba 8, 129 Jun 18 16:44 ASM_VOL14
brw-rw—- 1 oracle dba 8, 81 Jun 18 16:44 ASM_VOL15
#cd /dev
#ls -l |grep “65, ”
admin@dbrac1:/dev>ls -l |grep “65, ”
brw-r—– 1 root disk 65, 0 Jun 19 00:42 sdq
brw-r—– 1 root disk 65, 1 Jun 18 16:44 sdq1
brw-r—– 1 root disk 65, 16 Jun 19 00:42 sdr
brw-r—– 1 root disk 65, 17 Jun 18 16:43 sdr1
发现/dev/oracleasm/disks下面的盘居然不是对应到/dev/emcpowerXX盘,
由此基本确定了asm lib没有使用多路径的盘,原先创建asm disk明明是使用
/dev/emcpower盘建立的:
/usr/sbin/asmtool -C -l /dev/oracleasm -n ASM_VOL1 -s /dev/emcpowera1
现在为何不是了?
通过分析asm lib的原理,基本清楚原因是这样的:
asm lib包只是对盘起一个名字,如“ASM_VOL1″,然后把这个名字存入磁盘的内容的头部。
下次机器自动启动时,会自动运行/etc/rc.d/init.d/oracleasm start,这时会自动扫描硬盘,
扫描过程中,是会读前面我们写入名称,由于使用了多路径,那么在/dev/下会有几个设备名对
应着同一个硬盘,其中/dev/sdXX的是各个路径盘,/dev/emcpowerXX是把这些路径合并了一个
盘,正常情况下我们都会要求asmlib使用/dev/emcpowerXX盘,但asm lib的扫描规则是使用最先扫描到的盘,
后面再扫描到的设备,只要上面的名称与前面相同,就使用前面的设备名,不管再次扫描到的了。
而一般情况下,asm lib都会先扫描到/dev/sdXX盘,而不是/dev/emcpowerXX的盘,由此导致了
此问题的发生。
其实oracle的官方网站也说了此问题:
http://www.oracle.com/technology/tech/linux/asmlib/multipath.html
解决方法就是修改配置文件中asm lib的扫描顺序,在/etc/sysconfig/oracleasm中配置如下内容:
ORACLEASM_SCANORDER=”emc sd”
这样扫描时会先扫描/dev/下emc开头的文件,然后才会是/dev下sd开头的文件。
这个问题很隐蔽,在安装asm lib时,没有任何地方提示需要配置这个扫描顺序,
当用/usr/sbin/asmtool -C -l /dev/oracleasm -n ASM_VOL1 -s /dev/emcpowera1建asm lib盘时,
也会正确建立在多路径盘上,但当机器重新启动后,asm lib重新扫描磁盘时,就会扫到错误的盘上。



此乃及时雨,多谢
ab5669 @ August 4, 2009 |
阿里巴巴DBA真是高人多
ab5669 @ August 4, 2009 |
在hds asm 的最佳实践里有提到这个
When using Hitachi Dynamic Link Manager software in an Oracle RAC environment with Oracle ASM and
ASMLib, change the value of ORACLEASM_SCANORDER parameter to ORACLEASM_SCANORDER=”sddlm” in
the /etc/sysconfig/oracleasm file.
emc 应该也有相应的文档
这个问题以前就看到过
hoterran @ August 4, 2009 |
那就直接用 /dev/emcpowerX 好了,没觉得asmlib有什么优势,何况只有Linux下才有啊!
10.2.0.2 开始已经支持Linux DirectIO了,我一直这么用!
Rain@DNA @ August 12, 2009 |
当你使用多节点的RAC时你就明白ASMLIB有多方便了,否则存储上的每个LUN在主机上映射的磁盘名不一样,会折腾死的
blue_prince @ August 14, 2009 |
我也碰到此问题,为了解决这问题,我去oracle网站下了oracleasm-support-2.1.4源码,然后读源码文件asmscan.c才搞情楚扫描顺序的。确实asm文档太少了,要动用看源码地步了。
soonwind @ May 24, 2011 |