天天看點

ASMLib和udev差別

    ASMLib和udev都解決了裝置名固定的問題。在linux中,裝置的檢測和枚舉的順序并不是固定的。這和在Solaris中不一樣,舉個例子,除非一個磁盤在陣列中從實體上移動了,否則裝置名(例如c0t0d1p1)不會改變。沒做多路徑的存儲陣列的重新配置在linux中會有很大的問題:一個裝置原先在作業系統中顯示為/dev/sda可能會在重新開機後被重新映射為/dev/sdg,僅僅是因為作業系統檢測到它比上一次啟動時晚了一點。基于裝置名的裸裝置映射注定是要失敗的。

    首先看看udev的解決方法。一個SCSI裝置的world-wide-ID(WWID)不會發生改變,在udev中利用了這一點制定一個規則,這個規則建立一個映射,它定義裝置/dev/raw/raw1總是指向SCSI ID是xxxx的LUN中。udev的主要問題是,它的配置不夠直覺和易用。由于udev不能複制配置,在叢集中的每個節點上管理者都需要去維護udev配置。(我們可以使用udevinfo -q path -n /dev/sda1 來檢視/dev/sda1對應的udev裝置名,該路徑在/sys下)

    配置了多路徑的存儲則不會有這個問題,因為另一個軟體層(比如,devicemapper-multipath包)或供貨商指定的軟體會建立一個邏輯裝置。

ASM磁盤的管理變得非常簡單。ASMLib由3個RPM包組成:一個核心子產品、實際ASMLib和支援工具。在使用一個LUN作為ASM disk前,你可以使用ASMLib工具通過将中繼資料資訊添加到磁盤頭部來标記它,然後ASMLib就可以識别出這個新的LUN,将其作為添加到ASM disk group的一個可能的候選。重新開機的時候,ASMLib将掃描磁盤頭部的資訊來識别ASM disk,不管實體裝置名在啟動過程中變成了什麼。它保證了裝置名的穩定性,而且成本非常低。ASMLib是一個核心子產品,在内部配置設定自己的記憶體結構,它可以在單路徑和多路徑下配置。

ASM 配置

ASM 可以使用裸裝置 或者ASMLib 方式或者UDEV綁定, 因為裸設别的維護比較複雜,在此隻講解ASMLib 方式和UDEV方式。 ---推薦UDEV方式

ASMLib 方式

對應不同的作業系統, 需要不同的包,下載下傳的時候一定要和作業系統核心一緻。

下載下傳并安裝ASMLIB

oracle 官居網下載下傳下面兩個包

oracleasmlib-2.0.4-1.el6.x86_64.rpm oracleasm-support-2.1.8-1.el6.x86_64.rpm

cd /etc/yum.repos.d/

下載下傳 redhat6.8 核心 oracleasm 包

wget  http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6  -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

如果使用的是 Oracle Linux 的 uek 核心,oracleasm 已經被編譯到了核心中,如果使用的是和

Red Hat 相容的核心,那麼需要手動安裝 kmod-oracleasm 包

yum install kmod-oracleasm(oracle linux 不用裝)rpm -ivh oracleasmlib-2.0.4-1.el6.x86_64.rpm oracleasm-support-2.1.8-1.el6.x86_64.rpm

配置 asmlib 驅動

[root@11gocp yum.repos.d]# /etc/init.d/oracleasm configure

Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library

driver. The following questions will determine whether the driver is

loaded on boot and what permissions it will have. The current values

will be shown in brackets ('[]'). Hitting <ENTER> without typing an

answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: grid

Default group to own the driver interface []: asmadmin

Start Oracle ASM library driver on boot (y/n) [n]: y

Scan for Oracle ASM disks on boot (y/n) [y]:

Writing Oracle ASM library driver configuration: done

Initializing the Oracle ASMLib driver: [ OK ]

Scanning the system for Oracle ASMLib disks: [ OK ]

[root@11gocp yum.repos.d]#

啟動ASM

[root@11gocp yum.repos.d]# /etc/init.d/oracleasm start

Initializing the Oracle ASMLib driver: [ OK ]

Scanning the system for Oracle ASMLib disks: [ OK ]

[root@11gocp yum.repos.d]#

建立ASM磁盤

/etc/init.d/oracleasm createdisk VOL1 /dev/sdb5

/etc/init.d/oracleasm createdisk VOL2 /dev/sdb6

/etc/init.d/oracleasm createdisk VOL3 /dev/sdb7

/etc/init.d/oracleasm createdisk VOL4 /dev/sdb8

/etc/init.d/oracleasm createdisk VOL5 /dev/sdb9

/etc/init.d/oracleasm createdisk VOL6 /dev/sdb10

[root@11gocp asm]# /etc/init.d/oracleasm listdisks

VOL1

VOL2

VOL3

VOL4

VOL5

VOL6

[root@ASMTEST ~]# /etc/init.d/oracleasm querydisk -v -p VOL1

Disk "VOL1" is a valid ASM disk

/dev/sdb5: LABEL="VOL1" TYPE="oracleasm" 

--建立磁盤組

SQL> create diskgroup dg3 external redundancy disk 'ORCL:VOL9','ORCL:VOL10';

--添加磁盤

SQL> alter diskgroup dg1 add disk 'ORCL:VOL9';

--删除磁盤

SQL> alter diskgroup dg1 drop disk VOL9;

--建立故障組

create diskgroup test high redundancy

failgroup fg1 disk 'ORCL:VOL8' name d2a

failgroup fg2 disk 'ORCL:VOL9' name d2b

failgroup fg3 disk 'ORCL:VOL10' name d2c;

create diskgroup test normal redundancy

failgroup fg1 disk

       'ORCL:VOL8' name d2a,

       'ORCL:VOL9' name d2b,

failgroup fg2 disk

       'ORCL:VOL10' name d2c,

       'ORCL:VOL11' name d2d;

使用UDEV服務設定ASM共享盤,步驟如下:

使用一個FOR腳本來實作查詢磁盤的資訊,我這裡有8個盤,并且盤符是sd b-i. 這裡盤符可以通過fdisk -l來查詢

是以腳本也是b-i. 如果建立的盤沒這麼多,比如是盤符從sdc-sdf,就根據實際情況修改這個腳本。

腳本如下:echo到done之間是一句話,注意避免自動換行影響語句執行等問題。

for i in b c d e f g h i ;
do
echo "KERNEL==\"sd*\", BUS==\"scsi\",PROGRAM==\"/sbin/scsi_id -g -u -s %p\", RESULT==\"`scsi_id -g -u-s /block/sd$i`\", NAME=\"asm-disk$i\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\""
done      

運作結果如下:

[root@bysrac1 ~]# for i in b c d e f g h i ; do echo"KERNEL==\"sd*\", BUS==\"scsi\",PROGRAM==\"/sbin/scsi_id -g -u -s %p\", RESULT==\"`scsi_id -g -u-s /block/sd$i`\", NAME=\"asm-disk$i\",OWNER=\"grid\", GROUP=\"asmadmin\",MODE=\"0660\""; done

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VBb19dd60c-dc412d96_",NAME="asm-diskb", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VBfc1c280c-e7283ea1_",NAME="asm-diskc", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB7c002099-e4ff7950_",NAME="asm-diskd", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB86fa23a3-2e2ed9dc_", NAME="asm-diske",OWNER="grid", GROUP="asmadmin", MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VBa1d0725b-dda35f5d_",NAME="asm-diskf", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB229bebfa-cf3ab9c1_",NAME="asm-diskg", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB4cec8c01-47cce08d_",NAME="asm-diskh", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB44e8df01-253c8b5a_",NAME="asm-diski", OWNER="grid", GROUP="asmadmin",MODE="0660"

把腳本得出的内容複制到建立的檔案中

[root@bysrac1 ~]# cd /etc/udev/rules.d/

[root@bysrac1 rules.d]# vi 99-oracle-asmdevices.rules

[root@bysrac1 rules.d]# cat 99-oracle-asmdevices.rules

NEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id-g -u -s %p", RESULT=="SATA_VBOX_HARDDISK_VBb19dd60c-dc412d96_",NAME="asm-diskb", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VBfc1c280c-e7283ea1_", NAME="asm-diskc",OWNER="grid", GROUP="asmadmin", MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB7c002099-e4ff7950_",NAME="asm-diskd", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB86fa23a3-2e2ed9dc_",NAME="asm-diske", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VBa1d0725b-dda35f5d_",NAME="asm-diskf", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB229bebfa-cf3ab9c1_",NAME="asm-diskg", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB4cec8c01-47cce08d_",NAME="asm-diskh", OWNER="grid", GROUP="asmadmin",MODE="0660"

KERNEL=="sd*", BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="SATA_VBOX_HARDDISK_VB44e8df01-253c8b5a_",NAME="asm-diski", OWNER="grid", GROUP="asmadmin",MODE="0660"

[root@bysrac1 ~]# start_udev

Starting udev:                                         [  OK  ]

[root@bysrac1 rules.d]# ls -l /dev/asm*

brw-rw---- 1 grid asmadmin 8,  16 Jun19 22:13 /dev/asm-diskb

brw-rw---- 1 grid asmadmin 8,  32 Jun19 22:13 /dev/asm-diskc

brw-rw---- 1 grid asmadmin 8,  48 Jun19 22:13 /dev/asm-diskd

brw-rw---- 1 grid asmadmin 8,  64 Jun19 22:13 /dev/asm-diske

brw-rw---- 1 grid asmadmin 8,  80 Jun19 22:13 /dev/asm-diskf

brw-rw---- 1 grid asmadmin 8,  96 Jun19 22:13 /dev/asm-diskg

brw-rw---- 1 grid asmadmin 8, 112 Jun 19 22:13 /dev/asm-diskh

brw-rw---- 1 grid asmadmin 8, 128 Jun 19 22:13 /dev/asm-diski

把上面建的檔案傳到第二個節點上去

[root@bysrac1 rules.d]# scp 99-oracle-asmdevices.rules  bysrac2:/etc/udev/rules.d/

Warning: Permanently added 'bysrac2,192.168.1.222' (RSA) to the list ofknown hosts.

root@bysrac2's password:

99-oracle-asmdevices. 100% 1429    1.4KB/s   00:00  

到第二個節點上執行start_udev指令

[root@bysrac2 ~]# ls /etc/udev/rules.d/99-oracle-asmdevices.rules

/etc/udev/rules.d/99-oracle-asmdevices.rules

[root@bysrac2 ~]# start_udev

Starting udev:                                         [  OK  ]

[root@bysrac2 ~]# ls -l /dev/asm*

brw-rw---- 1 grid asmadmin 8,  16 Jun19 22:18 /dev/asm-diskb

brw-rw---- 1 grid asmadmin 8,  32 Jun19 22:18 /dev/asm-diskc

brw-rw---- 1 grid asmadmin 8,  48 Jun19 22:18 /dev/asm-diskd

brw-rw---- 1 grid asmadmin 8,  64 Jun19 22:18 /dev/asm-diske

brw-rw---- 1 grid asmadmin 8,  80 Jun19 22:18 /dev/asm-diskf

brw-rw---- 1 grid asmadmin 8,  96 Jun19 22:18 /dev/asm-diskg

brw-rw---- 1 grid asmadmin 8, 112 Jun 19 22:18 /dev/asm-diskh

brw-rw---- 1 grid asmadmin 8, 128 Jun 19 22:18 /dev/asm-diski

繼續閱讀