天天看点

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

继续阅读