我们可以看到,在官方文档中,DSC 共享集群需要提供共享存储,而官方文档中关于裸设备的实现方式过于简单,以下是官方文档的步骤
sdb-sde 是需要配置的共享磁盘。
执行以下命令,新建 udev 规则文件:
Copy
vi /etc/udev/rules.d/90-raw.rules |
ACTION== "add" ,KERNEL== "sdb" ,RUN+= "/bin/raw /dev/raw/raw1 %N"
ACTION== "add" ,KERNEL== "sdc" ,RUN+= "/bin/raw /dev/raw/raw2 %N"
ACTION== "add" ,KERNEL== "sdd" ,RUN+= "/bin/raw /dev/raw/raw3 %N"
ACTION== "add" ,KERNEL== "sde" ,RUN+= "/bin/raw /dev/raw/raw4 %N"
KERNEL== "raw[1-4]" , OWNER= "dmdba" , GROUP= "dinstall" , MODE= "660"
执行以下命令,使 udev 生效:
udevadm trigger -- type =devices --action=change
而dmdcr_cfg.ini配置文件中,需要指定具体的ASM路径,同时也要指定父目录。如下所示。
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/raw/raw2
DCR_OGUID = 63635
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 10.0 . 0.11
DCR_EP_PORT = 9341
[CSS]
DCR_EP_NAME = CSS2
DCR_EP_HOST = 10.0 . 0.12
DCR_EP_PORT = 9341
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 10.0 . 0.11
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev/raw
[ASM]
DCR_EP_NAME = ASM2
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 10.0 . 0.12
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
[DSC]
DCR_EP_NAME = DSC2
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
在生产环境中,共享存储往往经过了 SAN 网络后,通过多路径管理软件聚合后的磁盘。这样一来上面的方式就不太好用了,例如经过 linux 自带的多路径管理软件 multipath
重点参数说明:
DCR_EP_ASM_LOAD_PATH 为ASM 磁盘扫描路径, Linux 下一般为 /dev/raw ,文件模拟情况,必须 是全路径,不能是相对路径 。
DCR_VTD_PATH 为 Voting Disk 路径
了解以上信息后,我们就可以对多路径聚合后的磁盘很方便的管理了。
通常我们把 dcr 和 vote 规划为 200M 以上。此时可以先配置 dcr 和 vote disk 的 UDEV 规则
此处分享几个脚本(适用于通过 multipath 多路径聚合的磁盘,磁盘大小可以根据 fdisk -l 的具体值进行更改)
for i in $(fdisk -l | grep mpath |grep ' 200 MB'| cut -d ' ' -f2 | cut -d' :' -f1 | cut -d'/' -f4); do str1="$i:`udevadm info --query=all --name=/dev/mapper/$i | grep DM_UUID`"; str2=${str1#*=}; echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${str2}\",SYMLINK+=\"asmdisk/asm-${i}\",OWNER=\"dmdba\",GROUP=\"dinstall\",MODE=\"0660\"" >> /etc/udev/rules.d/90-dm.rules; done
再加日志盘,本例中日志盘规划为 21.5G
for i in $(fdisk -l | grep mpath |grep '21.5 GB'| cut -d ' ' -f2 | cut -d' :' -f1 | cut -d'/' -f4); do str1="$i:`udevadm info --query=all --name=/dev/mapper/$i | grep DM_UUID`"; str2=${str1#*=}; echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${str2}\",SYMLINK+=\"asmdisk/asm-${i}\",OWNER=\"dmdba\",GROUP=\"dinstall\",MODE=\"0660\"" >> /etc/udev/rules.d/90-dm.rules; done
再添加数据盘,本例中为数据盘规划为 53.7G
for i in $(fdisk -l | grep mpath |grep '53.7 GB'| cut -d ' ' -f2 | cut -d' :' -f1 | cut -d'/' -f4); do str1="$i:`udevadm info --query=all --name=/dev/mapper/$i | grep DM_UUID`"; str2=${str1#*=}; echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${str2}\",SYMLINK+=\"asmdisk/asm-${i}\",OWNER=\"dmdba\",GROUP=\"dinstall\",MODE=\"0660\"" >> /etc/udev/rules.d/90-dm.rules; done
集群中的每个节点依次添加后,执行以下命令重新加载 ude 规则。
udevadm control --reload-rules
udevadm trigger --type=devices --action=change
验证。
ls -l /dev/asmdisk/
[root@dmdsc2 ~]# ls -l /dev/asmdisk/
总用量 0
lrwxrwxrwx 1 root root 7 10 月 18 13:33 asm-mpatha -> ../dm-3
lrwxrwxrwx 1 root root 7 10 月 18 13:33 asm-mpathb -> ../dm-2
lrwxrwxrwx 1 root root 7 10 月 18 13:33 asm-mpathc -> ../dm-4
lrwxrwxrwx 1 root root 7 10 月 18 13:33 asm-mpathd -> ../dm-5
注意:以上脚本仅仅适用于经过 multipath 聚合,且启用默认友好别名的环境。采用其他自定义的别名,需要根据实际环境调整脚本内容。改完后的 dmdcr_cfg.ini 样例
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/asmdisk/asm-mpathb
DCR_OGUID = 63635
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 10.0 . 0.11
DCR_EP_PORT = 9341
[CSS]
DCR_EP_NAME = CSS2
DCR_EP_HOST = 10.0 . 0.12
DCR_EP_PORT = 9341
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 10.0 . 0.11
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk
[ASM]
DCR_EP_NAME = ASM2
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 10.0 . 0.12
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
[DSC]
DCR_EP_NAME = DSC2
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
在 dmasmcmd 的创建则对应改为
create dcrdisk '/dev/asmdisk/asm-mpatha 'dcr'
create votedisk '/dev/asmdisk/asm-mpathb' 'vote'
create asmdisk '/dev/asmdisk/asm-mpathc' 'LOG0'
create asmdisk '/dev/asmdisk/asm-mpathd' 'DATA0'
dmdcr.ini 的配置文件
DMDCR_PATH = /dev/asmdisk/asm-mpatha
DMDCR_MAL_PATH =/home/dmdba/config/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径
DMDCR_SEQNO = 0
#ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 10
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/config/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 30
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/config/dsc1/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini