DMDSC 集群为了实现多实例同时访问和修改数据,需要数据文件、控制文件和日志文件都放到共享存储上。DM 支持两种共享存储,裸设备和 DMASM,裸设备是未经过格式化的特殊字符设备,推荐使用 DMASM 共享存储。
其中,VOTE 是表决磁盘,一个集群一个表决磁盘。DCR 是 DM 集群注册表的简称,用于存储、维护集群配置的详细信息,一个集群一个注册表。生产环境中,共享存储一般由操作系统管理员进行划分。共享存储规划可参照下表:
本环境为实验环境磁盘空间有限,生产环境根据需要配置磁盘空间
注意:
以上磁盘大小可按照实际业务需要进行调整。Redo 日志盘的空间大小建议最小不少于 4G,否则会引起后面数据库启动失败等问题。
db1 与 db2 两台机器的端口规划可以根据实际需求设置两边对应一致或者不一致。
本节主要介绍两种块设备 UUID 绑定方式:多路径方式绑定和无多路径方式绑定。裸设备绑定方式请参考数据库安装路径 doc 目录下《共享存储集群》使用手册。
方法一:多路径方式绑定
• 通过以下命令可获取多路径。即搭建需要采用的 lun,其多路径名称依次为:/dev/mapper/mpatha 至/dev/mapper/mpathe,共 5 个 lun。
[root@RS1824 ~]# fdisk -l |grep mpath
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/mapper/mpatha: 2048 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/mapper/mpathb: 2048 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/mapper/mpathc: 20 GB, 25249710080 bytes, 49315840 sectors
Disk /dev/mapper/mpathd: 536.9 GB, 536870912000 bytes, 1048576000 sectors
Disk /dev/mapper/mpathe: 536.9 GB, 536870912000 bytes, 1048576000 sectors
• 通过多路径 UUID 绑定。通过 mpath.sh 生成配置文件 88-dm-asmdevices.rules。
[root@RS1824 ~]# cat mpath.sh
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in mpatha mpathb mpathc mpathd mpathe;
do
str1="$i:`udevadm info --query=all --name=/dev/mapper/$i | grep DM_UUID`"
str2=${str1#*=}
echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${str2}\",SYMLINK+=\"asm-${i}\",OWNER=\"dmdba\",GROUP=\"dinstall\",MODE=\"0660\"" ''
done
执行上述脚本
[root@RS1824 ~]# ./mpath.sh
脚本执行成功后,会生成绑定配置文件,可以根据需求进行修改别名 SYMLINK,例如:
[root@RS1824 ~]# cat 88-dm-asmdevices.rules
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342697bdcefdae7fd52cfd1b00db",SYMLINK+="dm/asm-dmdcr",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342449774d0d2c16d990fd6300db",SYMLINK+="dm/asm-dmvote",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342a2b1bd08d28e0d58c5db300db",SYMLINK+="dm/asm-dmlog",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b34208f0b5c5d515dd41dfde300db",SYMLINK+="dm/asm-dmdata",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342dfa7bea6dc4c4dec06da300db",SYMLINK+="dm/asm-dmarch",OWNER="dmdba",GROUP="dinstall",MODE="0660"
• 部署配置文件。复制 88-dm-asmdevices.rules 配置文件到 DSC 集群的所有节点的相关目录下。
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules
• 检查生效。
(1)重启服务器,建议使用该方法。
(2)如果无法重启,执行下述命令。
cd /usr/lib/systemd/system/systemd-udev-trigger.service.d/
先修改以下文件的参数
vi systemd-udev-trigger-no-reload.conf
RefuseManualStop=false
使其生效
systemctl daemon-reload
再执行命令
udevadm control --reload-rules
systemctl restart systemd-udev-trigger.service
执行完后改回参数
RefuseManualStop=true
再次执行
systemctl daemon-reload
(3)授权。
chown dmdba:dinstall /dev/mapper/mpath* -R
chown dmdba:dinstall /dev/dm/asm-* -R
(4)检查生效。
blockdev --getsize64 /dev/dm/asm-dmdcr
blockdev --getsize64 /dev/dm/asm-dmvote
blockdev --getsize64 /dev/dm/asm-dmlog
blockdev --getsize64 /dev/dm/asm-dmdata
blockdev --getsize64 /dev/dm/asm-dmarch
结果如下
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmdcr
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmvote
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmlog
25249710080
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmdata
536870912000
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmarch
536870912000
方法二:无多路径方式绑定
如没有配置多路径,采用 UUID 绑定多个 LUN 存储,可以通过 fdisk -l 命令查看 LUN 设备,这里以共享存储盘为 sda,sdb,sdc,sdd,sde 为例。
• 绑定设备的 UUID。创建 uuid.sh 文件,使用脚本生成配置文件。
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in a b c d e;
do
echo "KERNEL==\"sd?\",SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\",RESULT==\"`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", SYMLINK+=\"dm/asm-disk$i\",OWNER=\"dmdba\", GROUP=\"dinstall\",MODE=\"0660\"" >> $curr/88-dm-asmdevices.rules
done
执行 uuid.sh 脚本
chmod +x uuid.sh
./uuid.sh
脚本执行成功后,会生成绑定配置文件 88-dm-asmdevices.rules,可以根据自己的需求进行修改别名 SYMLINK,本文档修改如下:
vim 88-dm-asmdevices.rules
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2929c3dab7d6dcf02e57ada868c", SYMLINK+="dm/asm-dmdcr",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b342449774d0d2c16d990fd6300db", SYMLINK+="dm/asm-dmvote",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b342a2b1bd08d28e0d58c5db300db", SYMLINK+="dm/asm-dmlog",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b34208f0b5c5d515dd41dfde300db", SYMLINK+="dm/asm-dmdata",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b342dfa7bea6dc4c4dec06da300db", SYMLINK+="dm/asm-dmarch",OWNER="dmdba", GROUP="dinstall",MODE="0660"
• 配置部署文件。生成配置文件后,把 88-dm-asmdevices.rules 配置文件 cp 到 DSC 的每个节点上。
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules
• 检查生效。
(1)重启服务器,建议使用该方法。
(2)如果无法重启,执行下述命令。
udevadm control --reload-rules
systemctl restart systemd-udev-trigger.service
(3)授权。
chown dmdba:dinstall /dev/dm/asm-* -R
(4)检查生效。
blockdev --getsize64 /dev/dm/asm-dmdcr
blockdev --getsize64 /dev/dm/asm-dmvote
blockdev --getsize64 /dev/dm/asm-dmlog
blockdev --getsize64 /dev/dm/asm-dmdata
blockdev --getsize64 /dev/dm/asm-dmarch
结果如下
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmdcr
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmvote
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmlog
25249710080
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmdata
536870912000
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmarch
536870912000
对于不同系统,数据库初始化参数可能因数据、开发等因素存在差异性。最主要的几个实例初始化属性需要提前确认,见下表。
共享存储集群部署前应进行完整的环境检查,详细内容可参考环境检查与修改。在 DSC 集群中应特别注意以下内容:
• 检查共享存储设备绑定情况。如果使用了多路径软件,可对比 2 台服务器的多路径信息,重点确认 2 台服务器绑定的设备 uuid 是否一致,并检查绑定是否生效。
检查设备 uuid 是否一致
multipath -ll
检查绑定是否生效
blockdev --getsize64 /dev/dm/asm-dmvote
blockdev --getsize64 /dev/dm/asm-dmdcr
blockdev --getsize64 /dev/dm/asm-dmlog
blockdev --getsize64 /dev/dm/asm-dmarch
blockdev --getsize64 /dev/dm/asm-dmdata
• 需进行共享磁盘测速。在部署 DSC 之前,将划分的磁盘挂载到本地,然后采用 dd / fio 方式进行磁盘 IO 测试。生产环境中,建议共享磁盘读写速度不低于 150M/s。Fio 测试方法如下:
测试方法和脚本,以下三个命令分别测试随机写,随机读,随机读写:
f=/data2/1.g
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=8k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=$f -name=Rand_Write_Testing --output fio.log
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=8k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=$f -name=Rand_Read_Testing >> fio.log
fio -direct=1 -iodepth=128 -rw=randrw -rwmixread=70 -ioengine=libaio -bs=8k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=$f -name=Mix_Read_Testing >> fio.log
db1 和 db2 机器均将数据库安装在 /dm/dmdbms 目录下,详细内容请参考创建数据库用户和安装数据库软件。
db1 和 db2 机器配置相同。
[dmdba@~]# vi /dm/dmdbms/dsc_config/dmdcr_cfg.ini
DCR_N_GRP = 3 ##集群环境有多少个 GROUP,范围:1~16
DCR_VTD_PATH = /dev/dm/asm-dmvote ##规划为 vote 的磁盘
DCR_OGUID = 210715 ## 消息标识,一个组里面只有一个。
[GRP] #新建一个 GROUP
DCR_GRP_TYPE = CSS ##组类型(CSS/ASM/DB)
DCR_GRP_NAME = GRP_CSS ##组名
DCR_GRP_N_EP = 2 ##组内节点个数
DCR_GRP_DSKCHK_CNT = 65 ##磁盘心跳容错时间,单位:秒
[GRP_CSS]
DCR_EP_NAME = CSS1 ##CSS 节点名
DCR_EP_HOST = 172.16.16.111 ##心跳地址
DCR_EP_PORT = 11286 ##CSS 端口
[GRP_CSS]
DCR_EP_NAME = CSS2
DCR_EP_HOST = 172.16.16.112
DCR_EP_PORT = 11287
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 61
[GRP_ASM]
DCR_EP_NAME = ASM1 ##ASM 节点名,和 dmasvrmal 的 MAL_INST_NAME 一致
DCR_EP_SHM_KEY = 42424 ##共享内存标识
DCR_EP_SHM_SIZE = 1024 ##共享内存大小
DCR_EP_HOST = 172.16.16.111 ##心跳地址
DCR_EP_PORT = 11276 ##ASM 端口
DCR_EP_ASM_LOAD_PATH = /dev/dm
[GRP_ASM]
DCR_EP_NAME = ASM2
DCR_EP_SHM_KEY = 42425
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 172.16.16.112
DCR_EP_PORT = 11277
DCR_EP_ASM_LOAD_PATH = /dev/dm
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = GRP_DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 57
[GRP_DSC]
DCR_EP_NAME = DSC1 ##实例名,和 dm.ini 的 INSTANCE_NAME 一致
DCR_EP_SEQNO = 1 ##组内序号,不能重复
DCR_EP_PORT = 5236 ##实例端口,和 dm.ini 的 PORT_NUM 一致
DCR_CHECK_PORT = 11256 ##DCR 检查端口
[GRP_DSC]
DCR_EP_NAME = DSC2
DCR_EP_SEQNO = 2
DCR_EP_PORT = 5237
DCR_CHECK_PORT = 11257
在 db1 机器上进行如下操作。
[dmdba@~]#/dm/dmdbms/bin/dmasmcmd
#asm script file
ASM>create dcrdisk '/dev/dm/asm-dmdcr' 'dcr'
ASM>create votedisk '/dev/dm/asm-dmvote' 'vote'
ASM>init dcrdisk '/dev/dm/asm-dmdcr' from '/dm/dmdbms/dsc_config/init/dmdcr_cfg.ini' identified by '****'
ASM>init votedisk '/dev/dm/asm-dmvote' from '/dm/dmdbms/dsc_config/init/dmdcr_cfg.ini'
ASM>create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
ASM>create asmdisk '/dev/dm/asm-dmlog' 'LOG0'
ASM>create asmdisk '/dev/dm/asm-dmarch' 'ARCH0'
[dmdba@~]# vi /dm/dmdbms/dsc_config/dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 172.16.16.111 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
[MAL_INST2]
MAL_INST_NAME = ASM2
MAL_HOST = 172.16.16.112
MAL_PORT = 11267
将该文件分别拷贝至 db1 和 db2机器下的 /dm/dmdbms/dsc_config/DSC1 和 /dm/dmdbms/dsc_config/DSC2 目录下。
• db1 机器配置 dmdcr.ini,dmdcr_seqo 为 0。
[dmdba@~]# vi /dm/dmdbms/dsc_config/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH = /dm/dmdbms/dsc_config/DSC1/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
##DMDCR_ASM_RESTART_INTERVAL = 60 #CSS 认定 ASM 故障重启的时间
##DMDCR_ASM_STARTUP_CMD = /dm/dmdbms/dsc_config/DmAsmService_DSC0 start
##DMDCR_DB_RESTART_INTERVAL = 60 ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
##DMDCR_DB_STARTUP_CMD = /dm/dmdbms/dsc_config/DmService_DSC0 start
• db2 机器配置 dmdcr.ini,dmdcr_seqo 为 1。
[dmdba@~]# vi /dm/dmdbms/dsc_config/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH = /dm/dmdbms/dsc_config/DSC2/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
##DMDCR_ASM_RESTART_INTERVAL = 60
##DMDCR_ASM_STARTUP_CMD = /dm/dmdbms/dsc_config/DmAsmServiceDSC1 start
##DMDCR_DB_RESTART_INTERVAL = 60
##DMDCR_DB_STARTUP_CMD = /dm/dmdbms/dsc_config/DmServiceDSC1 start
注意:
当前为手动拉起 db1 机器和 db2机器的 ASM 和 DMSERVER 服务。待集群配置完成后,再修改为自动拉起(删除 dmdcr.ini 中的“##”号即可)。
在 2 个节点分别启动 dmcss 命令:
[dmdba@]# /dm/dmdbms/bin/dmcss DCR_INI=/dm/dmdbms/dsc_config/dmdcr.ini
[dmdba@]# /dm/dmdbms/bin/dmcss DCR_INI=/dm/dmdbms/dsc_config/dmdcr.ini
在 2 个节点分别启动 dmasmsvr 命令:
[dmdba@]# /dm/dmdbms/bin/dmasmsvr DCR_INI=/dm/dmdbms/dsc_config/dmdcr.ini
[dmdba@]# /dm/dmdbms/bin/dmasmsvr DCR_INI=/dm/dmdbms/dsc_config/dmdcr.ini
说明:如果 DMCSS 配置有自动拉起 dmasmsvr 的功能,可以等待 DMCSS 自动拉起 dmasmsvr 程序,不需要手动启动。
在 db1 节点启动 dmasmtool 工具
[dmdba@]# /dm/dmdbms/bin/dmasmtool DCR_INI=/dm/dmdbms/dsc_config/dmdcr.ini
输入下列语句创建 DMASM 磁盘组
创建日志磁盘组
ASM> create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-dmlog'
创建数据磁盘组
ASM> create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata'
创建归档磁盘组
ASM> create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-dmarch'
db1 和 db2 机器配置相同。
创建 dminit.ini 文件
[dmdba@~]# vi /dm/dmdbms/dsc_config/init/dminit.ini
DB_NAME = DSC
SYSDBA_PWD = SYSDBA_PWD
SYSTEM_PATH = +DMDATA/data
SYSTEM = +DMDATA/data/SYSTEM.dbf
SYSTEM_SIZE = 1024
ROLL = +DMDATA/data/ROLL.dbf
ROLL_SIZE = 10000
MAIN = +DMDATA/data/MAIN.dbf
MAIN_SIZE = 1024
CTL_PATH = +DMDATA/data/dm.ctl
CTL_SIZE = 8
LOG_SIZE = 2048
DCR_PATH = /dev/dm/asm-dmdcr
DCR_SEQNO = 0
AUTO_OVERWRITE = 1
PAGE_SIZE = 32
EXTENT_SIZE = 16
BLANK_PAD_MODE = 1
[DSC1]
CONFIG_PATH = /dm/dmdbms/dsc_config/DSC1
PORT_NUM = 5236
MAL_HOST = 172.16.16.111
MAL_PORT = 11246
LOG_PATH = +DMLOG/DSC0_LOG01.log
LOG_PATH = +DMLOG/DSC0_LOG02.log
[DSC2]
CONFIG_PATH = /dm/dmdbms/dsc_config/DSC2
PORT_NUM = 5237
MAL_HOST = 172.16.16.112
MAL_PORT = 11247
LOG_PATH = +DMLOG/DSC1_LOG01.log
LOG_PATH = +DMLOG/DSC1_LOG02.log
在 db1节点执行初始化 db 命令
[dmdba@~]# /dm/dmdbms/bin/dminit control=/dm/dmdbms/dsc_config/init/dminit.ini
拷贝文件到 db2 节点
[dmdba@~]# scp -r /dm/dmdbms/dsc_config/DSC1 dmdba@172.16.16.112:/dm/dmdbms/dsc_config/.
scp之后注意修改节点二的INSTANCE_NAME和CONFIG_PATH
• db1 节点
修改 dm.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC1/dm.ini
ARCH_INI = 1
创建 dmarch.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC1/dmarch.ini
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC2
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC2/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
• db2 节点
修改 dm.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC2/dm.ini
ARCH_INI = 1
创建 dmarch.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC2/dmarch.ini
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC2/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
如果 DMCSS 配置有自动拉起 dmserver 的功能,可以等待 DMCSS 自动拉起实例,不需要手动启动。如果需要手动启动,可参考以下步骤:
db1 机器
[dmdba@]# /dm/dmdbms/bin/dmserver /dm/dmdbms/dsc_config/DSC1/dm.ini dcr_ini=/dm/dmdbms/dsc_config/dmdcr.ini
db2 机器
[dmdba@~]# /dm/dmdbms/bin/dmserver /dm/dmdbms/dsc_config/DSC2/dm.ini dcr_ini=/dm/dmdbms/dsc_config/dmdcr.ini
db1 机器
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/dsc_config/DSC1/dm.ini -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -m open -p DSC
db2机器
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/dsc_config/DSC2/dm.ini -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -m open -p DSC
备注:db1 机器、db2 机器删除自启可参考以下命令。
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSServiceCSS
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmASMSvrServiceASM
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDSC
• 创建 dmcssm.ini
A 机器、B 机器配置相同
[dmdba@~]# vi /dm/dmdbms/bin/dmcssm.ini
CSSM_OGUID = 210715
CSSM_CSS_IP = 172.16.16.111:11286
CSSM_CSS_IP = 172.16.16.112:11287
CSSM_LOG_PATH = ../log
CSSM_LOG_FILE_SIZE = 512
CSSM_LOG_SPACE_LIMIT = 2048
• 注册服务(选做)
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmcssm -cssm_ini /dm/dmdbms/bin/dmcssm.ini -p Monitor
备注:删除自启
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSMonitorServiceMonitor
• 监视器使用
前台启动:
[dmdba@~]# /dm/dmdbms/bin/dmcssm INI_PATH=/dm/dmdbms/bin/dmcssm.ini
后台启动:
[dmdba@~]# /dm/dmdbms/bin/DmCSSMonitorServiceMonitor start
通过以上命令前台启动,进入监视器执行 show 命令,可查看 DSC 集群运行状态。如下图所示,更多详细内容参考数据库安装目录 doc 路径下《共享存储集群》使用手册。
[dmdba@~]$ /dm/dmdbms/bin/dmcssm INI_PATH=/dm/dmdbms/bin/dmcssm.ini
[monitor] 2024-03-11 11:37:43: CSS MONITOR V8
[monitor] 2024-03-11 11:37:43: CSS MONITOR SYSTEM IS READY.
[monitor] 2024-03-11 11:37:43: Wait CSS Control Node choosed...
[monitor] 2024-03-11 11:37:44: Wait CSS Control Node choosed succeed.
show
monitor current time:2024-03-11 11:37:48, n_group:3
=================== group[name = GRP_CSS, seq = 0, type = CSS, Control Node = 0] ========================================
[CSS0] auto check = TRUE, global info:
[ASM0] auto restart = TRUE
[DSC0] auto restart = TRUE
[CSS1] auto check = TRUE, global info:
[ASM1] auto restart = TRUE
[DSC1] auto restart = TRUE
ep: css_time inst_name seqno port mode inst_status vtd_status is_ok active guid ts
2024-03-11 11:37:47 CSS0 0 11286 Control Node OPEN WORKING OK TRUE 4111 7050
2024-03-11 11:37:47 CSS1 1 11287 Normal Node OPEN WORKING OK TRUE 5250 8182
=================== group[name = GRP_ASM, seq = 1, type = ASM, Control Node = 0] ========================================
n_ok_ep = 2
ok_ep_arr(index, seqno):
(0, 0)
(1, 1)
sta = OPEN, sub_sta = STARTUP
break ep = NULL
recover ep = NULL
crash process over flag is TRUE
ep: css_time inst_name seqno port mode inst_status vtd_status is_ok active guid ts
2024-03-11 11:37:47 ASM0 0 11276 Control Node OPEN WORKING OK TRUE 10142 13065
2024-03-11 11:37:47 ASM1 1 11277 Normal Node OPEN WORKING OK TRUE 11581 14496
=================== group[name = GRP_DSC, seq = 2, type = DB, Control Node = 0] ========================================
n_ok_ep = 2
ok_ep_arr(index, seqno):
(0, 0)
(1, 1)
sta = OPEN, sub_sta = STARTUP
break ep = NULL
recover ep = NULL
crash process over flag is TRUE
ep: css_time inst_name seqno port mode inst_status vtd_status is_ok active guid ts
2024-03-11 11:37:47 DSC0 0 5236 Control Node OPEN WORKING OK TRUE 24418 27314
2024-03-11 11:37:47 DSC1 1 5237 Normal Node OPEN WORKING OK TRUE 21417 24314
==================================================================================================================
启动:A/B 机器 CSS
A/B 机器:
[dmdba@~]#/dm/dmdbms/bin/DmCSSServiceCSS start
说明:CSS 启动后 30 秒自动拉起 ASM,60 秒自动拉起 DMSERVER。
停止: A/B 机器 DMSERVER→A/B 机器 ASM→A/B 机器 CSS
A/B 机器:[dmdba@~]# /dm/dmdbms/bin/DmServiceDSC stop
A/B 机器:[dmdba@~]# /dm/dmdbms/bin/DmASMSvrServiceASM stop
A/B 机器:[dmdba@~]# /dm/dmdbms/bin/DmCSSServiceCSS stop
说明:
1.DSC 正常停库必须 2 节点同时停止,根据目前脚本配置,CSS 启动后 60 秒自动拉起 ASM,60 秒自动拉起 DMSERVER,所以停止 DMSERVER 和 ASM 后,要尽快停止 CSS,避免被自动拉起。
2.服务全部停止后,要检查后台进程是否全部停止。
DMDSC集群出现数据库实例、或者节点硬件故障时,dmserver的Voting disk心跳信息不再更新,DMCSS一旦监控到dmserver发生故障,会马上启动故障处理,各节点dmserver收到故障处理命令后,启动故障处理流程。
在DMDSC故障处理机制下,一旦产生节点故障,登录到故障节点的所有连接将会断开,所有未提交事务将被强制回滚,活动节点上的用户请求可以继续执行,但是一旦产生节点间信息传递(比如向故障节点发起GBS/LBS请求、或者发起remode read请求),当前操作就会被挂起;在DMDSC故障处理完成后,这些被挂起的操作可以继续执行。
DMDSC环境dmserver故障处理包括以下工作:
1、暂停所有会话线程、工作线程、日志刷盘线程、检查点线程等,避免故障处理过程中产生并发错误。
2、收集所有节点的Buffer,丢弃无效数据页,获取最新数据页和需要重做故障节点redo日志的数据页信息,并在排查故障节点后重新构造LBG/GBS信息。
3、重做故障节点redo日志。
4、收集所有节点事务信息,重新构造锁对象,并重构相应的LLS/GLS/STV/GTV系统。
5、如果配置有VIP,进行必要的VIP配置操作。
6、控制节点执行故障节点活动事务回滚和故障节点已提交事务修改的PURGE操作。
DMDSC故障处理分为两个阶段:
第一阶段由所有活动节点共同参与,进行全局的信息收集、重构;第二阶段由控制节点执行,将故障节点的活动事务回滚、并purge故障节点已提交的修改。在第一阶段执行期间,数据库实例不提供数据库服务,所有用户请求将被挂起。在第二阶段操作之前,会唤醒所有活动节点,正常提供数据库服务。也就是说故障处理第二阶段的操作与正常的数据库操作在系统内部同时进行。但在第二阶段执行完成之前,DMDSC故障处理扔没有真正结束,再此期间,不能处理节点重加入,也不能处理新的节点故障,如果有新的节点故障会主动中止所有节点。
节点重加入
故障节点恢复正常后,DMCSS会启动节点重加入处理流程,将故障节点重新加入到DMDSC集群中。默认情况下,DMCSS自动监控并处理节点重加入,不需要用户干预;我们也可以通过DMCSSM关闭自动监控功能,改成手动处理节点重加入。
DMDSC集群节点重加入操作会将DMDSC集群挂起一段时间,重加入过程中会中断正在执行的操作,暂停响应用户的数据库请求。但是,重加入操作不会终止这些活动事务,在加入完成后,可以继续执行。
DMDSC节点重加入的基本步骤包括:
1、根据各节点的BUFFER使用情况,重构所有节点的GBS\LBS系统
2、根据各节点的活动事务信息,重构全局的GTV系统、以及所有节点的本地LTV系统
3、根据各节点的活动事务的封锁(LOCK)信息,重构全局的GLS系统、以及所有节点的本地LLS系统。
4、在节点重加入期间,不能处理新的节点故障,如果有新的节点故障会主动中止所有节点。
文章
阅读量
获赞