关于RAC创建ASM磁盘组时配置多路径和UDEV的相关问题总结
一.相关技术简介及个人总结
在Linux环境下安装Oracle RAC时,通常是先在OS层面配置好多路径软件后(multipath),再配置UDEV或asmlib来处理共享磁盘的权限,以便创建ASM磁盘组时能够看到这些磁盘。Linux6后推荐使用UDEV进行权限配置,本文不讨论asmlib相关的内容。在网上找RAC相关安装文档时,会发现在配置ASM磁盘时主要存在两种做法,有的人用的是multipath+UDEV,而有的人只用UDEV,同时UDEV的写法也是五花八门,极少看到有人对相关问题进行详细的说明,所以这里我专门针对相关问题进行总结。
1.多路径软件的作用
(1)故障的切换和恢复。为了保证存储访问的可靠性,一般至少要用2块光纤卡,通过2个FC switch,接在磁盘阵列的两个控制器上。这样,当一条path出问题,还有另一条path可访问。但是,从OS的角度看来,阵列上的某一个LUN,会有两个设备文件名与之对应(例如solaris上/dev/dsk/c5t0d0和/dev/dsk/c6t0d0)。MultiPathing软件的主要功能就是将2个设备文件虚拟成一个,OS访问时,这个设备名是2个path的。当一条path故障时,OS可以不中断地继续访问这个LUN。
(2)IO流量的负载均衡。既然有2个path,那么如果某一个path只是备用就浪费了。所以多路径软件的另一个功能就是load balance(也称为Active/Active)。但这个功能不仅仅由MultiPathing软件实现,磁盘阵列本身也必需支持,否则,MultiPathing只能实现主备方式(Active/Passive)。
2.常见的多路径软件有哪些
具体使用哪种多路径软件,首先要看存储的厂家和型号,比如EMC(现已被DELL收购)用PowerPath、华为用UltraPath、日立用HDLM等等,也有的存储型号没有专用的多路径软件,比如DELL的MD系列,这时就要用到Linux系统自带的multipath来进行配置了。由于是测试环境,我只能用multipath来进行测试,本文之后也都是multipath相关的配置,如果生产环境中用到的是其他的存储,找供应商提供相关的多路径软件配置文档即可。
3.UDEV的作用
简单的讲,通过UDEV配置,能够让Oracle对磁盘名进行持久化并改变磁盘访问权限为grid:asmadmin。这样在ASM的配置过程中能够看到磁盘。今后增加磁盘也不会改变原有的磁盘名称。
4.重点说明(必看)
###注:此部分是在网上搜集相关资料后的个人总结,不能保证权威无错,仅供参考。
(1)如果数据库服务器是物理机的话,在操作系统中必须配置多路径软件(如multipath);如果数据库服务器是虚拟机,在操作系统中可以不配置多路径软件,因为在ESXI上会配置。注意这里是"可以"不配置,我个人的建议是两种情况都配置。
(2)在LINUX 6.2 版本之前,multipath配置文件里可以使用uid,gid,mode这三个参数来配置磁盘的权限;6.2 版本之后,multipath配置文件里要去掉uid,gid,mode这三个参数,并配合使用UDEV来修改权限。所以会看到少数文档里面是只用了multipath来配置ASM磁盘的,不过现在新装的系统基本都是6.2版本之后的,所以不用太关注这种情况,知道有这么回事就可以了。
(3)关于配置UDEV时,使用12-dm-permissions.rules文件还是使用自定义名称的rules文件(通常命名为99-oracle-asmdevices.rules),12-dm-permissions.rules文件中的UDEV规则写法是专门针对配置了多路径软件的情况的,实测可以把该文件中的内容拷贝到自定义名称的rules文件中使用;99-oracle-asmdevices.rules中的UDEV规则写法是通用的,但需要注意这个通用写法如果写在12-dm-permissions.rules文件中,则不生效,相关写法详见本文配置的部分。简单来说,如果配置了multipath,那么只用12-dm-permissions.rules文件配置权限即可;如果没配置multipath,那么只配置99-oracle-asmdevices.rules文件即可;网上有些文档中是在配置multipath时,没有配置12-dm-permissions.rules,而是配置了99-oracle-asmdevices.rules,还有的文档是配置了multipath,且同时配置了两个rules文件,网上的文档中极少会特意说明这一点,我的最终结论是这两种方式都可以保证创建ASM磁盘组时可以正常使用对应的磁盘,但同时配置两个rules文件确实没必要。参考文档:https://www.cnblogs.com/realcp1018/p/9488963.html
(4)在使用UDEV规则的通用写法时,rules文件的命名并不是完全随意的,比如上一条提到的,将通用写法写在12-dm-permissions.rules文件中就不生效,我据此猜测UDEV规则写法与文件名存在一定关系,我以这个文件名为基础,经过大量修改测试(数字部分+英文部分)得出结论:文件名开头的数字有讲究,如果是个位数,只能用7~9(不能用0开头,比如07~09);如果是两位数,只能用61~99;如果是三位数,只能用600~999;如果是用12-dm-permissions.rules文件中针对配置了多路径软件的规则写法时,对文件名则没有这个要求。
############################################################################################################
###注:共享存储用openfiler模拟,需要注意安装openfiler的虚拟机和客户端的虚拟机都要配置两块网卡,并且两块网卡不同网段;因为有两块网卡,会使用两个IP各登录一次iscsi target,所以在客户端操作系统中会发现同一块磁盘被映射为两个不同的设备名,这样就完美模拟出了生产环境。文档中我就不详细介绍openfiler的安装配置了,具体可以参考我下方给出的链接。
openfiler镜像下载地址:https://www.openfiler.com/community/download
openfiler安装配置参考文档:https://blog.csdn.net/avatar_2009/article/details/112971563
iscsiadm命令详解:https://blog.csdn.net/wangyiyan315/article/details/121650947
multipath配置参考文档1:https://blog.csdn.net/avatar_2009/article/details/112979295
multipath配置参考文档2:http://blog.itpub.net/26736162/viewspace-2132858/
multipath配置参考文档3:https://www.cnblogs.com/realcp1018/p/9488963.html
############################################################################################################
二.同时配置multipath+UDEV时的操作
###注:所有RAC节点都要做相同的配置
1.Linux服务器挂载iSCSI磁盘
1.1 安装iscsi相关的包
yum install iscsi-initiator-utils -y
1.2 查看存储共享的ISCSI磁盘
###注:执行iscsiadm命令时会自动开启iscsi相关服务。
iscsiadm --mode discovery --type sendtargets --portal 10.10.10.100
输出结果如下:
10.10.10.100:3260,1 iqn.2023-01.com.openfiler:rac_disks
192.168.10.100:3260,1 iqn.2023-01.com.openfiler:rac_disks
1.3 挂载ISCSI磁盘
iscsiadm --mode discovery --type sendtargets --portal 10.10.10.100 --login
输出结果如下:
10.10.10.100:3260,1 iqn.2023-01.com.openfiler:rac_disks
192.168.10.100:3260,1 iqn.2023-01.com.openfiler:rac_disks
Logging in to [iface: default, target: iqn.2023-01.com.openfiler:rac_disks, portal: 10.10.10.100,3260] (multiple)
Logging in to [iface: default, target: iqn.2023-01.com.openfiler:rac_disks, portal: 192.168.10.100,3260] (multiple)
Login to [iface: default, target: iqn.2023-01.com.openfiler:rac_disks, portal: 10.10.10.100,3260] successful.
Login to [iface: default, target: iqn.2023-01.com.openfiler:rac_disks, portal: 192.168.10.100,3260] successful.
###补充操作:
单独挂载某一个节点:
iscsiadm -m node -T iqn.2023-01.com.openfiler:rac_disks -p 10.10.10.100:3260 -l
单独卸载某一个节点:
iscsiadm -m node -T iqn.2023-01.com.openfiler:rac_disks -p 10.10.10.100:3260 -u
注销所有节点:
iscsiadm -m node --logoutall=all
删除节点:(必须先做卸载或注销节点的操作,才能执行删除)
###注:执行卸载和注销操作,重启后还是会自动挂载,确认不想挂载共享存储的话要执行删除target操作。
(1)删除所有节点
iscsiadm -m node -o delete
(2)单独删除某一个节点
iscsiadm -m node -o delete -T iqn.2023-01.com.openfiler:rac_disks -p 10.10.10.100:3260
iscsiadm -m node -o delete -T iqn.2023-01.com.openfiler:rac_disks -p 192.168.10.100:3260
查看所有iscsi连接:
iscsiadm -m session
刷新资源:
如果一个Target下新增了一个SAN资源,在服务器可以使用iscsiadm -m session -R命令刷新(rescan)已连接的iSCSI session以识别新的SAN资源:
iscsiadm -m session -R
1.4 将相关服务设置为开机自启
chkconfig iscsi on
chkconfig iscsid on
###补充:如果是CENTOS 7:
systemctl restart iscsi
systemctl restart iscsid
systemctl enable iscsi
systemctl enable iscsid
1.5 查看共享磁盘
fdisk -l
###注:我在openfiler中配置的是一块10G、一块80G的磁盘,在操作系统中,各自被识别为sdb、sdc和sdd、sde两个设备名
Disk /dev/sdb: 10.2 GB, 10234101760 bytes
64 heads, 32 sectors/track, 9760 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdc: 10.2 GB, 10234101760 bytes
64 heads, 32 sectors/track, 9760 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdd: 81.9 GB, 81906368512 bytes
255 heads, 63 sectors/track, 9957 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x563a20aa
Device Boot Start End Blocks Id System
Disk /dev/sde: 81.9 GB, 81906368512 bytes
255 heads, 63 sectors/track, 9957 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x563a20aa
1.6 创建相关的用户和组,并配置环境变量
groupadd -g 1100 oinstall
groupadd -g 1200 dba
groupadd -g 1300 oper
groupadd -g 2100 asmadmin
groupadd -g 2200 asmdba
groupadd -g 2300 asmoper
useradd -u 777 -g oinstall -G dba,oper,asmadmin,asmdba -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
echo "oracle" | passwd --stdin oracle
useradd -u 888 -g oinstall -G dba,asmadmin,asmdba,asmoper -d /home/grid -s /bin/bash -c "grid Infrastructure Owner" grid
echo "grid" | passwd --stdin grid
[root@racdb1 ~]# vim /home/oracle/.bash_profile
export PATH
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=node1.cty.com(node2上改为node2.cty.com)
export ORACLE_SID=racdb1(node2上改为 racdb2)
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_UNQNAME=racdb(node1&node2一定要保持一致)
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORACLE_TERM=xterm
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export EDITOR=vi
export LANG=en_US
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'
umask 022
[root@racdb1 ~]# vim /home/grid/.bash_profile
export PATH
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=+ASM1(node2上改为 +ASM2)
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export ORACLE_TERM=xterm
export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export EDITOR=vi
export LANG=en_US
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
umask 022
1.7 创建所需目录并配置权限
mkdir -pv /u01/app/grid
mkdir -pv /u01/app/11.2.0/grid
mkdir -pv /u01/app/oracle
chown -R oracle:oinstall /u01
chown -R grid:oinstall /u01/app/grid
chown -R grid:oinstall /u01/app/11.2.0
chmod -R 775 /u01
2.配置multipath实现多路径聚合
2.1 装包
yum -y install device-mapper device-mapper-multipath
2.2 将多路径软件加载至内核模块并查看
modprobe dm-multipath
modprobe dm-round-robin
lsmod | grep multipath
2.3 初始化,会生成/etc/multipath.conf配置文件
mpathconf --enable --find_multipaths y --with_module y --with_chkconfig y
###补充:如果是CENTOS 7,不能使用--with_chkconfig选项,否则执行不成功:
mpathconf --enable --find_multipaths y --with_module y
2.4 查看/etc/multipath.conf配置文件(仅展示未注释部分)
defaults {
find_multipaths yes
user_friendly_names yes
}
blacklist {
}
2.5 开启multipathd服务
service multipathd restart
###补充:如果是CENTOS 7
systemctl restart multipathd
2.6 将multipathd服务设置为开机自启
chkconfig multipathd on
###补充:如果是CENTOS 7
systemctl enable multipathd
2.7 查看多路径状态
multipath -ll
###注:可见共2块磁盘,聚合后的名称分别为mpatha和mpathb,括号内的一长串是wwid。
这里要分清楚wwid对应的是哪块磁盘,可以借助sd*的设备名去判断
mpathb (14f504e46494c45527344764641762d785247792d71343658) dm-3 OPNFILER,VIRTUAL-DISK
size=76G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 3:0:0:1 sde 8:64 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 2:0:0:1 sdd 8:48 active ready running
mpatha (14f504e46494c45526a47654377652d76706c532d43315072) dm-2 OPNFILER,VIRTUAL-DISK
size=9.5G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 2:0:0:0 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 3:0:0:0 sdc 8:32 active ready running
2.8 修改配置文件/etc/multipath.conf
参考文档2:http://t.zoukankan.com/seaBiscuit0922-p-10393839.html
###注1:wwid参考上一步括号里的输出:14f504e46494c45526a47654377652d76706c532d43315072和14f504e46494c45527344764641762d785247792d71343658
###注2:由于在defaults部分使用了参数find_multipaths yes,所以无需配置blacklist部分。
在配置文件中,新增multipaths部分,修改defaults部分,最终效果如下:
defaults {
find_multipaths yes
user_friendly_names yes
path_checker tur
}
multipaths {
multipath {
wwid 14f504e46494c45526a47654377652d76706c532d43315072
alias rac_ovdata01
path_grouping_policy multibus
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry 5
}
multipath {
wwid 14f504e46494c45527344764641762d785247792d71343658
alias rac_data01
path_grouping_policy multibus
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry 5
}
}
2.9 重启multipathd服务
service multipathd restart
###补充:如果是CENTOS 7
systemctl restart multipathd
2.10 重新扫描多路径设备:
###注:修改参数后执行该命令很有必要,如果配置文件有问题,会直接提示。
multipath -v0
2.11 查看多路径状态
multipath -ll
###注:可见共2块磁盘,聚合后的名称分别是rac_ovdata01和rac_data01
rac_data01 (14f504e46494c45527344764641762d785247792d71343658) dm-3 OPNFILER,VIRTUAL-DISK
size=76G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
|- 3:0:0:1 sde 8:64 active ready running
`- 2:0:0:1 sdd 8:48 active ready running
rac_ovdata01 (14f504e46494c45526a47654377652d76706c532d43315072) dm-2 OPNFILER,VIRTUAL-DISK
size=9.5G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
|- 2:0:0:0 sdb 8:16 active ready running
`- 3:0:0:0 sdc 8:32 active ready running
2.12 查看相关文件
(1)/dev/mapper/目录下可以看到multipath虚拟出来的多路径设备
(2)/etc/multipath/bindings文件中记录了设备别名和wwid的映射关系,其别名设置会被/etc/multipath.conf配置文件中的 multipaths 部分指定的alias设备别名覆盖。注意要保证所有节点上的这个文件中,设备别名和wwid的映射关系要一致(本地磁盘除外,只看共享磁盘的),如果不一致,可以手动修改(不要直接把其他节点的配置文件复制过来,因为其中可能会包含该节点的本地磁盘wwid),但是需要重启操作系统才生效,只重启multipathd服务不生效。
(3)/etc/multipath/wwids文件中记录了multipath用到的wwid,测试时发现该文件内记录了共享存储的磁盘对应的wwid,本地的/dev/sda盘对应的wwid不在其中。
3 配置UDEV,修改磁盘权限
3.1 编辑配置文件12-dm-permissions.rules
在/usr/share/doc/device-mapper-version(我的操作系统是CENTOS 6.8,实际路径是/usr/share/doc/device-mapper-1.02.117)中有一个模板文件,名为12-dm-permissions.rules,将其拷贝到 /etc/udev/rules.d 目录中使其生效。
cd /usr/share/doc/device-mapper-1.02.117
cp 12-dm-permissions.rules /etc/udev/rules.d/
cd /etc/udev/rules.d/
vim 12-dm-permissions.rules
在文件结尾处加入一行:
#注:前提:已经创建了grid用户和asmadmin组
ENV{DM_NAME}=="rac_*", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
3.2 不重启,重新应用udev规则
udevadm control --reload-rules
udevadm trigger --type=devices --action=change
###注意:业务运行期间,禁止通过执行start_udev使规则生效!
解决方案:RAC环境里,所有网卡配置文件里增加:HOTPLUG=no即可,如果做了bond,要修改bond网卡配置文件。
CENTOS 7里已经没有start_udev这个命令了,但还是建议网卡配置文件加上HOTPLUG=no参数。
参考文档:
https://blog.csdn.net/yqfntx/article/details/104653151
https://blog.csdn.net/lijingkuan/article/details/68957259
3.3 配置完成后重启multipathd服务
service multipathd restart
###补充:如果是CENTOS 7
systemctl restart multipathd
3.4 查看磁盘权限
ll /dev/dm-*
brw-rw---- 1 root disk 253, 0 Jan 10 10:28 /dev/dm-0
brw-rw---- 1 root disk 253, 1 Jan 10 10:28 /dev/dm-1
brw-rw---- 1 grid asmadmin 253, 2 Jan 10 10:28 /dev/dm-2
brw-rw---- 1 grid asmadmin 253, 3 Jan 10 10:28 /dev/dm-3
ll /dev/mapper/rac_*
lrwxrwxrwx 1 root root 7 Jan 10 10:28 /dev/mapper/rac_data01 -> ../dm-3
lrwxrwxrwx 1 root root 7 Jan 10 10:28 /dev/mapper/rac_ovdata01 -> ../dm-2
3.5 对共享磁盘进行分区并查看
###注1:只在节点1操作即可
###注2:分区一律使用在multipath中设置的自定义设备名进行操作,如fdisk /dev/mapper/rac_data01
###注3:分区后建议重启一下操作系统,重启后再次确认相关磁盘名称正常。
(1)第一种分区方式:挂载多块磁盘,各司其职,不创建分区(首选这种方式)
这里我用最简单的一种分配方式举例:挂载一块10G的磁盘为OCR+VOTE DISK使用,再挂载一块磁盘存放数据,然后都各自创建单独的ASM磁盘组。
[root@racdb1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 79.5G 0 part
├─vg_racdb1-lv_root (dm-0) 253:0 0 75.6G 0 lvm /
└─vg_racdb1-lv_swap (dm-1) 253:1 0 4G 0 lvm [SWAP]
sr0 11:0 1 3.7G 0 rom /mnt/cdrom
sdb 8:16 0 9.5G 0 disk
└─rac_ovdata01 (dm-2) 253:2 0 9.5G 0 mpath
sdc 8:32 0 9.5G 0 disk
└─rac_ovdata01 (dm-2) 253:2 0 9.5G 0 mpath
sde 8:64 0 76.3G 0 disk
└─rac_data01 (dm-3) 253:3 0 76.3G 0 mpath
sdd 8:48 0 76.3G 0 disk
└─rac_data01 (dm-3) 253:3 0 76.3G 0 mpath
###注:这种方式最大的优点是,创建ASM磁盘组时,只能看到磁盘本身对应的rac_xxx这一个名称,绝对不会选择错误
(2)第二种分区方式:将磁盘分为两个主分区
###注1:这种分区方式的限制是最多只能分4个区,如果对一块磁盘的分区不超过4个,推荐这种分区方式。
###注2:这里我只将rac_data01这块磁盘进行分区作为示例
[root@racdb1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 79.5G 0 part
├─vg_racdb1-lv_root (dm-0) 253:0 0 75.6G 0 lvm /
└─vg_racdb1-lv_swap (dm-1) 253:1 0 4G 0 lvm [SWAP]
sr0 11:0 1 3.7G 0 rom /mnt/cdrom
sdb 8:16 0 9.5G 0 disk
└─rac_ovdata01 (dm-2) 253:2 0 9.5G 0 mpath
sdc 8:32 0 9.5G 0 disk
└─rac_ovdata01 (dm-2) 253:2 0 9.5G 0 mpath
sde 8:64 0 76.3G 0 disk
└─rac_data01 (dm-3) 253:3 0 76.3G 0 mpath
├─rac_data01p1 (dm-4) 253:4 0 10G 0 part
└─rac_data01p2 (dm-5) 253:5 0 10G 0 part
sdd 8:48 0 76.3G 0 disk
└─rac_data01 (dm-3) 253:3 0 76.3G 0 mpath
├─rac_data01p1 (dm-4) 253:4 0 10G 0 part
└─rac_data01p2 (dm-5) 253:5 0 10G 0 part
###注:磁盘本身对应的名称是rac_data01,新建的两个主分区分别对应的是rac_data01p1和rac_data01p2,创建ASM磁盘组时,会同时看到这三个磁盘名称,此时只能选择rac_data01p1或者rac_data01p1进行创建,千万不能选择rac_data01,这个操作相当于把整块磁盘都格式化了。
(3)第三种分区方式:将/dev/mapper/rac_disk磁盘整体先创建为一个扩展分区,然后在扩展分区中创建两个逻辑分区
###注1:如果要对一块磁盘的分区超过4个,推荐这种分区方式。
###注2:这里我只将rac_data01这块磁盘进行分区作为示例
[root@racdb1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 79.5G 0 part
├─vg_racdb1-lv_root (dm-0) 253:0 0 75.6G 0 lvm /
└─vg_racdb1-lv_swap (dm-1) 253:1 0 4G 0 lvm [SWAP]
sr0 11:0 1 3.7G 0 rom /mnt/cdrom
sdb 8:16 0 9.5G 0 disk
└─rac_ovdata01 (dm-2) 253:2 0 9.5G 0 mpath
sdc 8:32 0 9.5G 0 disk
└─rac_ovdata01 (dm-2) 253:2 0 9.5G 0 mpath
sde 8:64 0 76.3G 0 disk
└─rac_data01 (dm-3) 253:3 0 76.3G 0 mpath
├─rac_data01p1 (dm-4) 253:4 0 76.3G 0 part
├─rac_data01p5 (dm-5) 253:5 0 10G 0 part
└─rac_data01p6 (dm-6) 253:6 0 66.3G 0 part
sdd 8:48 0 76.3G 0 disk
└─rac_data01 (dm-3) 253:3 0 76.3G 0 mpath
├─rac_data01p1 (dm-4) 253:4 0 76.3G 0 part
├─rac_data01p5 (dm-5) 253:5 0 10G 0 part
└─rac_data01p6 (dm-6) 253:6 0 66.3G 0 part
###注:磁盘本身对应的名称是rac_data01,扩展分区对应的是rac_data01p1,两个逻辑分区分别对应的是rac_data01p5和rac_data01p6,创建ASM磁盘组时,会同时看到这四个磁盘名称,此时只能选择rac_data01p5或者rac_data01p6进行创建,千万不能选择rac_data01和rac_data01p1,这个操作相当于把整块磁盘都格式化了。
###补充:如果对磁盘进行了分区操作,建议重启一下操作系统,重启后再次确认相关磁盘名称正常。
###到此步为止,确保所有RAC节点的操作一致、共享磁盘的显示结果一致。
4 创建ASM磁盘组相关的操作
4.1 安装GI软件的前置步骤
(所有节点都要操作,过程略)
4.2 创建ASM磁盘组的相关细节
###注:所有步骤只在节点1操作
(1)到了Create ASM Disk Group这一步,也就是配置表决磁盘时,先将Disk Group Name改为OVDATA,Redundancy选择External,然后点击"Change Discovery Path",输入"/dev/mapper/*",点击OK,这样就看到我们需要的磁盘了,选择对应的磁盘/dev/mapper/rac_ovdata01,点击下一步开始安装就可以了。
(2)GI安装结束后,使用asmca创建DATA磁盘组,用于存放数据库其他文件,选择对应的磁盘/dev/mapper/rac_data01
(3)安装database软件后,建库时的Storege Type要选择"Automatic Storage Management(ASM)",然后选择"Use Oracle-Managed Files",再点击"Browse",
选中之前创建好的"DATA"磁盘组,点OK,然后下一步配置FRA和归档路径时也直接指定为"+DATA"(注意,有+号)即可,相关路径会自动创建。
归档日志的路径会自动创建为:+DATA/RACDB/ARCHIVELOG/日期/
闪回恢复区FRA的路径会自动创建为:+DATA/RACDB/FLASHBACK/
(4)补充说明1:由于共享磁盘使用的是存储,没有必要在创建ASM磁盘组时再配置冗余了,浪费空间,OVDATA磁盘组10G足够用,实际占用也就是几百兆。
(5)补充说明2:关于创建多少个ASM磁盘组的问题,网上的文档怎么配置的都有,我个人建议是只创建两个即可,一个OVDATA存放ocr+vote disk,一个DATA存放所有数据库相关的文件。可以理解那些创建较多磁盘组的人考虑的是磁盘IO争用的问题,比如单独为FRA、归档日志、online redolog创建了磁盘组;但我认为创建过多的磁盘组会造成空间的浪费,也可能造成维护成本的增加,比如我曾经接受的一套数据库是单独给归档日志创建了一个100G的磁盘组,然后突然有一天数据库的业务量暴增,导致对应的磁盘组满了,影响了一阵数据库的访问,这100G给的就很尴尬,正常的情况下归档只有不到50G,突然业务量爆涨就会导致不够用,只能再对这个磁盘组单独扩容,而扩容后,多数情况下这部分空间还是浪费的,为FRA单独创建一个磁盘组也是同理,所以我感觉还不如直接都放到一个足够大的DATA磁盘组中,至少可以保证不存在空间浪费的问题,维护也只需要盯着这一个DATA磁盘组就可以了,毕竟不是每家公司的存储都那么有富余,这是个很现实的问题。
5.补充:/etc/multipath.conf配置文件相关参数解释
###注:配置文件中的几个部分是存在优先级的:优先级:multipaths > devices > defaults。所以我在写配置文件时,倾向于把参数都优先写在multipaths部分,然后再把multipaths部分中不支持的参数写到defaults区域。至于devices区域,暂时没有发现配置的必要性,后续如果有新发现会再来补充。
5.1 配置在defaults部分中的参数:
(1)find_multipaths(重要):默认值no,这将为每个没有明确放入黑名单的路径创建 multipath 设备。
在旧版Red Hat Linux 中,multipath 总是尝试为每个没有明确放入黑名单的路径创建 multipath 设备。但在红帽企业版 Linux 6 中,如果将 find_multipaths 配置参数设定为 yes,那么 multipath 将只在满足以下三个条件之一时创建设备:
① 至少有两个没有列入黑名单的路径使用同一 WWID。
② 用户使用 multipath 命令指定设备强制手动生成该设备。
③ 路径拥有与之前创建的多路径设备相同的 WWID(即使该多路径设备目前不存在)。
###重点:这个功能可让大多数用户自动选择正确的路径创建 multipath 设备,而无需编辑黑名单blacklist。
(2)user_friendly_names:默认值为 no。如果将其设为 yes,则使用文件 /etc/multipath/bindings 中的设置为该多路径分配一个别名,格式为 mpathn。如果设为 no,则使用 WWID 作为该多路径的别名。注意这两种情况的设置都会被/etc/multipath.conf配置文件中的 multipaths 部分指定的alias设备别名覆盖。
(3)path_checker:默认值为 directio。指定用于决定路径状态的默认方法,可能的值包括:
###补充:实测path_checker这个参数配置在multipaths部分会报错,所以我配置在defaults部分。
① directio:使用直接 I/O 读取第一个扇区。
② readsector0:读取该设备的第一扇区。已废弃,用"directio"替代。
③ tur:在该设备中执行 TEST UNIT READY。
④ emc_clariion:查询 EMC Clariion 具体 EVPD 页面 0xCO 以便决定路径。
⑤ hp_sw:为使用 Active/Standby 固件的 HP 存储阵列检查路径状态。
⑥ rdac:为 LSI/Engenio RDAC 存储控制器检查路径状态。
5.2 配置在multipaths部分的参数:
(1)path_grouping_policy:路径分组策略,可能的值包括:
① failover = 每个优先组群有一个路径
② multibus = 所有有效路径在一个优先组群中(负载均衡)
③ group_by_serial = 每个检测到的系列号有一个优先组群
④ group_by_prio = 每个路径优先值有一个优先组群
⑤ group_by_node_name = 每个目标节点名有一个优先组群
(2)path_selector:指定用来决定下一个 I/O 操作所使用路径的默认算法,可能的值包括:
① round-robin 0:在路径组中循环每个路径,向每个路径发送同样数量的 I/O。
② queue-length 0:将下一组 I/O 发送到具有最少未处理 I/O 请求的路径。
③ service-time 0:将下一组 I/O 发送到具有最短预计服务时间的路径,这是由未处理 I/O 的总量除以每个路径的相对流量决定的。
(3)failback:管理路径组出错切换的方法,其中,"immediate"表示立即恢复到包含活动路径的高优先级路径组;"manual"表示手动恢复(默认值);
① immediate 值指定立即恢复到包含活跃路径的最高级别路径组群。
② manual 值指定不需要立即恢复,只有在操作者干预的情况下会发生恢复。
③ followover 值指定当路径组的第一个路径成为活跃路径时应执行自动恢复。这可让节点在另一个节点请求故障修复时不会自动恢复。
④ 大于 0 的数字表示出错切换的延迟时间,以秒为单位。
(4)rr_weight:如果将其设为 priorities,就不会在调用 selector 选择下一个路径前向路径发送 rr_min_io 请求,而是由 rr_min_io 乘以路径优先权决定发送的请求数,即由 prio 功能决定。如果将其设定为 uniform,则所有路径都有相同的加权。
(5)no_path_retry:指定系统在禁用队列前,尝试使用失败路径的次数。
① 数字表示次数。
② fail 值说明立即失败,无需排队。
③ queue 值表示固定路径前排队不会停止。
############################################################################################################
三.只配置UDEV时的操作
###注:所有RAC节点都要做相同的配置
1.Linux服务器挂载iSCSI磁盘
1.1 安装iscsi相关的包
yum install iscsi-initiator-utils -y
1.2 查看存储共享的ISCSI磁盘
###注:执行iscsiadm命令时会自动开启iscsi相关服务。
iscsiadm --mode discovery --type sendtargets --portal 10.10.10.100
输出结果如下:
10.10.10.100:3260,1 iqn.2023-01.com.openfiler:rac_disks
192.168.10.100:3260,1 iqn.2023-01.com.openfiler:rac_disks
1.3 挂载ISCSI磁盘
iscsiadm --mode discovery --type sendtargets --portal 10.10.10.100 --login
输出结果如下:
10.10.10.100:3260,1 iqn.2023-01.com.openfiler:rac_disks
192.168.10.100:3260,1 iqn.2023-01.com.openfiler:rac_disks
Logging in to [iface: default, target: iqn.2023-01.com.openfiler:rac_disks, portal: 10.10.10.100,3260] (multiple)
Logging in to [iface: default, target: iqn.2023-01.com.openfiler:rac_disks, portal: 192.168.10.100,3260] (multiple)
Login to [iface: default, target: iqn.2023-01.com.openfiler:rac_disks, portal: 10.10.10.100,3260] successful.
Login to [iface: default, target: iqn.2023-01.com.openfiler:rac_disks, portal: 192.168.10.100,3260] successful.
###补充操作:
单独挂载某一个节点:
iscsiadm -m node -T iqn.2023-01.com.openfiler:rac_disks -p 10.10.10.100:3260 -l
单独卸载某一个节点:
iscsiadm -m node -T iqn.2023-01.com.openfiler:rac_disks -p 10.10.10.100:3260 -u
注销所有节点:
iscsiadm -m node --logoutall=all
删除节点:(必须先做卸载或注销节点的操作,才能执行删除)
###注:执行卸载和注销操作,重启后还是会自动挂载,确认不想挂载共享存储的话要执行删除target操作。
(1)删除所有节点
iscsiadm -m node -o delete
(2)单独删除某一个节点
iscsiadm -m node -o delete -T iqn.2023-01.com.openfiler:rac_disks -p 10.10.10.100:3260
iscsiadm -m node -o delete -T iqn.2023-01.com.openfiler:rac_disks -p 192.168.10.100:3260
查看所有iscsi连接:
iscsiadm -m session
刷新资源:
如果一个Target下新增了一个SAN资源,在服务器可以使用iscsiadm -m session -R命令刷新(rescan)已连接的iSCSI session以识别新的SAN资源:
iscsiadm -m session -R
1.4 将相关服务设置为开机自启
chkconfig iscsi on
chkconfig iscsid on
###补充:如果是CENTOS 7:
systemctl restart iscsi
systemctl restart iscsid
systemctl enable iscsi
systemctl enable iscsid
1.5 查看共享磁盘
fdisk -l
###注:我在openfiler中配置的是一块10G、一块80G的磁盘,在操作系统中,各自被识别为sdb、sdc和sdd、sde两个设备名
Disk /dev/sdb: 10.2 GB, 10234101760 bytes
64 heads, 32 sectors/track, 9760 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdc: 10.2 GB, 10234101760 bytes
64 heads, 32 sectors/track, 9760 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdd: 81.9 GB, 81906368512 bytes
255 heads, 63 sectors/track, 9957 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x563a20aa
Device Boot Start End Blocks Id System
Disk /dev/sde: 81.9 GB, 81906368512 bytes
255 heads, 63 sectors/track, 9957 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x563a20aa
1.6 创建相关的用户和组,并配置环境变量
groupadd -g 1100 oinstall
groupadd -g 1200 dba
groupadd -g 1300 oper
groupadd -g 2100 asmadmin
groupadd -g 2200 asmdba
groupadd -g 2300 asmoper
useradd -u 777 -g oinstall -G dba,oper,asmadmin,asmdba -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
echo "oracle" | passwd --stdin oracle
useradd -u 888 -g oinstall -G dba,asmadmin,asmdba,asmoper -d /home/grid -s /bin/bash -c "grid Infrastructure Owner" grid
echo "grid" | passwd --stdin grid
[root@racdb1 ~]# vim /home/oracle/.bash_profile
export PATH
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=node1.cty.com(node2上改为node2.cty.com)
export ORACLE_SID=racdb1(node2上改为 racdb2)
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_UNQNAME=racdb(node1&node2一定要保持一致)
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORACLE_TERM=xterm
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export EDITOR=vi
export LANG=en_US
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'
umask 022
[root@racdb1 ~]# vim /home/grid/.bash_profile
export PATH
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=+ASM1(node2上改为 +ASM2)
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export ORACLE_TERM=xterm
export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export EDITOR=vi
export LANG=en_US
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
umask 022
1.7 创建所需目录并配置权限
mkdir -pv /u01/app/grid
mkdir -pv /u01/app/11.2.0/grid
mkdir -pv /u01/app/oracle
chown -R oracle:oinstall /u01
chown -R grid:oinstall /u01/app/grid
chown -R grid:oinstall /u01/app/11.2.0
chmod -R 775 /u01
2.配置UDEV
###注:所有RAC节点都要做相同的配置
2.1 计算磁盘的wwid
###注:可以看出,sdb和sdc的wwid相同,sdd和sde的wwid相同。
[root@racdb1 ~]# /sbin/scsi_id -g -u -d /dev/sdb
14f504e46494c45526a47654377652d76706c532d43315072
[root@racdb1 ~]# /sbin/scsi_id -g -u -d /dev/sdc
14f504e46494c45526a47654377652d76706c532d43315072
[root@racdb1 ~]# /sbin/scsi_id -g -u -d /dev/sdd
14f504e46494c45527344764641762d785247792d71343658
[root@racdb1 ~]# /sbin/scsi_id -g -u -d /dev/sde
14f504e46494c45527344764641762d785247792d71343658
###补充1:如果是CENTOS 7:
[root@racdb1 ~]# /usr/lib/udev/scsi_id -g -u -d /dev/sdb
14f504e46494c45526a47654377652d76706c532d43315072
[root@racdb1 ~]# /usr/lib/udev/scsi_id -g -u -d /dev/sdc
14f504e46494c45526a47654377652d76706c532d43315072
[root@racdb1 ~]# /usr/lib/udev/scsi_id -g -u -d /dev/sdd
14f504e46494c45527344764641762d785247792d71343658
[root@racdb1 ~]# /usr/lib/udev/scsi_id -g -u -d /dev/sde
14f504e46494c45527344764641762d785247792d71343658
###补充2:也可以用udevadm info --query=all --name=/dev/sdb | grep ID_SERIAL= 命令来查看磁盘对应的 ID_SERIAL,我在测试环境查看的结果是与wwid相同。
2.2 新建UDEV规则文件99-oracle-asmdevices.rules,添加内容如下
###注:操作系统版本不同,udev规则的写法也会有差别,本方法在CENTOS 6.8和CENTOS 7.9系统下测试完美无错,理论上可以兼容CENTOS 6和7的所有版本系统;
网上找的很多写法都有问题,问题体现在如果对磁盘进行分区,在/dev目录下的sd*[数字]的磁盘权限不能被正确设置,自定义的设备名rac_*也不能正常显示。
cd /etc/udev/rules.d/
vim 99-oracle-asmdevices.rules
KERNEL=="sd*", ENV{ID_SERIAL}=="14f504e46494c45526a47654377652d76706c532d43315072",SYMLINK+="rac_ovdata01%n", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{ID_SERIAL}=="14f504e46494c45527344764641762d785247792d71343658",SYMLINK+="rac_data01%n", OWNER="grid", GROUP="asmadmin", MODE="0660"
###注:相关参数的补充说明
(1)如果是CENTOS 6系统,可以在KERNEL=="sd*"后面加上BUS=="scsi",但是CENTOS 7系统不能加BUS=="scsi",会导致绑定规则不生效。
(2)CENTOS 6和CENTOS 7系统,都可以在KERNEL=="sd*"后面加上SUBSYSTEM=="block",出于最简化配置的原则,我没加,经测试未发现问题。
2.3 补充:UDEV规则的另一种写法(不推荐这种写法,因为相比之下更复杂,仅作为留档参考)
###注1:网上很多用PROGRAM+RESULT的写法都是半成品,问题体现在如果对磁盘进行分区,在/dev目录下的sd*[数字]的磁盘权限不能被正确设置,自定义的设备名rac_*也不能正常显示。我这里是经过多次分区+重启测试,确认完美无错的写法。
(1)在CENTOS 6系统中的写法:
###注:每一个wwid对应两条记录,一条KERNEL=="sd*[!0-9]"开头的,针对的是未分区的磁盘;一条KERNEL=="sd*[0-9]"开头的,针对的是磁盘的分区。
KERNEL=="sd*[!0-9]", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c45526a47654377652d76706c532d43315072", SYMLINK+="rac_ovdata01", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*[0-9]", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="14f504e46494c45526a47654377652d76706c532d43315072", SYMLINK+="rac_ovdata01%n", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*[!0-9]", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c45527344764641762d785247792d71343658", SYMLINK+="rac_data01", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*[0-9]", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="14f504e46494c45527344764641762d785247792d71343658", SYMLINK+="rac_data01%n", OWNER="grid", GROUP="asmadmin", MODE="0660"
(2)在CENTOS 7系统中的写法:
###注:每一个wwid对应两条记录,一条KERNEL=="sd*[!0-9]"开头的,针对的是未分区的磁盘;一条KERNEL=="sd*[0-9]"开头的,针对的是磁盘的分区。
KERNEL=="sd*[!0-9]", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c45526a47654377652d76706c532d43315072", SYMLINK+="rac_ovdata01", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*[0-9]", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="14f504e46494c45526a47654377652d76706c532d43315072", SYMLINK+="rac_ovdata01%n", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*[!0-9]", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c45527344764641762d785247792d71343658", SYMLINK+="rac_data01", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*[0-9]", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="14f504e46494c45527344764641762d785247792d71343658", SYMLINK+="rac_data01%n", OWNER="grid", GROUP="asmadmin", MODE="0660"
###注:相关参数的补充说明
(1)每一个wwid对应两条记录,一条KERNEL=="sd*[!0-9]"开头的,针对的是未分区的磁盘;一条KERNEL=="sd*[0-9]"开头的,针对的是磁盘的分区。
(2)未分区的磁盘,--device后面跟的是/dev/$name;磁盘的分区,--device后面跟的是/dev/$parent
(3)未分区的磁盘,SYMLINK后面跟的是你自定义的设备名;磁盘的分区,SYMLINK后面跟的是你自定义的设备名加上%n
(4)CENTOS 6系统中,BUS=="scsi"可以换成SUBSYSTEM=="block",但是CENTOS 7系统中不能用BUS=="scsi"
(5)CENTOS 6和CENTOS 7系统中,KERNEL后面的BUS=="scsi"和SUBSYSTEM=="block"是可以省略的,不影响绑定效果。
(6)CENTOS 6系统中,PROGRAM对应的路径是/sbin/scsi_id;而CENTOS 7系统中,PROGRAM对应的路径是/usr/lib/udev/scsi_id
2.4 不重启,重新应用udev规则
udevadm control --reload-rules
udevadm trigger --type=devices --action=change
###注意:业务运行期间,禁止通过执行start_udev使规则生效!
解决方案:RAC环境里,所有网卡配置文件里增加:HOTPLUG=no即可,如果做了bond,要修改bond网卡配置文件。
CENTOS 7里已经没有start_udev这个命令了,但还是建议网卡配置文件加上HOTPLUG=no参数。
参考文档:
https://blog.csdn.net/yqfntx/article/details/104653151
https://blog.csdn.net/lijingkuan/article/details/68957259
2.5 查看磁盘权限
[root@racdb1 ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Jan 10 17:14 /dev/sda
brw-rw---- 1 root disk 8, 1 Jan 10 17:14 /dev/sda1
brw-rw---- 1 root disk 8, 2 Jan 10 17:14 /dev/sda2
brw-rw---- 1 grid asmadmin 8, 16 Jan 10 17:15 /dev/sdb
brw-rw---- 1 grid asmadmin 8, 32 Jan 10 17:15 /dev/sdc
brw-rw---- 1 grid asmadmin 8, 48 Jan 10 17:17 /dev/sdd
brw-rw---- 1 grid asmadmin 8, 64 Jan 10 17:15 /dev/sde
[root@racdb1 ~]# ll /dev/rac_*
lrwxrwxrwx 1 root root 3 Jan 10 17:15 /dev/rac_data01 -> sdd
lrwxrwxrwx 1 root root 3 Jan 10 17:15 /dev/rac_ovdata01 -> sdb
2.6 对共享磁盘进行分区并查看
###注1:只在节点1操作即可
###注2:分区一律使用在UDEV中设置的自定义设备名进行操作,如fdisk /dev/rac_data01
###注3:分区后建议重启一下操作系统,重启后再次确认相关磁盘名称正常。
(1)第一种分区方式:挂载多块磁盘,各司其职,不创建分区(首选这种方式)
这里我用最简单的一种分配方式举例:挂载一块10G的磁盘为OCR+VOTE DISK使用,再挂载一块磁盘存放数据,然后都各自创建单独的ASM磁盘组。
[root@racdb1 ~]# ll /dev/rac_*
lrwxrwxrwx 1 root root 3 Jan 10 17:15 /dev/rac_data01 -> sdd
lrwxrwxrwx 1 root root 3 Jan 10 17:15 /dev/rac_ovdata01 -> sdb
###注:这种方式最大的优点是,创建ASM磁盘组时,只能看到磁盘本身对应的rac_xxx这一个名称,绝对不会选择错误
(2)第二种分区方式:将磁盘分为两个主分区
###注1:这种分区方式的限制是最多只能分4个区,如果对一块磁盘的分区不超过4个,推荐这种分区方式。
###注2:这里我只将rac_data01这块磁盘进行分区作为示例
[root@racdb1 ~]# ll /dev/rac_*
lrwxrwxrwx 1 root root 3 Jan 10 17:17 /dev/rac_data01 -> sdd
lrwxrwxrwx 1 root root 4 Jan 10 17:17 /dev/rac_data011 -> sdd1
lrwxrwxrwx 1 root root 4 Jan 10 17:17 /dev/rac_data012 -> sdd2
lrwxrwxrwx 1 root root 3 Jan 10 17:15 /dev/rac_ovdata01 -> sdb
###注:磁盘本身对应的名称是rac_data01,新建的两个主分区分别对应的是rac_data011和rac_data012,创建ASM磁盘组时,会同时看到这三个磁盘名称,此时只能选择rac_data011或者rac_data012进行创建,千万不能选择rac_data01,这个操作相当于把整块磁盘都格式化了。
(3)第三种分区方式:将/dev/mapper/rac_disk磁盘整体先创建为一个扩展分区,然后在扩展分区中创建两个逻辑分区
###注1:如果要对一块磁盘的分区超过4个,推荐这种分区方式。
###注2:这里我只将rac_data01这块磁盘进行分区作为示例
[root@racdb1 ~]# ll /dev/rac_*
lrwxrwxrwx 1 root root 3 Jan 10 17:45 /dev/rac_data01 -> sdd
lrwxrwxrwx 1 root root 4 Jan 10 17:45 /dev/rac_data011 -> sdd1
lrwxrwxrwx 1 root root 4 Jan 10 17:45 /dev/rac_data015 -> sdd5
lrwxrwxrwx 1 root root 4 Jan 10 17:45 /dev/rac_data016 -> sdd6
lrwxrwxrwx 1 root root 3 Jan 10 17:15 /dev/rac_ovdata01 -> sdb
###注:磁盘本身对应的名称是rac_data01,扩展分区对应的是rac_data011,两个逻辑分区分别对应的是rac_data015和rac_data016,创建ASM磁盘组时,会同时看到这四个磁盘名称,此时只能选择rac_data015或者rac_data016进行创建,千万不能选择rac_data01和rac_data011,这个操作相当于把整块磁盘都格式化了。
###补充:如果对磁盘进行了分区操作,建议重启一下操作系统,重启后再次确认相关磁盘名称正常。
###到此步为止,确保所有RAC节点的操作一致、共享磁盘的显示结果一致。
3 创建ASM磁盘组相关的操作
3.1 安装GI软件的前置步骤
(所有节点都要操作,过程略)
3.2 创建ASM磁盘组的相关细节
###注:所有步骤只在节点1操作
(1)到了Create ASM Disk Group这一步,也就是配置表决磁盘时,先将Disk Group Name改为OVDATA,Redundancy选择External,然后点击"Change Discovery Path",输入"/dev/*",点击OK,这样就看到我们需要的磁盘了,选择对应的磁盘/dev/rac_ovdata01,点击下一步开始安装就可以了。
(2)GI安装结束后,使用asmca创建DATA磁盘组,用于存放数据库其他文件,选择对应的磁盘/dev/rac_data01
(3)安装database软件后,建库时的Storege Type要选择"Automatic Storage Management(ASM)",然后选择"Use Oracle-Managed Files",再点击"Browse",
选中之前创建好的"DATA"磁盘组,点OK,然后下一步配置FRA和归档路径时也直接指定为"+DATA"(注意,有+号)即可,相关路径会自动创建。
归档日志的路径会自动创建为:+DATA/RACDB/ARCHIVELOG/日期/
闪回恢复区FRA的路径会自动创建为:+DATA/RACDB/FLASHBACK/
(4)补充说明1:由于共享磁盘使用的是存储,没有必要在创建ASM磁盘组时再配置冗余了,浪费空间;OVDATA磁盘组10G足够用,实际占用也就是几百兆,DATA磁盘组按照实际数据量给一个足够大的盘就行了。
(5)补充说明2:关于创建多少个ASM磁盘组的问题,网上的文档怎么配置的都有,我个人建议是只创建两个即可,一个OVDATA存放ocr+vote disk,一个DATA存放所有数据库相关的文件。可以理解那些创建较多磁盘组的人考虑的是磁盘IO争用的问题,比如单独为FRA、归档日志、online redolog创建了磁盘组;但我认为创建过多的磁盘组会造成空间的浪费,也可能造成维护成本的增加,比如我曾经接受的一套数据库是单独给归档日志创建了一个100G的磁盘组,然后突然有一天数据库的业务量暴增,导致对应的磁盘组满了,影响了一阵数据库的访问,这100G给的就很尴尬,正常的情况下归档只有不到50G,突然业务量爆涨就会导致不够用,只能再对这个磁盘组单独扩容,而扩容后,多数情况下这部分空间还是浪费的,为FRA单独创建一个磁盘组也是同理,所以我感觉还不如直接都放到一个足够大的DATA磁盘组中,至少可以保证不存在空间浪费的问题,维护也只需要盯着这一个DATA磁盘组就可以了,毕竟不是每家公司的存储都那么有富余,这是个很现实的问题。