ASMLib包只是对盘起一个名字,如“ASM_VOL1″,然后把这个名字存入磁盘的内容的头部。下次机器自动启动时,会自动运行/etc/rc.d/init.d/oracleasm,这时会自动扫描硬盘,扫描过程中,是会读前面我们写入名称。
ASM不能同时"看到"同一块磁盘两次,如果"看到"两次会产生错误。在典型的多路径配置中,一块多路径磁盘在系统中会在3个地方出现:
1.通过第一条路经访问到该磁盘
2.通过第二条路径访问到该磁盘
3.通过multipath合并以后访问到该磁盘(即/dev/mapper目录下的设备)
举例来说:
一台服务器有一个本地磁盘/dev/sda,用来安装系统。另外通过服务器上的双口HBA卡(或2块HBA卡)连接到外部的SAN上,SAN上分配给这台服务器一块vdisk。那么这块vdisk就可以通过两条路径分别被服务器访问到,则系统中就会看到/dev/sdb和/dev/sdc两块硬盘,其实这两块硬盘是一块,只不过是通过HBA卡的不同端口访问到。
如果启用了multipath,那么可以通过/dev/mapper/mpatha这样的形式访问这个vdsik,此时可以通过任意一条路径访问该磁盘,如果其中sdb的路径失效,会自动转到sdc的路径上去,可以实现failover。
处于DM-Multipath控制下的磁盘,会在/dev目录下的三个地方出现:/dev/mapper/mpathn, /dev/mpath/mpathn和/dev/dm-n.
- /dev/mapper中的设备在启动过程的早期创建,这些设备是用来正常访问这些多路径设备的,例如创建文件系统,创建LVM等。
-
- /dev/mpath为了管理方便创建,可以在一个目录中查看所有的多路径设备,这些设备是udev设备管理器创建的,可能在系统启动的时候不能访问,不要使用这些设备创建文件系统或LVM。
- /dev/dm-n 这些设备是作为multipath内部使用的,永远也不应该使用这些设备进行任何操作。
大部分的软件不关心多路径的具体配置,无论sdb,sdc还是mpatha,只要可以访问到磁盘就行。ASMlib也是如此。因为ASM不能"看到"同一个设备两次,因此ASMlib会从这些路径中选择一条。但是接下来一个问题是:ASM会选择哪条路径呢?在默认情况下,ASMLib会选择第一条被发现的路径,至于哪条路径是第一条则是由Linux操作系统报告的,根据驱动的不同有可能是multipath也有可能是sdb或sdc。ASMLib的扫描规则是使用最先扫描到的盘,后面再扫描到的设备,只要上面的名称与前面相同,就使用前面的设备名,不管再次扫描到的了。而一般情况下,ASMLib都会先扫描到/dev/sdXX盘,而不是/dev/mapper/mpathX的盘,由此会导致数据库没有使用到multipah提供的多路径盘。
系统管理员当然期望ASMLib总是使用multipath设备。这时就需要告诉ASMLib扫描磁盘的顺序。修改的地方是ASMLib的配置文件/etc/sysconfig/oracleasm
在该文件中,有一个参数"ORACLEASM_SCANORDER",这个参数告诉ASMLib扫描硬盘时的顺序,例如:
ORACLEASM_SCANORDER="mapper/mpath* "
另外还有一个参数"ORACLEASM_SCANEXCLUDE",告诉ASMLib扫描硬盘时忽略哪些磁盘,例如:
ORACLEASM_SCANEXCLUDE="sdb sdc"
这样ASMLib在启动扫描磁盘时,会忽略其他路径,只会使用multipath合并后的磁盘。
" "号中是一个表达式,"mapper/mpath*"匹配mapper目录下的所有mpatha,mpathb这类的设备。
特别提示!
做过以上修改以后需要重新启动oracleasm服务。请与DBA协调好,先关闭该节点上的oracle。
参考文档:
http://www.itpub.net/thread-1443728-1-1.html
http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html-single/DM_Multipath/index.html