注册
达梦数据共享集群(DSC)部署
专栏/技术分享/ 文章详情 /

达梦数据共享集群(DSC)部署

谷顾咕 2026/05/28 280 0 0
摘要

数据共享集群的架构如下

主机名 IP 心跳IP 数据库名(db_name) 实例名(instance_name) 角色
DSC-1 192.168.20.36 192.168.77.31 dmdb dmdb1 控制节点
DSC-2 192.168.20.37 192.168.77.32 dmdb dmdb2 普通节点

1. 配置心跳链路

DSC集群对心跳链路和共享存储有硬性需求,本文以wmware虚拟机为例演示如何配置心跳链路和共享存储

1.1 添加新网卡

两台虚拟机各添加一块新网卡,如下图所示

image.png

1.2 添加网卡配置文件

通过 ifconfig 命令观察有无新网卡

image.png

如图,新网卡为 ens37 ,即网卡配置文件名为 ifcfg-ens37

##root用户执行 ##DSC-1 vi /etc/sysconfig/network-scripts/ifcfg-ens37 BOOTPROTO=static NAME=ens37 DEVICE=ens37 ONBOOT=yes IPADDR=192.168.77.31 GATEWAY=192.168.77.1 NETMASK=255.255.255.0 ##DSC-2 vi /etc/sysconfig/network-scripts/ifcfg-ens37 BOOTPROTO=static NAME=ens37 DEVICE=ens37 ONBOOT=yes IPADDR=192.168.77.32 GATEWAY=192.168.77.1 NETMASK=255.255.255.0

1.3 重启网络并验证

##两节点root都执行 systemctl restart NetworkManager

通过两节点的心跳IP互ping和telnet测试网络是否连通,能通即心跳链路配置完成

image.png

image.png

2. 配置共享存储

本篇的DSC集群使用DMASM,需要 DCR、VOTE、DMLOG、DMARCH、DMDATA 5个磁盘组

磁盘组 大小&块数 备注
DCR 2g*1 DM 集群注册表(DCR)磁盘专门用于存储 DCR 文件。DCR 文件记录了存储、维护集群配置的详细信息。在一个集群环境中只能配置一个DCR 磁盘。
VOTE 2g*1 VOTE 磁盘专门用于存储VTD 文件。VTD 文件记录了集群成员信息。在一个集群环境中只能配置一个VOTE 磁盘。
DMLOG 5g*1 用于存放数据库联机日志文件(.log),大小和块数可根据实际情况调整
DMARCH 5g*1 用于存放数据库归档文件,大小和块数可根据实际情况调整
DMDATA 20g*1 用于存放数据库数据文件,大小和块数可根据实际情况调整

2.1 VMWARE上的操作

根据上表的数量和大小,在任意一个节点上添加5块磁盘,要求硬盘独立永久,立即分配磁盘,单个硬盘文件

image.png

image.png

image.png

image.png

image.png

image.png

2.2 修改vmx文件

使用记事本修改虚拟机DSC-1存储目录下的 DSC_1.vmx 文件,添加以下内容

disk.locking = "FALSE" disk.EnableUUID = "TRUE" scsi1.sharedBus = "VIRTUAL" diskLib.dataCacheMaxSize = "0" diskLib.dataCacheMaxReadAheadSize = "0" diskLib.dataCacheMinReadAheadSize = "0" diskLib.dataCachePageSize = "4096" diskLib.maxUnsyncedWrites = "0" scsi0:1.deviceType = "disk" scsi0:2.deviceType = "disk" scsi0:3.deviceType = "disk" scsi0:4.deviceType = "disk" scsi0:5.deviceType = "disk"

使用记事本修改虚拟机DSC-2存储目录下的 DSC_2.vmx 文件,添加以下内容,目录需根据实际情况修改

scsi0:1.present = "TRUE" scsi0:1.fileName = "D:\kvm\DSC_1\DCR.vmdk" scsi0:2.present = "TRUE" scsi0:2.fileName = "D:\kvm\DSC_1\VOTE.vmdk" scsi0:2.mode = "independent-persistent" scsi0:3.present = "TRUE" scsi0:3.fileName = "D:\kvm\DSC_1\DMLOG.vmdk" scsi0:3.mode = "independent-persistent" scsi0:4.present = "TRUE" scsi0:4.fileName = "D:\kvm\DSC_1\DMARCH.vmdk" scsi0:4.mode = "independent-persistent" scsi0:5.present = "TRUE" scsi0:5.fileName = "D:\kvm\DSC_1\DMDATA.vmdk" scsi0:5.mode = "independent-persistent" disk.locking = "FALSE" disk.EnableUUID = "TRUE" scsi1.sharedBus = "VIRTUAL" diskLib.dataCacheMaxSize = "0" diskLib.dataCacheMaxReadAheadSize = "0" diskLib.dataCacheMinReadAheadSize = "0" diskLib.dataCachePageSize = "4096" diskLib.maxUnsyncedWrites = "0" scsi0:1.deviceType = "disk" scsi0:2.deviceType = "disk" scsi0:3.deviceType = "disk" scsi0:4.deviceType = "disk" scsi0:5.deviceType = "disk"

2.3 共享磁盘验证

两个节点都通过 lsblkfdisk -l 命令观察有无增的磁盘

image.png

image.png

验证两个节点的UUID是否一致

/usr/lib/udev/scsi_id -g -u -d /dev/sdb /usr/lib/udev/scsi_id -g -u -d /dev/sdc /usr/lib/udev/scsi_id -g -u -d /dev/sdd /usr/lib/udev/scsi_id -g -u -d /dev/sde /usr/lib/udev/scsi_id -g -u -d /dev/sdf

2.4 绑定块设备UUID

##两节点root用户执行 vi /etc/udev/rules.d/88-dm-asmdevices.rules #DCR KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c291ebe03a149c8e765b291b2ab3",SYMLINK+="dm/asm-dcr",OWNER="dmdba",GROUP="dinstall",MODE="0660" #VOTE KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29dca6d2fcdce8d965d7bb4c426",SYMLINK+="dm/asm-vote",OWNER="dmdba",GROUP="dinstall",MODE="0660" #DMLOG KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29466f8d79b6767f5088c21b35b",SYMLINK+="dm/asm-dmlog",OWNER="dmdba",GROUP="dinstall",MODE="0660" #DMARCH KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29b8ad156804bed633803488ac9",SYMLINK+="dm/asm-dmarch",OWNER="dmdba",GROUP="dinstall",MODE="0660" #DMDATA KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2937e7de6d20962e53736f5f41c",SYMLINK+="dm/asm-dmdata",OWNER="dmdba",GROUP="dinstall",MODE="0660"

若共享磁盘较多,可通过以下脚本批量生成后修改

vi uuid.sh curr=$(cd "$(dirname "$0")";pwd) rm -f $curr/88-dm-asmdevices.rules ##以下根据自己环境中的盘符自行修改 for i in b c d e f g h i j k l m n o p q r s t u v w x; 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-data$i\",OWNER=\"dmdba\",GROUP=\"dinstall\",MODE=\"0660\"" done

2.5 UDEV验证

两个节点都重启UDEV

##两节点root用户执行 systemctl restart systemd-udev-trigger.service udevadm control --reload-rules udevadm trigger --subsystem-match=block --type=devices --action=change

查询验证

##两节点root用户执行 ls -l /dev/dm/*

image.png

3. 配置dmdcr_cfg.ini

DMDCR _CFG.INI 是格式化非镜像环境下 DCR DISK、VOTE DISK 和镜像环境下 DCRV磁盘的配置文件

##两节点dmdba用户执行 vi /dmdb/dmdata/dmdcr_cfg.ini DCR_N_GRP = 3 DCR_VTD_PATH = /dev/dm/asm-vote DCR_OGUID = 63635 [GRP] #表示新建一个组 DCR_GRP_TYPE = CSS DCR_GRP_NAME = GRP_CSS DCR_GRP_N_EP = 2 DCR_GRP_DSKCHK_CNT = 60 [GRP_CSS] #组名,与DCR_GRP_NAME一致 DCR_EP_NAME = CSS1 DCR_EP_HOST = 192.168.77.31 #心跳IP DCR_EP_PORT = 9341 [GRP_CSS] DCR_EP_NAME = CSS2 DCR_EP_HOST = 192.168.77.32 DCR_EP_PORT = 9343 [GRP] DCR_GRP_TYPE = ASM DCR_GRP_NAME = GRP_ASM DCR_GRP_N_EP = 2 DCR_GRP_DSKCHK_CNT = 60 [GRP_ASM] DCR_EP_NAME = ASM1 DCR_EP_SHM_KEY = 93360 DCR_EP_SHM_SIZE = 1024 DCR_EP_HOST = 192.168.77.31 DCR_EP_PORT = 9349 DCR_EP_ASM_LOAD_PATH = /dev/dm [GRP_ASM] DCR_EP_NAME = ASM2 DCR_EP_SHM_KEY = 93361 DCR_EP_SHM_SIZE = 1024 DCR_EP_HOST = 192.168.77.32 DCR_EP_PORT = 9351 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 = 60 [GRP_DSC] DCR_EP_NAME = DMDB1 #实例名 DCR_EP_SEQNO = 0 DCR_EP_PORT = 5238 DCR_CHECK_PORT = 9741 [GRP_DSC] DCR_EP_NAME = DMDB2 DCR_EP_SEQNO = 1 DCR_EP_PORT = 5238 DCR_CHECK_PORT = 9742

4. 初始化ASM磁盘

##控制节点DSC-1的dmdba用户执行 vi /dmdb/dmdata/asmcmd.txt #asm script file create dcrdisk '/dev/dm/asm-dcr' 'DCR' create votedisk '/dev/dm/asm-vote' 'VOTE' create asmdisk '/dev/dm/asm-dmlog' 'DMLOG' create asmdisk '/dev/dm/asm-dmdata' 'DMDATA' create asmdisk '/dev/dm/asm-dmarch' 'DMARCH' init dcrdisk '/dev/dm/asm-dcr' from '/dmdb/dmdata/dmdcr_cfg.ini' identified by '******' init votedisk '/dev/dm/asm-vote' from '/dmdb/dmdata/dmdcr_cfg.ini'

DCR 初始化密码建议保存,后续可能使用

##只在控制节点dmdba用户执行 ##创建磁盘并初始化DCR和VOTE dmasmcmd script_file=/dmdb/dmdata/asmcmd.txt

5. 配置dmasvrmal.ini

dmasvrmal.ini 是 DMASM 使用的MAL系统的配置文件

##两节点dmdba用户执行 vi /dmdb/dmdata/dmasvrmal.ini [MAL_INST1] MAL_INST_NAME = ASM1 MAL_HOST = 192.168.77.31 MAL_PORT = 7236 [MAL_INST2] MAL_INST_NAME = ASM2 MAL_HOST = 192.168.77.32 MAL_PORT = 7237

6. 配置dmdcr.ini

##DSC-1 dmdba用户执行 vi /dmdb/dmdata/dmdcr.ini DMDCR_PATH = /dev/dm/asm-dcr DMDCR_MAL_PATH =/dmdb/dmdata/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径 DMDCR_SEQNO = 0 #ASM 重启参数,命令行方式启动 DMDCR_ASM_RESTART_INTERVAL = 0 #ASM自动重启间隔时间,0为不自动重启 DMDCR_ASM_STARTUP_CMD = /dmdb/dmdbms/bin/dmasmsvr dcr_ini=/dmdb/dmdata/dmdcr.ini #DB 重启参数,命令行方式启动 DMDCR_DB_RESTART_INTERVAL = 0 #数据库实例自动重启间隔时间,0为不自动重启 DMDCR_DB_STARTUP_CMD = /dmdb/dmdbms/bin/dmserver path=/dmdb/dmdata/DMDB1_config/dm.ini dcr_ini=/dmdb/dmdata/dmdcr.ini #DMDB1根据实际实例名修改
##DSC-2 dmdba用户执行 vi /dmdb/dmdata/dmdcr.ini DMDCR_PATH = /dev/dm/asm-dcr DMDCR_MAL_PATH =/dmdb/dmdata/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径 DMDCR_SEQNO = 1 ##ASM 重启参数,命令行方式启动 DMDCR_ASM_RESTART_INTERVAL = 0 DMDCR_ASM_STARTUP_CMD = /dmdb/dmdbms/bin/dmasmsvr dcr_ini=/dmdb/dmdata/dmdcr.ini ##DB 重启参数,命令行方式启动 DMDCR_DB_RESTART_INTERVAL = 0 DMDCR_DB_STARTUP_CMD = /dmdb/dmdbms/bin/dmserver path=/dmdb/dmdata/DMDB2_config/dm.ini dcr_ini=/dmdb/dmdata/dmdcr.ini

7. 前台启动dmcss和dmasmsvr

启动顺序是先启动css再启动asm,关闭顺序是先关闭asm再关闭css

##两节点dmdba用户执行 ##启动dmcss dmcss DCR_INI=/dmdb/dmdata/dmdcr.ini

启动成功后新开一个窗口,启动asm

##两节点dmdba用户执行 ##启动dmasm dmasmsvr DCR_INI=/dmdb/dmdata/dmdcr.ini

启动成功后dmcss会刷新日志,可以通过 show 命令查询集群状态

完成后新开窗口以进行下一步操作

8. 创建ASM磁盘组

##控制节点DSC-1的dmdba用户执行 dmasmtool DCR_INI=/dmdb/dmdata/dmdcr.ini create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-dmlog' create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-dmarch' create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata' #磁盘组中有多个磁盘使用以下加盘命令 #alter diskgroup 'DMDATA' add asmdisk '/dev/dm/asm-dmdata02'

操作成功会在两个节点前台启动的dmasmsvr中刷新日志

9. 数据库实例初始化

9.1 创建实例初始化文件

##控制节点DSC-1的dmdba用户执行 vi /dmdb/dmdata/dminit.ini db_name = DMDB system_path = +DMDATA/data system = +DMDATA/data/DMDB/system.dbf system_size = 1024 roll = +DMDATA/data/DMDB/roll.dbf roll_size = 1024 main = +DMDATA/data/DMDB/main.dbf main_size = 1024 ctl_path = +DMDATA/data/DMDB/dm.ctl ctl_size = 8 log_size = 8192 dcr_path = /dev/dm/asm-dcr #dcr磁盘路径,目前不支持asm,只能是裸设备 dcr_seqno = 0 auto_overwrite = 1 page_size = 32 #页大小默认8K,建议配置为16K charset=1 #字符集默认字符集是GB18030 即参数为0,如果是UTF-8需要加参数CHARSET,即参数为1 case_sensitive=0 #是否区分大小写,0不区分,1区分(默认区分大小写) SYSDBA_PWD='******' SYSAUDITOR_PWD='******' SYSSSO_PWD='******' [DMDB1] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应 config_path =/dmdb/dmdata/DMDB1_config port_num = 5238 mal_host = 192.168.77.31 mal_port = 9340 log_path = +DMLOG/log/DMDB1_log01.log log_path = +DMLOG/log/DMDB1_log02.log [DMDB2] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应 config_path = /dmdb/dmdata/DMDB2_config port_num = 5238 mal_host = 192.168.77.32 mal_port = 9341 log_path = +DMLOG/log/DMDB2_log01.log log_path = +DMLOG/log/DMDB2_log02.log

9.2 初始化控制节点数据库实例

##控制节点DSC-1的dmdba用户执行 dminit control=/dmdb/dmdata/dminit.ini

9.3 复制数据文件到普通节点

将DSC-2对应的数据文件 /dmdb/dmdata/DMDB2_config 复制到服务器目录下

##控制节点DSC-1的dmdba用户执行 scp -P 22 -r /dmdb/dmdata/DMDB2_config 192.168.20.32:/dmdb/dmdata/

10. 前台启动数据库实例

##DSC-1 dmdba用户执行 dmserver /dmdb/dmdata/DMDB1_config/dm.ini dcr_ini=/dmdb/dmdata/dmdcr.ini ##DSC-2 dmdba用户执行 dmserver /dmdb/dmdata/DMDB2_config/dm.ini dcr_ini=/dmdb/dmdata/dmdcr.ini

启动成功会在控制节点 DSC-1 的CSS中刷新日志,show可查看集群状态

image.png

11. 关闭数据库实例、ASM和集群

按次序关闭两个节点的 dmserver、dmasmsvr、dmcss,在前台启动窗口 ctrl+c 关闭

12. 配置dmarch.ini

归档空间限制一般设置为归档盘最大空间的80%-90%,注意要将两个节点的 ARCH_SPACE_LIMIT 相加来计算归档空间限制

##DSC-1 dmdba用户执行 vi /dmdb/dmdata/DMDB1_config/dmarch.ini ARCH_WAIT_APPLY = 0 ARCH_LOCAL_SHARE = 1 ARCH_LOCAL_SHARE_CHECK=0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = +DMARCH/DMDB1/arch ARCH_FILE_SIZE = 1024 #根据实际情况修改 ARCH_SPACE_LIMIT = 2048 #根据实际情况修改 ARCH_FLUSH_BUF_SIZE = 0 ARCH_HANG_FLAG = 1 [ARCH_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DMDB2 ARCH_INCOMING_PATH = +DMARCH/DMDB2/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 2048 ARCH_FLUSH_BUF_SIZE = 0
##DSC-2 dmdba用户执行 vi /dmdb/dmdata/DMDB2_config/dmarch.ini ARCH_WAIT_APPLY = 0 ARCH_LOCAL_SHARE = 1 ARCH_LOCAL_SHARE_CHECK=0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = +DMARCH/DMDB2/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 2048 ARCH_FLUSH_BUF_SIZE = 0 ARCH_HANG_FLAG = 1 [ARCH_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DMDB1 ARCH_INCOMING_PATH = +DMARCH/DMDB1/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 2048 ARCH_FLUSH_BUF_SIZE = 0

13. 配置dmcssm.ini

建议在第三台服务器上部署确认监视器,若无条件在任意一台服务器上部署即可,建议所有节点都部署

##两节点dmdba用户执行 vi /dmdb/dmdata/dmcssm.ini CSSM_OGUID=63635 #配置所有CSS的连接信息,跟dmdcr_cfg.ini中的CSS配置项的DCR_EP_HOST和DCR_EP_PORT保持一致 CSSM_CSS_IP=192.168.77.31:9341 CSSM_CSS_IP=192.168.77.32:9343 CSSM_LOG_PATH=/dmdb/dmdbms/log #监视器日志文件存放路径 CSSM_LOG_FILE_SIZE=32 #每个日志文件最大32M CSSM_LOG_SPACE_LIMIT=0 #不限定日志文件总占用空间 ##启动监视器 dmcssm INI_PATH=/dmdb/dmdata/dmcssm.ini

14. 修改dm.ini

关闭SSL加密并打开归档

##两节点dmdba用户执行 vi /dmdb/dmdata/DMDB1_config/dm.ini ENABLE_ENCRYPT=0 ARCH_INI=1

15. 创建启动脚本并启动验证

##两节点dmdba用户执行 cp $DM_HOME/bin/service_template/DmCSSService $DM_HOME/bin/ cp $DM_HOME/bin/service_template/DmASMSvrService $DM_HOME/bin/ cp $DM_HOME/bin/service_template/DmService $DM_HOME/bin/ vi $DM_HOME/bin/DmCSSService DCR_INI_PATH="/dmdb/dmdata/dmdcr.ini" vi $DM_HOME/bin/DmASMSvrService DCR_INI_PATH="/dmdb/dmdata/dmdcr.ini" ##DSC-1 dmdba用户执行 vi $DM_HOME/bin/DmService INI_PATH="/dmdb/dmdata/DMDB1_config/dm.ini" DCR_INI_PATH="/dmdb/dmdata/dmdcr.ini" ##DSC-2 dmdba用户执行 vi $DM_HOME/bin/DmService INI_PATH="/dmdb/dmdata/DMDB2_config/dm.ini" DCR_INI_PATH="/dmdb/dmdata/dmdcr.ini"

验证启动脚本,按顺序依次启动 DmCSSService、DmASMSvrService、DmService

##两节点dmdba用户执行 DmCSSService start DmASMSvrService start DmService start

登录监视器查询集群状态

image.png

集群状态正常

16. 注册系统服务

##两节点root用户执行 cd /dmdb/dmdbms/script/root #节点1 ./dm_service_installer.sh -t dmcss -p css1 -dcr_ini /dmdb/dmdata/dmdcr.ini #节点2 ./dm_service_installer.sh -t dmcss -p css2 -dcr_ini /dmdb/dmdata/dmdcr.ini

按次序关闭数据库实例、ASM、CSS,再以系统服务的方式启动集群

##两节点dmdba用户执行 DmService stop DmASMSvrService stop DmCSSService stop ##root用户执行 #节点1 systemctl start DmCSSServicecss1 #节点2 systemctl start DmCSSServicecss2

通过监视器启动ASM和数据库实例,并查询集群状态

##控制节点DSC-1的dmdba用户执行 dmcssm INI_PATH=/dmdb/dmdata/dmcssm.ini ep startup GRP_ASM ep startup GRP_DSC show

image.png

查询状态正常,DSC集群部署完成

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服