当前位置 博文首页 > LuciferLiu_DBA:RAC ASM磁盘存储配置相关(转载)

    LuciferLiu_DBA:RAC ASM磁盘存储配置相关(转载)

    作者:[db:作者] 时间:2021-06-15 15:09

    存储环境设置

    存储的配置总结下只有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才发现。