Linux的multipath for ASM

huangdazhu發表於2016-04-08

之前做過rac的儲存級別配置,這裡主要涉及到的是asm共享磁碟的配置,裸裝置等,一般在linux上面配置asm 共享儲存都會選用asmlib或者udev,小魚個人更傾向於用udev來構造asm disk,而還可以用多路徑軟體來構造asm disk,接下來用linux自帶的multipath構造asm disk。

簡單敘述下多路徑的原理:一般個人pc都是主機和儲存在一起,都是硬碟直接掛接到一個匯流排上,此時都是一對一的關係,而到光纖組成的san環境、或者iscsi組成的ipsan環境,由於主機和儲存透過光纖交換機或者多塊網路卡及IP來連線,此時主機到儲存可以有多條路徑可以選擇。而且在作業系統級別(linux unix系統只會關注邏輯裝置,win上不清楚)管理的都是虛擬的裝置,此時os就會認為存在多個裝置,而實際上只是一塊物理磁碟路徑不同導致,為了解決這種問題多路徑軟體也就產生了。
1故障的切換和恢復
2 IO流量的負載均衡
3 磁碟的虛擬化

接下來用mulitpath固化磁碟裝置構造一個單例項的asm例項。
1 驗證linux的multipath軟體是否安裝和啟動,系統預設是會安裝multipath相關的rpm包
[root@dg01 etc]# rpm -qa|grep mapper
device-mapper-1.02.67-2.el5
device-mapper-multipath-0.4.9-23.0.9.el5
device-mapper-1.02.67-2.el5
device-mapper-multipath-libs-0.4.9-23.0.9.el5
device-mapper-event-1.02.67-2.el5

預設是不會自動啟動multipath服務的,這裡可以chkconfig設定開機自啟動。而且multipath模組預設頁不會自動載入到核心模組中,可以手動或設定開機自啟動到載入核心模組中。
[root@dg01 etc]# modprobe dm-multipath
[root@dg01 etc]# modprobe dm-round-robin
[root@dg01 etc]# chkconfig --level 2345 multipathd on
[root@dg01 etc]# service multipathd start
Starting multipathd daemon: [ OK ]
上面的chkconfig可以指定開機自啟動的服務,而如果要自動載入模組到核心中,直接將modprobe dm-multipath寫到開機自啟動的檔案下例如/etc/init.d下

2 配置multipath,multipath主要是需要配置/etc/multipath.conf檔案
[root@dg01 ~]# cat /etc/multipath.conf

blacklist {
devnode "sda"
devnode "sdb"
}

multipaths {
multipath {
wwid SATA_VBOX_HARDDISK_VB78bccd4d-d0b1841b_
alias mpath1
}
}

這裡排除了 /dev/sda和/dev/sdb磁碟,其餘的系統能檢測的磁碟都會根據多路徑規則生成對應的多路徑磁碟,由於這裡小魚是測試環境只有sda、sdb、sdc三塊磁碟,所以也就只有sdc這塊磁碟用來生成多路徑磁碟了。

需要注意的是wwid SATA_VBOX_HARDDISK_VB78bccd4d-d0b1841b_這個是裝置唯一標示符,大家如果用udev繫結disk構造asm有過經驗,至於如何去找到這個wwid,方法如下:(linux 6需要去掉-s引數)
Linux 5:
[root@dg01 ~]# scsi_id -g -u -s /block/sdc
SATA_VBOX_HARDDISK_VB78bccd4d-d0b1841b_

3 根據multipath.conf配置檔案生成多路徑磁碟。
[root@dg01 ~]# multipath –F (清除multipath磁碟)
[root@dg01 ~]# multipath -v2 (格式化multipath磁碟)
create: mpath1 (SATA_VBOX_HARDDISK_VB78bccd4d-d0b1841b_) undef ATA,VBOX HARDDISK
size=4.0G features='0' hwhandler='0' wp=undef
`-+- policy='round-robin 0' prio=1 status=undef
`- 2:0:0:0 sdc 8:32 undef ready running
[root@dg01 ~]# multipath –ll (列出multipath磁碟)
mpath1 (SATA_VBOX_HARDDISK_VB78bccd4d-d0b1841b_) dm-0 ATA,VBOX HARDDISK
size=4.0G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 2:0:0:0 sdc 8:32 active ready running

關於multipath的三個檔案和資料夾:
/dev/mapper/mpathn 是軟體虛擬出來的多路徑裝置,這個可以被我們用來掛載使用。
/dev/mpath/mpathn 這個是udev裝置管理器建立的,不能用來掛載。
/dev/dm-n 這個是軟體自身使用的,不能被軟體以外使用。不可掛載。

[root@dg01 ~]# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 62 Jun 23 23:04 control
brw-rw---- 1 root disk 253, 0 Jun 23 23:15 mpath1
[root@dg01 ~]# ls -l /dev/mpath/
total 0
lrwxrwxrwx 1 root root 7 Jun 23 23:15 mpath1 -> ../dm-0
[root@dg01 ~]# ls -l /dev/dm-0
brw-rw---- 1 root root 253, 0 Jun 23 23:15 /dev/dm-0

4 對多路徑磁碟分割槽
在對多路徑磁碟進行分割槽時最好先執行pvcreate,pvcreate用於把物理磁碟分割槽生成物理卷。
[root@dg01 ~]# pvcreate /dev/mapper/mpath1
Writing physical volume data to disk "/dev/mapper/mpath1"
Physical volume "/dev/mapper/mpath1" successfully created

[root@dg01 ~]# fdisk /dev/mapper/mpath1
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-522, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522):
Using default value 522

Command (m for help): p

Disk /dev/mapper/mpath1: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/mapper/mpath1p1 1 522 4192933+ 83 Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

當對多路徑磁碟分割槽後,發現此時生成的分割槽並沒有在/dev下顯示
[root@dg01 ~]# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 62 Jun 23 23:04 control
brw-rw---- 1 root disk 253, 0 Jun 23 23:27 mpath1
[root@dg01 ~]# ls -l /dev/dm-0
brw-rw---- 1 root root 253, 0 Jun 23 23:15 /dev/dm-0
[root@dg01 ~]# ls -l /dev/mpath/
total 0
lrwxrwxrwx 1 root root 7 Jun 23 23:15 mpath1 -> ../dm-0

此時需要重啟ipscan或者fcsan也就是重啟iscsi協議服務或者fcscan光纖服務。
[root@dg01 ~]# service iscsi restart
[root@dg01 ~]# start_udev

[root@dg01 ~]# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 62 Jun 23 23:04 control
brw-rw---- 1 root disk 253, 0 Jun 23 23:34 mpath1
brw-rw---- 1 root disk 253, 1 Jun 23 23:36 mpath1p1
[root@dg01 ~]# ls -l /dev/dm-*
brw-rw---- 1 root root 253, 0 Jun 23 23:33 /dev/dm-0
brw-rw---- 1 root root 253, 1 Jun 23 23:36 /dev/dm-1
[root@dg01 ~]# ls -l /dev/mpath/
total 0
lrwxrwxrwx 1 root root 7 Jun 23 23:15 mpath1 -> ../dm-0
lrwxrwxrwx 1 root root 7 Jun 23 23:36 mpath1p1 -> ../dm-1

5 還要修改multipath下的磁碟宿主
[root@dg01 ~]# vi /etc/udev/rules.d/99-asm-multipath.rules
PROGRAM="/bin/chown oracle:oinstall /dev/mapper/mpath1p1"

[root@dg01 ~]# start_udev
Starting udev: [ OK ]
[root@dg01 ~]# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 62 Jun 24 02:57 control
brw-rw---- 1 root disk 253, 0 Jun 24 02:58 mpath1
brw-rw---- 1 oracle oinstall 253, 1 Jun 24 03:50 mpath1p1

6 dbca建立asm例項,由於比較簡單就不列出了,重點看看asm的引數。
SQL> show parameter asm;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskgroups string MULTI
asm_diskstring string /dev/mapper/*
asm_power_limit integer 1

注意的是dbca建立asm時,那個asm disk的路徑是/dev/mapper/,特別還需要注意許可權問題。


前篇blog中 小魚說到了linux下多路徑繫結單例項的asm,當然一般而言單例項下我們還是會盡可能選擇檔案系統,而如果考慮到rac環境由於需要共享儲存,而共享儲存更多的需要固化物理磁碟,此時我們可以選擇的是asmlib、udev、多路徑,一般而言linux上用的較多的是asmlib和udev繫結,多路徑在unix上面較多。

下面小魚介紹下如何用linux自帶的多路徑軟體mulitpath繫結共享儲存來建立asm disk:
1 獲取共享儲存的wwid唯一裝置號。
[root@rac01 ~]# scsi_id -g -u -s /block/sdd
SATA_VBOX_HARDDISK_VB3e724211-d3c035ee_
[root@rac01 ~]# scsi_id -g -u -s /block/sde
SATA_VBOX_HARDDISK_VB4ba68a09-6456b28e_
[root@rac01 ~]# scsi_id -g -u -s /block/sdf
SATA_VBOX_HARDDISK_VB487de809-4febb72d_
[root@rac01 ~]# scsi_id -g -u -s /block/sdg
SATA_VBOX_HARDDISK_VB4659564f-3030047e_

blacklist {

devnode "sd[a-c]"
}

2 配置共享儲存的多路徑
[root@rac01 ~]# cat /etc/multipath.conf
blacklist {

devnode "sd[a-c]"
}

multipaths {
multipath {
wwid SATA_VBOX_HARDDISK_VB3e724211-d3c035ee_
alias data_mpath1
}
multipath {
wwid SATA_VBOX_HARDDISK_VB4ba68a09-6456b28e_
alias data_mpath2
}
multipath {
wwid SATA_VBOX_HARDDISK_VB487de809-4febb72d_
alias back_mpath1
}
multipath {
wwid SATA_VBOX_HARDDISK_VB4659564f-3030047e_
alias back_mpath2
}
}
複製多路徑配置檔案到節點2
[root@rac01 ~]# scp /etc/multipath.conf 192.168.56.103:/etc/multipath.conf

3 生成多路徑磁碟
分別在兩個節點執行下面的命令。
[root@rac01 ~]# multipath -F
[root@rac01 ~]# multipath -v2
create: data_mpath1 (SATA_VBOX_HARDDISK_VB3e724211-d3c035ee_) undef ATA,VBOX HARDDISK
size=4.0G features='0' hwhandler='0' wp=undef
`-+- policy='round-robin 0' prio=1 status=undef
`- 3:0:0:0 sdd 8:48 undef ready running
create: data_mpath2 (SATA_VBOX_HARDDISK_VB4ba68a09-6456b28e_) undef ATA,VBOX HARDDISK
size=4.0G features='0' hwhandler='0' wp=undef
`-+- policy='round-robin 0' prio=1 status=undef
`- 4:0:0:0 sde 8:64 undef ready running
create: back_mpath1 (SATA_VBOX_HARDDISK_VB487de809-4febb72d_) undef ATA,VBOX HARDDISK
size=4.0G features='0' hwhandler='0' wp=undef
`-+- policy='round-robin 0' prio=1 status=undef
`- 5:0:0:0 sdf 8:80 undef ready running
create: back_mpath2 (SATA_VBOX_HARDDISK_VB4659564f-3030047e_) undef ATA,VBOX HARDDISK
size=2.0G features='0' hwhandler='0' wp=undef
`-+- policy='round-robin 0' prio=1 status=undef
`- 6:0:0:0 sdg 8:96 undef ready running
[root@rac01 ~]# multipath -ll
back_mpath2 (SATA_VBOX_HARDDISK_VB4659564f-3030047e_) dm-3 ATA,VBOX HARDDISK
size=2.0G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 6:0:0:0 sdg 8:96 active ready running
back_mpath1 (SATA_VBOX_HARDDISK_VB487de809-4febb72d_) dm-2 ATA,VBOX HARDDISK
size=4.0G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 5:0:0:0 sdf 8:80 active ready running
data_mpath2 (SATA_VBOX_HARDDISK_VB4ba68a09-6456b28e_) dm-1 ATA,VBOX HARDDISK
size=4.0G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 4:0:0:0 sde 8:64 active ready running
data_mpath1 (SATA_VBOX_HARDDISK_VB3e724211-d3c035ee_) dm-0 ATA,VBOX HARDDISK
size=4.0G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 3:0:0:0 sdd 8:48 active ready running

4對多路徑磁碟進行規劃(這裡可以選擇分割槽也可以選擇不分割槽,注意如果分割槽最好對/dev/mapper 下的目錄進行分割槽,例如fdisk /dev/mapper/back_mpath1)

分割槽完成後分別在兩個節點重啟下iscsi服務和udev規則檢驗
[root@rac01 ~]# service iscsi restart
[root@rac01 ~]# start_udev
[root@rac01 ~]# ls -l /dev/mapper/
total 0
brw-rw---- 1 root disk 253, 2 Jun 27 22:35 back_mpath1
brw-rw---- 1 root disk 253, 5 Jun 27 22:35 back_mpath1p1
brw-rw---- 1 root disk 253, 3 Jun 27 22:35 back_mpath2
brw-rw---- 1 root disk 253, 4 Jun 27 22:35 back_mpath2p1
crw------- 1 root root 10, 62 Jun 27 21:10 control
brw-rw---- 1 root disk 253, 0 Jun 27 22:54 data_mpath1
brw-rw---- 1 root disk 253, 6 Jun 27 22:55 data_mpath1p1
brw-rw---- 1 root disk 253, 1 Jun 27 22:54 data_mpath2
brw-rw---- 1 root disk 253, 7 Jun 27 22:55 data_mpath2p1

5 改變磁碟的宿主許可權。
[root@rac01 oracle]# cat /etc/udev/rules.d/99-asm-multipath.rules
PROGRAM="/bin/chown oracle:oinstall /dev/mapper/back_mpath1p1"
PROGRAM="/bin/chown oracle:oinstall /dev/mapper/back_mpath2p1"
PROGRAM="/bin/chown oracle:oinstall /dev/mapper/data_mpath1p1"
PROGRAM="/bin/chown oracle:oinstall /dev/mapper/data_mpath2p1"
[root@rac01 oracle]# ls -l /dev/mapper/
total 0
brw-rw---- 1 root disk 253, 2 Jun 27 22:36 back_mpath1
brw-rw---- 1 oracle oinstall 253, 5 Jun 27 22:36 back_mpath1p1
brw-rw---- 1 root disk 253, 3 Jun 27 22:36 back_mpath2
brw-rw---- 1 oracle oinstall 253, 4 Jun 27 22:36 back_mpath2p1
crw------- 1 root root 10, 62 Jun 27 21:11 control
brw-rw---- 1 root disk 253, 0 Jun 27 22:36 data_mpath1
brw-rw---- 1 oracle oinstall 253, 6 Jun 27 23:09 data_mpath1p1
brw-rw---- 1 root disk 253, 1 Jun 27 22:36 data_mpath2
brw-rw---- 1 oracle oinstall 253, 7 Jun 27 23:09 data_mpath2p1

複製規則檔案到另一個節點
[root@rac01 oracle]# scp /etc/udev/rules.d/99-asm-multipath.rules 192.168.56.103:/etc/udev/rules.d/99-asm-multipath.rules
[root@rac02 oracle]# start_udev
[root@rac02 oracle]# ls -l /dev/mapper/
total 0
brw-rw---- 1 root disk 253, 2 Jun 27 22:36 back_mpath1
brw-rw---- 1 oracle oinstall 253, 5 Jun 27 22:36 back_mpath1p1
brw-rw---- 1 root disk 253, 3 Jun 27 22:36 back_mpath2
brw-rw---- 1 oracle oinstall 253, 4 Jun 27 22:36 back_mpath2p1
crw------- 1 root root 10, 62 Jun 27 21:11 control
brw-rw---- 1 root disk 253, 0 Jun 27 22:36 data_mpath1
brw-rw---- 1 oracle oinstall 253, 6 Jun 27 23:09 data_mpath1p1
brw-rw---- 1 root disk 253, 1 Jun 27 22:36 data_mpath2
brw-rw---- 1 oracle oinstall 253, 7 Jun 27 23:09 data_mpath2p1

此時asm disk所需的磁碟機代號已經規定好了,接下來可以直接進行asm配置,需要注意的是asm_diskstring需要設定/dev/mapper/*裝置,而不要設定/dev/dm-*形式的裝置,/dev/dm-*裝置是不固定的而且也是供內部使用的。

Asm例項的資訊如下:
SQL> show parameter asm;

NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
asm_diskgroups string
DATA, BACK
asm_diskstring string
/dev/mapper/*
asm_power_limit integer
1
SQL> select disk_number,path,name from v$asm_disk;

DISK_NUMBER PATH NAME
----------- ---------------------------------------- --------------------
1 /dev/mapper/data_mpath2p1 DATA_0001
0 /dev/mapper/data_mpath1p1 DATA_0000
0 /dev/mapper/back_mpath1p1 BACK_0000
1 /dev/mapper/back_mpath2p1 BACK_0001

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28869493/viewspace-2077590/,如需轉載,請註明出處,否則將追究法律責任。

相關文章