RAC ASM磁盘存储配置相关

举报
Lucifer三思而后行 发表于 2021/10/28 10:49:12 2021/10/28
【摘要】 存储环境设置存储的配置总结下只有2步:持久化配置 和 权限配置 。一般来说这两步是可以合在一起的,只是使用多路径软件时需要分开来讲(多路径软件多了一个多路径聚合的步骤)。所谓持久化就是将磁盘通过UUID或者其他唯一标识符绑定为一个human friendly的磁盘名(可以是磁盘的软链接等),而权限配置就是为了可以使oracle可以正确使用这些磁盘,给他们赋予正确的用户和组以及权限(MODE...

存储环境设置

存储的配置总结下只有2步:持久化配置 和 权限配置 。一般来说这两步是可以合在一起的,只是使用多路径软件时需要分开来讲(多路径软件多了一个多路径聚合的步骤)。

所谓持久化就是将磁盘通过UUID或者其他唯一标识符绑定为一个human friendly的磁盘名(可以是磁盘的软链接等),而权限配置就是为了可以使oracle可以正确使用这些磁盘,给他们赋予正确的用户和组以及权限(MODE)。

在Linux环境下能够实现设备持久化的系统服务就是udev,除此之外几乎别无他法(就算有也千万别用)。可以通过man udev来查看udev rules的配置规则。

我们分两种情况来描述存储配置的步骤。

  • 情况一:使用多路径软件时:

一般来说生产上的存储使用系统自带的多路径软件multipath即可完成多路径持久化配置(lvm device mapper),这里贴一个示例配置文件的一部分:

# multipath.conf written by anaconda
multipaths {
    multipath {
        wwid "360080e50003279f000001a785a275fe8"
        alias REDO_01
    }
    multipath {
        wwid "360080e50003279f000001a775a275fba"
        alias RAC_OCR
    }
    multipath {
        wwid "360080e50003279f000001a795a27604e"
        alias RAC_ARCHIVE
    }
    multipath {
        wwid "360080e50003217cc00001c6d5a280dd8"
        alias REDO_02
    }
    multipath {
        wwid "360080e50003217cc00001c6e5a280e2b"
        alias RAC_DATA
    }
}
--不建议在这里加uid gid mode来设置属主和权限,因为不能设置附属group。

根据uuid进行了alias的绑定,之后重启multipathd即可,使用multipath -ll可以看到聚合后的盘。

然后使用multipath自带的udev规则文件12-dm-permissions.rules来完成聚合盘(/dev/dm-*)的udev配置,这样安装时直接查找/dev/mapper/*路径即可找到以alias名字显示的盘。

--设置步骤:
cp /usr/share/doc/device-mapper-1.02.117/12-dm-permissions.rules /etc/udev/rules.d/
vi /etc/udev/rules.d/12-dm-permissions.rules
--添加或注释如下一行:
ENV{DM_UUID}=="mpath-?*", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
--说白了就是设置下聚合盘的权限
start_udev
这里还有一些替代的方法,例如使用60-raw.rules来代替12-dm-permissions.rules的权限设置功能,例子如下:
# vi /etc/udev/rules.d/60-raw.rules
ACTION=="add", KERNEL=="dm-0", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="dm-1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="dm-2", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="dm-3", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="dm-4", RUN+="/bin/raw /dev/raw/raw5 %N"
KERNEL=="raw*", OWNER="grid" GROUP="asmadmin", MODE="0660"
--其原理是:/dev/mapper/下的盘符其实是指向/dev/dm-*的,将这些聚合盘映射为裸设备,也可以同时改变权限,缺点在于没有alias容易混淆。
# start_udev

至此情况一的权限配置已经完成了。

  • 情况二:如果你未使用multipath(常见于使用虚拟机的测试环境)

那么直接使用99-oracle-asmdevices.rules(udev规则,名字随便定,第一个数字表示解析顺序)或者通过60-raw.rules绑定raw盘来完成持久化配置和权限配置,并绑定易于人眼识别的name。

这种直接使用udev规则的方式与上述多路径绑定的区别只是在于无需通过多路径lvm进行映射,使用udev直接完成了绑定工作+权限配置工作。

参考:https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux

以及参考:官网文档附加的A部分中的Configuring Device Persistence Manually for Oracle ASM小节

基本步骤就是:

首先获取sd盘的uuid或ID_SERIAL(或其他可以唯一标识磁盘且在udev中定义了的标识符),然后将uuid/ID_SERIAL绑定至99-oracle-asmdevices.rules即可。

例如:
# /usr/lib/udev/scsi_id -g -u -d /dev/sdb --获取到某个盘的scsi-id。
# udevadm info --query=all --name=/dev/sdb | grep ID_SERIAL --获取到某个盘的ID_SERIAL

本文绑定UUID和ID_SERIAL的示例都来一个,以便新手可以清楚的认识udev是个什么东西:

绑定UUID示例(其实还可以大大简化):

[root@node1 ~]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VBc6580c49-d54cc0df", RUN+="/bin/sh -c 'mknod /dev/asmdisk01 b $major $minor; chown grid:asmadmin /dev/asmdisk01; chmod 0660 /dev/asmdisk01'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB41a7cba4-749c4aec", RUN+="/bin/sh -c 'mknod /dev/asmdisk02 b $major $minor; chown grid:asmadmin /dev/asmdisk02; chmod 0660 /dev/asmdisk02'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB6aaaf601-96dab065", RUN+="/bin/sh -c 'mknod /dev/asmdisk03 b $major $minor; chown grid:asmadmin /dev/asmdisk03; chmod 0660 /dev/asmdisk03'"

绑定ID_SERIAL示例:

KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VBc6580c49-d54cc0df",SYMLINK+="asm-ocr", OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VB41a7cba4-749c4aec",SYMLINK+="asm-mgmt",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VB6aaaf601-96dab065",SYMLINK+="asm-data",OWNER="grid",GROUP="asmadmin",MODE="0660"

需要注意的是rules文件中的内容是不允许任何主动换行符的,例如\等。

然后执行如下命令使udev规则生效即可:

udevadm control --reload-rules
udevadm trigger --type=devices
//Linux 7之前应该只需要start_udev即可,7版本去除了start_udev的命令,使用udevadm替代。

至于udev的规则文件中KERNELS,ENV{}都是些什么东西,为何用KERNELS和KERNEL都可以,为何用不同的命名方式都行,直接man udev寻找答案。

在这里我还要提一句,udev在CentOS-7上有个坑,NAME关键字不再能表示devnode名了,只能表示网卡名,这坑实在是太深我也翻车了,仔细看了好几遍man udev才发现。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。