暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

案例总结--如何在Linux下用multipath给Oracle RAC数据库配置共享存储?

黄伟DBCA 2021-04-08
1855

写在前面的两句话:本篇涉及到部分命令和代码,可能导致展示在你的手机屏幕时,显得不够友好、美观,非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相关的几个配置文件

  1. /etc/multipath.conf 该文件是multipath的配置文件,也最为重要。记录系统中使用支持多路径设备的名称、设备厂商、属性、默认值、访问配置等;

  2. /usr/share/doc/device-mapper-multipath-0.4.7/multipath.conf.defaults记录系统中支持多路径设备的默认值列表;

  3. /usr/share/doc/device-mapper-multipath-0.4.7/multipath.conf.annotated记录系统中支持多路径设备的参数配置选项及其说明。

其中,第1个文件最为重要,通常都需要配置,而其余2个文件在配置多路径设备的过程中作为辅助说明使用。/etc/multipath.conf配置文件主要由以下5部分组成:

  1. blacklist:列出系统中哪些设备不采用多路径来管理,即黑名单;默认情况下,系统中的所有设备都在黑名单中,需要将这部分注释掉;

  2. blacklist_exceptions:顾名思义,黑名单例外,设备黑名单中哪些使用多路径方式;

  3. defaults:系统中多路径设备的默认值;

  4. multipaths:设置系统中每一个多路径设备的属性值,仅当系统中配置两个或以上的不同多路径设备时需要设置;

  5. 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相关的几个路径

  1. /dev/mapper

  2. /dev/mpath

  3. /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磁盘了。


七 补充说明

  1. 基础:搞清楚multipath的作用和功能及如何配置;

  2. 难点:配置/etc/multipath.conf文件;

  3. 易忘:配置完多路径之后,要将multipathd服务加到OS启动服务级别;

  4. 易错:多路径设备使用的唯一接口是/dev/mapper下的设备,而非其它;

  5. 疑惑:配置完多路径设备之后,你也许会看到类似下述结果:

[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)

是因为:

  1. 每台服务器上的2个HBA卡都经过一个单一不分区的FC 交换机连接到3PAR存储的两个控制器端口,所以,我们看到在每台主机上同时出现/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd 4个设备;

  2. 同时看到/dev/sda-d的4个设备都有分区信息,其实每个磁盘的分区信息来源于对/dev/mapper/下360002ac0000000000000001800009036执行的分区结果。


配图:源自《Red Hat Enterprise Linux 6 DM Multipath Configuration and Administration Edition 1》


完成这篇文字的过程中,DB君也投入了时间成本,希望对你有用或者有所帮助。如果不介意帮我增+1位读者的话,欢迎把这篇文章或者微信号『黄伟DBCA』分享给你身边的朋友。

据说,还有87%的人不知道长按二维码即可关注。

文章转载自黄伟DBCA,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论