写在前面的两句话:本篇涉及到部分命令和代码,可能导致展示在你的手机屏幕时,显得不够友好、美观,非DB君本意,见谅。且内容稍长,想快速了解的话,可以直接拉到最后第七部分。
一 案例背景介绍
这是2014年3月份的时候,DB君到香港某客户现场实施一套Oracle 11gR2 RAC 数据库部署的案例总结。
软、硬件环境:
硬件:2台数据库服务器由HP公司的Proliant DL380P G8组成,这两台PC Server 通过8GB HBA「Host Bus Adapter」卡连接存储设备,存储设备同样来自于HP公司:3PAR StoreServ 7200存储阵列。「3PAR是一家1999年成立,2008年上市,总部位于美加州弗莱蒙的独立存储厂商,2010年以20亿美元的价格被HP并购。公司创始人主要出自于Sun公司,前身叫做3PARdata。」
软件:OS采用RHEL 5.7 x86_64版本的Linux,数据库采用Oracle 11gR2 11.2.0.4企业版。
项目需求:
利用这两台HP DL G8服务器、加一套3PAR的共享存储,构建一套Oracle 11gR2的RAC数据库环境。
经同客户、及客户硬件供应商讨论确认,每台数据库服务器均通过双HBA卡经由FC交换机「Fibre Channel Switch」连接至3PAR存储。
这样,数据库服务器和存储之间就有了多链路的问题需要配置和解决。最终,选择Linux上自带的multipath多路径软件来解决。这,正是本篇文章要记录的主要内容。
二 multipath的作用及其功能
在本案例所涉及的场景中,每个服务器与3PAR存储之间分别有2条IO路径,那么主机与存储之间的IO数据流该如何选择和分配呢?是2条都用呢,还是只用其中的某1条,另外1条留作备用?同时,在每台服务器上看到的存储设备应该是1个,还是2个呢?
multipath多路径软件和存储设备搭配起来使用,就可以解决上述问题。multipath正是Linux平台上OS自带的多路径软件,当前,该软件可以支持市面上大多数的存储设备。当然,有些存储厂商的存储设备并不被multipath所支持,需要使用厂商自己的多路径软件。
根据multipath的不同配置还可以实现主机、存储之间的IO故障转移和恢复,以及对主机、存储设备间IO数据流的负载均衡。如下:
图1:Active/Passive模式
Server--HBA1--SAN1--controler1,Server--HBA2--SAN2--controler2形成主机到存储之间的两条IO路径,其中一条为Active模式,当这条链路出现故障,或该链路的某个节点环节出现问题时,IO会自动failover到另外一条Passive路径上去,此时Passive路径变成Active。
图2:Acitive/Acitive模式
Server--HBA1--SAN--controler1,Server--HBA2--SAN--controler2形成主机到存储之间的两条IO路径,两条路径均为Active模式。即,主机到存储之间的IO数据流会均衡的分布在这两条链路上。
三 Linux上安装multipath软件
安装device-mapper-multipath软件包即可。
[root@node1 ~]# rpm -qa|grep device
device-mapper-multipath-0.4.7-46.el5
device-mapper-1.02.63-4.el5
device-mapper-1.02.63-4.el5
device-mapper-event-1.02.63-4.el5
[root@oracledg ~]#
四 与multipath相关的几个配置文件
/etc/multipath.conf 该文件是multipath的配置文件,也最为重要。记录系统中使用支持多路径设备的名称、设备厂商、属性、默认值、访问配置等;
/usr/share/doc/device-mapper-multipath-0.4.7/multipath.conf.defaults记录系统中支持多路径设备的默认值列表;
/usr/share/doc/device-mapper-multipath-0.4.7/multipath.conf.annotated记录系统中支持多路径设备的参数配置选项及其说明。
其中,第1个文件最为重要,通常都需要配置,而其余2个文件在配置多路径设备的过程中作为辅助说明使用。/etc/multipath.conf配置文件主要由以下5部分组成:
blacklist:列出系统中哪些设备不采用多路径来管理,即黑名单;默认情况下,系统中的所有设备都在黑名单中,需要将这部分注释掉;
blacklist_exceptions:顾名思义,黑名单例外,设备黑名单中哪些使用多路径方式;
defaults:系统中多路径设备的默认值;
multipaths:设置系统中每一个多路径设备的属性值,仅当系统中配置两个或以上的不同多路径设备时需要设置;
devices:设置各个存储控制器的属性值,如果不是系统默认支持的存储设备的话,才需要配置。
如下,是DB君为客户环境配置的/etc/multipath.conf 部分内容:
注释掉blacklist部分:
# blacklist {
# devnode "*"
# }
blacklist_exceptions部分未做任何设置,保留系统默认值;
defaults部分:
defaults {
polling_interval 5
}
multipaths部分未做任何设置,保留系统默认值;
devices部分如下:
devices {
device {
vendor "3PARdata"
product "VV"
path_grouping_policy multibus
getuid_callout "/sbin/scsi_id -g -u -s block/%n"
path_selector "round-robin 0"
path_checker tur
hardware_handler "0"
failback immediate
rr_weight uniform
rr_min_io 100
no_path_retry 18
}
}
五 与multipath相关的几个路径
/dev/mapper
/dev/mpath
/dev/dm-n
成功配置完多路径设备之后,会在/dev/mapper路径下看到设备名。可以对该路径下的设备--360002ac0000000000000001800009036进行分区、创建逻辑卷操作。如:
[root@node1 ~]# ll dev/mapper/
total 0
brw-rw---- 1 root disk 253, 0 Dec 7 15:43 360002ac0000000000000001800009036
crw------- 1 root root 10, 63 Dec 7 15:43 control
[root@node1 ~]#
/dev/mpath路径下看到的是系统下的所有多路径设备,是便于查看所有多路径设备的接口;
/dev/dm-n路径下的设备名只保留给OS内部使用,我们永远都不要直接使用该路径下的设备。
六 分区并使用多路径设备
创建分区操作,如果该设备空间大于2T,则需要使用parted命令来创建分区,因为fdisk不支持大于2T空间的MBR「Main Boot Record」。而parted命令的分区结果采用GPT「GUID Partition Table 」分区表。
使用下述命令来对该设备进行分区操作:
[root@node1 ~]# parted dev/mapper/360002ac0000000000000001800009036
DB君对客户环境的3PAR存储创建4个分区之后,有下述结果:
/dev/mapper:
[root@node1 ~]# ll dev/mapper/
total 0
brw-rw---- 1 root disk 253, 0 Dec 7 15:35 360002ac0000000000000001800009036
brw-rw---- 1 root disk 253, 1 Dec 7 15:35 360002ac0000000000000001800009036p1
brw-rw---- 1 root disk 253, 2 Dec 7 15:35 360002ac0000000000000001800009036p2
brw-rw---- 1 root disk 253, 3 Dec 7 15:35 360002ac0000000000000001800009036p3
brw-rw---- 1 root disk 253, 4 Dec 7 15:35 360002ac0000000000000001800009036p4
crw------- 1 root root 10, 63 Dec 7 15:35 control
[root@node1 ~]# ll dev/mpath/
/dev/mpath:
[root@node1 ~]# ll dev/mpath/
total 0
lrwxrwxrwx 1 root root 7 Dec 7 15:35 360002ac0000000000000001800009036 -> ../dm-0
lrwxrwxrwx 1 root root 7 Dec 7 15:35 360002ac0000000000000001800009036p1 -> ../dm-1
lrwxrwxrwx 1 root root 7 Dec 7 15:35 360002ac0000000000000001800009036p2 -> ../dm-2
lrwxrwxrwx 1 root root 7 Dec 7 15:35 360002ac0000000000000001800009036p3 -> ../dm-3
lrwxrwxrwx 1 root root 7 Dec 7 15:35 360002ac0000000000000001800009036p4 -> ../dm-4
[root@node1 ~]#
/dev/dm-n:
[root@node1 ~]# ll /dev/dm*
brw-rw---- 1 root root 253, 0 Dec 7 15:35 /dev/dm-0
brw-rw---- 1 root root 253, 1 Dec 7 15:35 /dev/dm-1
brw-rw---- 1 root root 253, 2 Dec 7 15:35 /dev/dm-2
brw-rw---- 1 root root 253, 3 Dec 7 15:35 /dev/dm-3
brw-rw---- 1 root root 253, 4 Dec 7 15:35 /dev/dm-4
[root@node1 ~]#
使用/usr/sbin/oracleasm命令来对/dev/mapper/下的设备创建ASM磁盘,如:
[root@node1 ~]# /usr/sbin/oracleasm createdisk asmdisk3
/dev/mapper/360002ac0000000000000001800009036p3
Writing disk header: done
Instantiating disk: done
[root@node1 ~]# /usr/sbin/oracleasm createdisk asmdisk4
/dev/mapper/360002ac0000000000000001800009036p4
Writing disk header: done
Instantiating disk: done
[root@node1 ~]# /usr/sbin/oracleasm listdisks
ASMDISK1
ASMDISK2
ASMDISK3
ASMDISK4
[root@node1 ~]#
再到节点2上使用/usr/sbin/oracleasm scandisks命令就可以看到所有ASM磁盘了。
七 补充说明
基础:搞清楚multipath的作用和功能及如何配置;
难点:配置/etc/multipath.conf文件;
易忘:配置完多路径之后,要将multipathd服务加到OS启动服务级别;
易错:多路径设备使用的唯一接口是/dev/mapper下的设备,而非其它;
疑惑:配置完多路径设备之后,你也许会看到类似下述结果:
[root@node1 ~]# multipath -ll
360002ac0000000000000001800009036 dm-0 3PARdata,VV
[size=4.0T][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=4][active]
\_ 2:0:0:0 sda 8:0 [active][ready]
\_ 2:0:1:0 sdb 8:16 [active][ready]
\_ 3:0:0:0 sdc 8:32 [active][ready]
\_ 3:0:1:0 sdd 8:48 [active][ready]
[root@node1 ~]#
且:
[root@node1 ~]# ll /dev/sd*
brw-r----- 1 root disk 8, 0 Dec 7 23:43 /dev/sda
brw-r----- 1 root disk 8, 1 Dec 7 15:43 /dev/sda1
brw-r----- 1 root disk 8, 2 Dec 7 15:43 /dev/sda2
brw-r----- 1 root disk 8, 3 Dec 7 15:43 /dev/sda3
brw-r----- 1 root disk 8, 4 Dec 7 15:43 /dev/sda4
brw-r----- 1 root disk 8, 16 Dec 7 23:43 /dev/sdb
brw-r----- 1 root disk 8, 17 Dec 7 15:43 /dev/sdb1
brw-r----- 1 root disk 8, 18 Dec 7 15:43 /dev/sdb2
brw-r----- 1 root disk 8, 19 Dec 7 15:43 /dev/sdb3
brw-r----- 1 root disk 8, 20 Dec 7 15:43 /dev/sdb4
brw-r----- 1 root disk 8, 32 Dec 7 23:43 /dev/sdc
brw-r----- 1 root disk 8, 33 Dec 7 15:43 /dev/sdc1
brw-r----- 1 root disk 8, 34 Dec 7 15:43 /dev/sdc2
brw-r----- 1 root disk 8, 35 Dec 7 15:43 /dev/sdc3
brw-r----- 1 root disk 8, 36 Dec 7 15:43 /dev/sdc4
brw-r----- 1 root disk 8, 48 Dec 7 23:43 /dev/sdd
brw-r----- 1 root disk 8, 49 Dec 7 15:43 /dev/sdd1
brw-r----- 1 root disk 8, 50 Dec 7 15:43 /dev/sdd2
brw-r----- 1 root disk 8, 51 Dec 7 15:43 /dev/sdd3
brw-r----- 1 root disk 8, 52 Dec 7 15:43 /dev/sdd4
[root@node1 ~]# parted
GNU Parted 1.8.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: 3PARdata VV (scsi)
Disk /dev/sda: 4398GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 1000MB 1000MB msftres
2 1000MB 2000GB 1999GB
3 2000GB 3000GB 1000GB
4 3000GB 4398GB 1398GB
(parted)
是因为:
每台服务器上的2个HBA卡都经过一个单一不分区的FC 交换机连接到3PAR存储的两个控制器端口,所以,我们看到在每台主机上同时出现/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd 4个设备;
同时看到/dev/sda-d的4个设备都有分区信息,其实每个磁盘的分区信息来源于对/dev/mapper/下360002ac0000000000000001800009036执行的分区结果。
配图:源自《Red Hat Enterprise Linux 6 DM Multipath Configuration and Administration Edition 1》
完成这篇文字的过程中,DB君也投入了时间成本,希望对你有用或者有所帮助。如果不介意帮我增+1位读者的话,欢迎把这篇文章或者微信号『黄伟DBCA』分享给你身边的朋友。
据说,还有87%的人不知道长按二维码即可关注。




