注册
达梦数据库DMDSC集群部署(保姆级教程)
培训园地/ 文章详情 /

达梦数据库DMDSC集群部署(保姆级教程)

DM_jason 2026/08/21 251 1 0

官方参考文档:

《DM8数据共享集群》

《DM8数据守护与读写分离集群》

一、环境说明

准备2台虚拟机部署DMDSC集群,用来功能测试,具体规划如下:

1.虚拟机规划

虚拟机1 虚拟机2
角色 DSC01、监视器(这里我们把监视器部署到节点上,仅用来测试,生产建议单独一台服务器部署监视器) DSC02
主机名 DSC01 DSC02
操作系统 KylinV10SP3 KylinV10SP3
CPU 2 2
内存 2 2
存储 30G 30G
业务地址 10.0.0.80 10.0.0.81
集群地址 10.0.0.80 10.0.0.81

2.共享磁盘规划

磁盘类型 测试容量 核心用途 存放内容
DCR盘 1G 集群注册表 DMDCR 元数据,记录集群节点、端口、ASM 磁盘配置
VOTE盘 1G 仲裁心跳盘 节点心跳、脑裂仲裁,MAL 断网时判定保留哪个节点
LOG 盘 5G 联机日志磁盘组 所有实例 redo 联机日志,独立磁盘拆分 IO 压力
DATA 盘 10G 业务数据磁盘组 所有 dbf、控制文件、回滚段、系统表空间

3.集群端口规划

节点机器 实例名称 IP 实例端口
DSC01 CSS0 10.0.0.80 9836
ASM0 5836
ASM的MAL系统 4836
dmserver 5236
数据库的MAL系统 6537
DSC02 CSS1 10.0.0.81 9837
ASM1 5837
ASM的MAL系统 4837
dmserver 5236
数据库的MAL系统 6537

二、环境准备

1.虚拟机准备

发放两台虚拟机,kylinV10SP3,规格参考’一、环境说明‘。

2.共享磁盘准备

Vmvare原生共享vmdk,贴近真实的SAN,本例采用UDEV工具固定磁盘。

2.1进入vmvare目录(以个人实际目录为准)

win+R打开cmd

C:\Users\lenovo>cd /d D:\xu ni ji\vmware 参数 /d 作用:跨盘符切换目录,你的程序在 D 盘,不加会切不动。

输入命令回车,能弹出一堆参数说明就成功

vmware-vdiskmanager.exe

image.png

2.2.创建共享磁盘

# 1、DCR盘 1G vmware-vdiskmanager.exe -c -s 1G -a lsilogic -t 2 "D:\VM_SHARE\dcr.vmdk" # 2、VOTE盘 1G vmware-vdiskmanager.exe -c -s 1G -a lsilogic -t 2 "D:\VM_SHARE\vote.vmdk" # 3、LOG盘 5G vmware-vdiskmanager.exe -c -s 5G -a lsilogic -t 2 "D:\VM_SHARE\log.vmdk" # 4、DATA盘 10G vmware-vdiskmanager.exe -c -s 10G -a lsilogic -t 2 "D:\VM_SHARE\data.vmdk"

2.3.挂载共享磁盘(以DCR盘为例)

1.添加硬盘

image.png

image.png

image.png

image.png

2.选择对应的vmdk

image.png
image.png

3.规划磁盘序号

image.png

给 4 块盘分配不同编号,避免冲突,统一规则:

DCR 盘:SCSI 1:0 VOTE 盘:SCSI 1:1 LOG 盘:SCSI 1:2 DATA 盘:SCSI 1:3

共享盘全部挂在同一个 SCSI 控制器SCSI 1下面,只是后面的序号 0/1/2/3 区分

剩下的盘按照上述操作执行,两台虚拟机都需要按照上述操作。

4.修改两台虚拟机的.vmx配置文件

在末尾添加

disk.locking = "FALSE" diskLib.dataCacheMaxSize = "0" diskLib.dataCacheMaxReadAheadSize = "0" scsi1.sharedBus = "VIRTUAL"

2.4创建用户组

启动虚拟机

# groupadd dinstall # useradd -g dinstall dmdba # passwd dmdba 更改用户 dmdba 的密码 。 新的密码: 重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。

2.5配置共享磁盘UUID绑定

绑定设备的UUID。创建 uuid.sh 文件,使用脚本生成配置文件。

#vi uuid.sh [root@DSC01 ~]# cat uuid.sh #!/bin/bash # 清空规则文件 curr=$(cd "$(dirname "$0")";pwd) rm -f $curr/88-dm-asmdevices.rules for i in b c d e; do # 获取SCSI ID并显示 SCSI_ID=$(/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i 2>/dev/null) if [ -n "$SCSI_ID" ]; then echo "/dev/sd$i $SCSI_ID" # 生成udev规则(修正了--device参数,去掉了空格) echo "KERNEL==\"sd?\", SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"$SCSI_ID\", SYMLINK+=\"dm/asm-disk$i\", OWNER=\"dmdba\", GROUP=\"dinstall\", MODE=\"0660\"" >> $curr/88-dm-asmdevices.rules else echo "警告: /dev/sd$i 无法获取SCSI ID" fi done echo "规则文件已生成: $curr/88-dm-asmdevices.rules"

执行uuid.sh脚本,当前目录会生成绑定配置生成 88-dm-asmdevices.rules 文件

[root@DSC01 ~]# chmod 775 uuid.sh [root@DSC01 ~]# ./uuid.sh /dev/sdb 36000c29d7688ea8916611fb0ac2f8a00 /dev/sdc 36000c296159e6d8846329fef8bb765e5 /dev/sdd 36000c292f71a963210757c4dd8824a5b /dev/sde 36000c2993018c22384c0121aa86081d9 [root@DSC01 ~]# cat 88-dm-asmdevices.rules KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c293e9b7a77a4d5adc2ac2b634c9", SYMLINK+="asmdisk/dsc_dcr", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c293942336e15a20cb54f2c6e9cb", SYMLINK+="asmdisk/dsc_vote", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29e25aaec9218440d02d331e991", SYMLINK+="asmdisk/dsc_log", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c296e52e160453f07dc9922f1867", SYMLINK+="asmdisk/dsc_data", OWNER="dmdba", GROUP="dinstall", MODE="0660" [root@DSC01 ~]#

编辑 88-dm-asmdevices.rules文件,修改SYMLINK参数指定别名

[root@DSC01 ~]# cat 88-dm-asmdevices.rules KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29202430f1d7419d860fbe63342", SYMLINK+="asmdisk/dsc_dcr", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c290c9ad73c03a434ee4651043ce", SYMLINK+="asmdisk/dsc_vote", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29200ca0624777114fb9d00591c", SYMLINK+="asmdisk/dsc_log", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29915c6af1043e392b189ee2c17", SYMLINK+="asmdisk/dsc_data", OWNER="dmdba", GROUP="dinstall", MODE="0660" [root@DSC01 ~]#

复制文件至 /etc/udev/rules.d/路径下

cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules

重新加载udev服务

/sbin/udevadm control --reload-rules /sbin/udevadm trigger --action=add /sbin/udevadm trigger --type=devices --action=change

修改权限并开机自启生效

[root@DSC01 rules.d]# chown -R dmdba:dinstall /dev/asm* [root@DSC01 rules.d]# [root@DSC01 rules.d]# ll /dev/asmdisk/* lrwxrwxrwx 1 dmdba dinstall 6 8月 19 21:58 /dev/asmdisk/dsc_data -> ../sde lrwxrwxrwx 1 dmdba dinstall 6 8月 19 21:58 /dev/asmdisk/dsc_dcr -> ../sdb lrwxrwxrwx 1 dmdba dinstall 6 8月 19 21:58 /dev/asmdisk/dsc_log -> ../sdd lrwxrwxrwx 1 dmdba dinstall 6 8月 19 21:58 /dev/asmdisk/dsc_vote -> ../sdc [root@node11 rules.d]# echo "chown -R dmdba:dinstall /dev/asm*" >>/etc/rc.local [root@DSC01 ~]# chmod +x /etc/rc.local [root@DSC01 ~]# systemctl daemon-reload [root@DSC01 ~]# systemctl enable --now rc-local [root@DSC01 rules.d]# systemctl status rc-local ● rc-local.service - /etc/rc.d/rc.local Compatibility Loaded: loaded (/usr/lib/systemd/system/rc-local.service; enabled-runtime; vendor preset> Active: active (exited) since Wed 2026-08-19 21:57:57 CST; 10min ago Docs: man:systemd-rc-local-generator(8) Process: 1280 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS) Tasks: 0 Memory: 0B CGroup: /system.slice/rc-local.service 8月 19 21:57:57 DSC01 systemd[1]: Starting /etc/rc.d/rc.local Compatibility... 8月 19 21:57:57 DSC01 systemd[1]: Started /etc/rc.d/rc.local Compatibility.

看到 active (exited) 就说明开机自启配置成功
DSC02也重复上述配置。

至此,磁盘共享磁盘操作执行完毕,可以进入DMDSC搭建步骤。

关机,拍快照,准备安装!!!

三、安装数据库

在两台虚拟机上分别安装数据库软件,只安装软件即可,不需要初始化实例!!!
具体安装步骤请参考我的上一篇文章:

https://eco.dameng.com/community/training/4ebb36b038939b5607304c57ccf4fbdd

四、基于DMASM的DMDSC

1.目录规划

两台机器都要做。

使用 dmdba 用户创建用于 DSC 环境搭建的目录:/home/dmdba/dmdsc。

DM 执行码和工具存放于目录:/home/dmdba/dmdsc/bin。

配置文件存放于目录:

DSC01机器/home/dmdba/dmdsc/data/DSC01

DSC02机器/home/dmdba/dmdsc/data/DSC02。

DCS01

[dmdba@DSC01 ~]$ mkdir dmdsc [dmdba@DSC01 ~]$ mkdir dmdsc/bin [dmdba@DSC01 ~]$ mkdir -p dmdsc/data/DSC01 [dmdba@DSC01 ~]$

DCS02

[dmdba@DSC02 ~]$ mkdir dmdsc [dmdba@DSC02 ~]$ mkdir dmdsc/bin [dmdba@DSC02 ~]$ mkdir -p dmdsc/data/DSC02 [dmdba@DSC02 ~]$

2.准备DCR配置文件DMDCR_CFG.INI

搭建的配置文件分别存放于 DSC01 机器的/home/dmdba/dmdsc/data/DSC01 和

DSC02 机器的/home/dmdba/dmdsc/data/DSC02 下

DSC01

[dmdba@DSC01 DSC01]$ cat DMDCR_CFG.INI #全局设置 DCR_N_GRP = 3 # 定义组的数量(表示有三个组需要配置:CSS, ASM 和 DB) DCR_VTD_PATH = /dev/asmdisk/dsc_vote # 投票磁盘路径(存储集群成员状态、心跳信息和控制指 令) DCR_OGUID = 63635 # 集群对象的全局唯一标识符 #CSS组(集群同步服务)负责实例间心跳检测和状态同步,每个节点都有自己的名称、IP 地址和端口号 [GRP] DCR_GRP_TYPE = CSS # 组类型为CSS DCR_GRP_NAME = GRP_CSS # 组名称 DCR_GRP_N_EP = 2 # 组内节点数量(就是配置的节点有几个) DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数(若某节点在 DCR_GRP_DSKCHK_CNT(默认60秒)内未 更新心跳,DMCSS标记其为故障节点,触发故障转移) [GRP_CSS] DCR_EP_NAME = CSS0 ## 节点1名称 DCR_EP_HOST = 10.0.0.80 # 节点IP地址(心跳地址) DCR_EP_PORT = 9836 # 节点端口号 [GRP_CSS] DCR_EP_NAME = CSS1 # 节点2名称 DCR_EP_HOST = 10.0.0.81 DCR_EP_PORT = 9837 #ASM组(存储管理组)管理共享存储设备,DCR_EP_SHM_KEY两个节点不能一样,DCR_EP_PORT不同节点可 以用一样的 [GRP] DCR_GRP_TYPE = ASM # 组类型为ASM DCR_GRP_NAME = GRP_ASM # 组名称 DCR_GRP_N_EP = 2 # 组内节点数量 DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数 [GRP_ASM] DCR_EP_NAME = ASM0 # 节点名称(跟dmasvrmal.ini配置的实例名称一定要相同) DCR_EP_SHM_KEY = 64735 # 节点间共享内存通信的系统标识符 DCR_EP_SHM_SIZE = 10 # 共享内存大小(MB) DCR_EP_HOST = 10.0.0.80 # 节点IP地址(心跳ip) DCR_EP_PORT = 5836 # 节点端口号 DCR_EP_ASM_LOAD_PATH = /dev/asmdisk # ASM加载路径,规划的磁盘目录 [GRP_ASM] DCR_EP_NAME = ASM1 #第二个节点 DCR_EP_SHM_KEY = 54736 DCR_EP_SHM_SIZE = 10 DCR_EP_HOST = 10.0.0.81 DCR_EP_PORT = 5837 DCR_EP_ASM_LOAD_PATH = /dev/asmdisk #DB (Database Instance) 数据库实例组 [GRP] DCR_GRP_TYPE = DB ## 组类型为DB DCR_GRP_NAME = GRP_DSC # 组名称 DCR_GRP_N_EP = 2 # 组内节点数量 DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数 [GRP_DSC] DCR_EP_NAME = DSC01 # 节点名称 DCR_EP_SEQNO = 0 # 序列号 DCR_EP_PORT = 5236 # 节点端口号(这里是数据库实例组,所以端口号就是数据库的) #DCR_CHECK_PORT = 9741 # 检查端口 [GRP_DSC] DCR_EP_NAME = DSC02 #第二个节点 DCR_EP_SEQNO = 1 DCR_EP_PORT = 5236 #DCR_CHECK_PORT = 9741 [dmdba@DSC01 DSC01]$

DSC02

[dmdba@DSC02 DSC02]$ cat DMDCR_CFG.INI 
#全局设置
DCR_N_GRP = 3 # 定义组的数量(表示有三个组需要配置:CSS, ASM 和 DB)
DCR_VTD_PATH = /dev/asmdisk/dsc_vote # 投票磁盘路径(存储集群成员状态、心跳信息和控制指
令)
DCR_OGUID = 63635 # 集群对象的全局唯一标识符

#CSS组(集群同步服务)负责实例间心跳检测和状态同步,每个节点都有自己的名称、IP 地址和端口号
[GRP]
DCR_GRP_TYPE = CSS # 组类型为CSS
DCR_GRP_NAME = GRP_CSS # 组名称
DCR_GRP_N_EP = 2 # 组内节点数量(就是配置的节点有几个)
DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数(若某节点在 DCR_GRP_DSKCHK_CNT(默认60秒)内未
更新心跳,DMCSS标记其为故障节点,触发故障转移)

[GRP_CSS]
DCR_EP_NAME = CSS0 ## 节点1名称
DCR_EP_HOST = 10.0.0.80 # 节点IP地址(心跳地址)
DCR_EP_PORT = 9836 # 节点端口号

[GRP_CSS]
DCR_EP_NAME = CSS1 # 节点2名称
DCR_EP_HOST = 10.0.0.81
DCR_EP_PORT = 9837

#ASM组(存储管理组)管理共享存储设备,DCR_EP_SHM_KEY两个节点不能一样,DCR_EP_PORT不同节点可
以用一样的
[GRP]
DCR_GRP_TYPE = ASM # 组类型为ASM
DCR_GRP_NAME = GRP_ASM # 组名称
DCR_GRP_N_EP = 2 # 组内节点数量
DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数

[GRP_ASM]
DCR_EP_NAME = ASM0 # 节点名称(跟dmasvrmal.ini配置的实例名称一定要相同)
DCR_EP_SHM_KEY = 64735 # 节点间共享内存通信的系统标识符
DCR_EP_SHM_SIZE = 10 # 共享内存大小(MB)
DCR_EP_HOST = 10.0.0.80 # 节点IP地址(心跳ip)
DCR_EP_PORT = 5836 # 节点端口号
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk # ASM加载路径,规划的磁盘目录

[GRP_ASM]
DCR_EP_NAME = ASM1 #第二个节点
DCR_EP_SHM_KEY = 54736
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 10.0.0.81
DCR_EP_PORT = 5837
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk

#DB (Database Instance) 数据库实例组
[GRP]
DCR_GRP_TYPE = DB ## 组类型为DB
DCR_GRP_NAME = GRP_DSC # 组名称
DCR_GRP_N_EP = 2 # 组内节点数量
DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数

[GRP_DSC]
DCR_EP_NAME = DSC01 # 节点名称
DCR_EP_SEQNO = 0 # 序列号
DCR_EP_PORT = 5236 # 节点端口号(这里是数据库实例组,所以端口号就是数据库的)
#DCR_CHECK_PORT = 9741 # 检查端口

[GRP_DSC]
DCR_EP_NAME = DSC02 #第二个节点
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
#DCR_CHECK_PORT = 9741
[dmdba@DSC02 DSC02]$ 

3.DMASMCMD 工具初始化所有磁盘

只需在DSC01节点初始化所有盘

[dmdba@DSC01 bin]$ ./dmasmcmd dmasmcmd V8 ASM>create dcrdisk '/dev/asmdisk/dsc_dcr' 'dcr' [INFO]The ASM initialize dcrdisk /dev/asmdisk/dsc_dcr to name DMASMdcr Used time: 40.280(ms). ASM>create votedisk '/dev/asmdisk/dsc_vote' 'vote' [INFO]The ASM initialize votedisk /dev/asmdisk/dsc_vote to name DMASMvote Used time: 39.859(ms). ASM>create asmdisk '/dev/asmdisk/dsc_log' 'log' [INFO]The ASM initialize asmdisk /dev/asmdisk/dsc_log to name DMASMlog Used time: 46.246(ms). ASM>create asmdisk '/dev/asmdisk/dsc_data' 'data' [INFO]The ASM initialize asmdisk /dev/asmdisk/dsc_data to name DMASMdata Used time: 41.566(ms).

#将 dcr 磁盘格式化为集群注册表磁盘,使用 dmdcr_cfg.ini 文件中的配置初始化

#注意配置文件的路径/home/dmdba/config/dmdcr_cfg.ini,密码要有大小写和特殊符号且>=8位

SM>init dcrdisk '/dev/asmdisk/dsc_dcr' from '/home/dmdba/dmdsc/data/DSC01/DMDCR_CFG.INI' identified by 'Dameng@8888' [INFO]DG 126 alloc extent for inode (0, 0, 1) [INFO]DG 126 alloc 4 extents for 0xfe000002 (0, 0, 2)->(0, 0, 5) Used time: 269.609(ms).

#将投票磁盘初始化,用于集群心跳仲裁;

ASM>init votedisk '/dev/asmdisk/dsc_vote' from '/home/dmdba/dmdsc/data/DSC01/DMDCR_CFG.INI' [INFO]DG 125 alloc extent for inode (0, 0, 1) [INFO]DG 125 alloc 4 extents for 0xfd000002 (0, 0, 2)->(0, 0, 5) Used time: 75.222(ms).

两个节点都去检查验证是否设置成功

ASM>listdisks /dev/asmdisk [/dev/asmdisk/dsc_data]: Unused ASM disk, name:[DMASMdata], size:[10207M], UUID:[UNKNOWN] [/dev/asmdisk/dsc_vote]: Used ASM disk, name:[DMASMvote], size:[1024M], group_id:[125], disk_id:[0], UUID:[UNKNOWN] [/dev/asmdisk/dsc_dcr]: Used ASM disk, name:[DMASMdcr], size:[1024M], group_id:[126], disk_id:[0], UUID:[UNKNOWN] [/dev/asmdisk/dsc_log]: Unused ASM disk, name:[DMASMlog], size:[5087M], UUID:[UNKNOWN] Used time: 10.010(ms). ASM>

4.配置ASM的MAL系统配置文件

1.准 备 DMASM 的 MAL 配置文件 DMASVRMAL.INI ,保存到 DSC01 的/home/dmdba/dmdsc/data/DSC01 下(两个节点都需要配置,并且内容完全相同),用于dmasm节点之间通信

DSC01

[dmdba@DSC01 DSC01]$ pwd /home/dmdba/dmdsc/data/DSC01 [dmdba@DSC01 DSC01]$ cat DMASVRMAL.INI [MAL_INST1] MAL_INST_NAME= ASM0 MAL_HOST= 10.0.0.80 MAL_PORT= 4836 [MAL_INST2] MAL_INST_NAME= ASM1 MAL_HOST= 10.0.0.81 MAL_PORT= 4837

2.为 DSC02 配置 DMASVRMAL.INI,和 DSC01 的 DMASVRMAL.INI 内容完全一样。

保存到DSC02 的/home/dmdba/dmdsc/data/DSC02 下

DSC02

[dmdba@DSC02 DSC02]$ pwd /home/dmdba/dmdsc/data/DSC02 [dmdba@DSC02 DSC02]$ cat DMASVRMAL.INI [MAL_INST1] MAL_INST_NAME= ASM0 MAL_HOST= 10.0.0.80 MAL_PORT= 4836 [MAL_INST2] MAL_INST_NAME= ASM1 MAL_HOST= 10.0.0.81 MAL_PORT= 4837

5.配置DCR配置启动文件

[dmdba@DSC01 DSC01]$ cat DMDCR.INI DMDCR_PATH = /dev/asmdisk/dsc_dcr #DCR 磁盘的路径,用于存储集群的元数据信息 DMDCR_MAL_PATH = /home/dmdba/dmdsc/data/DSC01/DMASVRMAL.INI #指定 MAL配置文件的路径 DMDCR_SEQNO = 0 #当前节点在集群中的序列号,每个节点唯一 DMDCR_ASM_RESTART_INTERVAL = 0 #ASM 服务故障后自动重启的间隔,0表示不重启 DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI #启动 ASM 服务 #DB 重启参数,命令行方式启动 DMDCR_DB_RESTART_INTERVAL = 0 #数据库实例故障后自动重启的间隔,0为不重启 DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dmdsc/data/DSC01/DSC01_conf/dm.ini dcr_ini=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI [dmdba@DSC01 DSC01]$ pwd /home/dmdba/dmdsc/data/DSC01 [dmdba@DSC01 DSC01]$
[dmdba@DSC02 DSC02]$ pwd /home/dmdba/dmdsc/data/DSC02 [dmdba@DSC02 DSC02]$ cat DMDCR.INI DMDCR_PATH = /dev/asmdisk/dsc_dcr #DCR 磁盘的路径,用于存储集群的元数据信息 DMDCR_MAL_PATH = /home/dmdba/dmdsc/data/DSC02/DMASVRMAL.INI #指定 MAL配置文件的路径 DMDCR_SEQNO = 1 #当前节点在集群中的序列号,每个节点唯一 DMDCR_ASM_RESTART_INTERVAL = 0 #ASM 服务故障后自动重启的间隔,0表示不重启 DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI #启动 ASM 服务 #DB 重启参数,命令行方式启动 DMDCR_DB_RESTART_INTERVAL = 0 #数据库实例故障后自动重启的间隔,0为不重启 DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dmdsc/data/DSC02/DSC02_conf/dm.ini dcr_ini=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI

6.启动DMCSS/DMASM

1.启动DMCSS

DSC01

[dmdba@DSC01 bin]$ ./dmcss DCR_INI=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI DMCSS V8 DMCSS IS READY

DSC02

[dmdba@DSC02 bin]$ ./dmcss DCR_INI=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI DMCSS V8 DMCSS IS READY

2.启动DMASM

DSC01

[dmdba@DSC01 bin]$ ./dmasmsvr DCR_INI=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI ASM SELF EPNO:0 DMASMSVR V8 dmasmsvr task worker thread startup the ASM server is Ready. check css cmd: START NOTIFY, cmd_seq: 46, code: 0 check css cmd: EP START, cmd_seq: 47, code: 0 ASM Control Node EPNO:0 [WARNING]Decode asmdisk device fail, sig:1751483255, disk_id:65535, group_id:65535. [WARNING]Decode asmdisk device fail, sig:1751483255, disk_id:65535, group_id:65535. check css cmd: EP OPEN, cmd_seq: 52, code: 0 check css cmd: EP REAL OPEN, cmd_seq: 55, code: 0

DSC02

[dmdba@DSC02 bin]$ ./dmasmsvr DCR_INI=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI ASM SELF EPNO:1 DMASMSVR V8 dmasmsvr task worker thread startup the ASM server is Ready. invalid command. check css cmd: EP START, cmd_seq: 49, code: 0 ASM Control Node EPNO:0 [WARNING]Decode asmdisk device fail, sig:1751483255, disk_id:65535, group_id:65535. [WARNING]Decode asmdisk device fail, sig:1751483255, disk_id:65535, group_id:65535.

7.创建ASM磁盘组

只在集群的主节点DSC01,打开新的终端使用 dmasmtool 工具创建 DMASM 磁盘组

[dmdba@DSC01 ~]$ cd $DM_HOME/bin [dmdba@DSC01 bin]$ ./dmasmtool DCR_INI=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI dmasmtool V8 ASM>create diskgroup 'dmdata' asmdisk '/dev/asmdisk/dsc_data' Used time: 55.108(ms). ASM>create diskgroup 'dmlog' asmdisk '/dev/asmdisk/dsc_log' Used time: 54.008(ms). ASM>

在2节点DSC02上验证

[dmdba@DSC02 bin]$ ./dmasmtool DCR_INI=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI dmasmtool V8 ASM>ls + disk groups total [4]...... NO.1 name: dmdata NO.2 name: dmlog NO.3 name: VOTE NO.4 name: DCR Used time: 4.493(ms). ASM>

8.准备DMINIT.INI,初始化数据库

在 DSC01主节点机 器 上 准 备 DMINIT.INI 配 置 文 件 , 保 存 到

/home/dmdba/dmdsc/data/DSC01 目录下

[dmdba@DSC01 DSC01]$ cat DMINIT.INI DB_NAME = dsc #初始化数据库名称 SYSTEM_PATH = +dmdata/data #初始化数据库存储的路径,asm磁盘 SYSTEM = +dmdata/data/dsc/system.dbf #SYSTEM表空间路径 SYSTEM_SIZE = 128 #system表空间大小 ROLL = dmdata/data/dsc/roll.dbf #roll表空间路径 ROLL_SIZE = 128 #大小 MAIN = +dmdata/data/dsc/main.dbf #main表空间 MAIN_SIZE = 128 CTL_PATH = +dmdata/data/dsc/dm.ctl #控制文件 LOG_SIZE = 256 DCR_PATH = /dev/asmdisk/dsc_dcr #dcr磁盘路径 DCR_SEQNO = 0 AUTO_OVERWRITE = 2 PAGE_SIZE = 16 #页大小 EXTENT_SIZE = 16 #簇大小 CASE_SENSITIVE = 0 #大小写敏感 CHARSET = 1 #字符集:0是18030;1是UTF8 SYSDBA_PWD = Dameng@8888 #密码 SYSAUDITOR_PWD = Dameng@8888 [DSC01] #名字跟dmcr_cfg.in的DB组中的DCR_EP_NAME名字保持一致 CONFIG_PATH = /home/dmdba/dmdsc/data/DSC01/DSC01_conf PORT_NUM = 5236 MAL_HOST = 10.0.0.80 MAL_PORT = 6537 #给数据库实例使用,不要和DMASVRMAL.INI的MAL一样 LOG_PATH = +dmlog/log/DSC01_log1.log #日志文件路径 LOG_PATH = +dmlog/log/DSC01_log2.log [DSC02] CONFIG_PATH = /home/dmdba/dmdsc/data/DSC02/DSC02_conf PORT_NUM = 5236 MAL_HOST = 10.0.0.81 MAL_PORT = 6537 LOG_PATH = +dmlog/log/DSC02_log1.log LOG_PATH = +dmlog/log/DSC02_log2.log [dmdba@DSC01 DSC01]$

配置完成后,就在该节点(node01)上初始化实例:

[dmdba@DSC01 bin]$ ./dminit control=/home/dmdba/dmdsc/data/DSC01/DMINIT.INI dminit V8 db version: 0x7000d file dm.key not found, use default license! License will expire on 2027-07-07 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL ...... create dm database success.

验证

[dmdba@DSC01 bin]$ ./dmasmtool DCR_INI=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI dmasmtool V8 ASM>ls +dmdata/data/dsc dir : bak file : dm.ctl dir : ctl_bak file : system.dbf file : dm_service.prikey dir : prikey_bak file : main.dbf file : roll.dbf dir : HMAIN total count 9. Used time: 56.452(ms)

初始化完成后会在 init 控制文件配置的目录(config_path参数配置的目录)下生成 2 个实例的配置文件

DSC01

image.png

需要手动把DSC02的conf文件拷贝到DSC02

[dmdba@DSC01 DSC02]$ scp -r /home/dmdba/dmdsc/data/DSC02/DSC02_conf/* 10.0.0.81:/home/dmdba/dmdsc/data/DSC02/DSC02_conf/

image.png

9.启动数据库

一、启动数据库

DSC01

[dmdba@DSC01 bin]$ ./dmserver /home/dmdba/dmdsc/data/DSC01/DSC01_conf/dm.ini dcr_ini=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI

DSC02

[dmdba@DSC02 bin]$ ./dmserver /home/dmdba/dmdsc/data/DSC02/DSC02_conf/dm.ini dcr_ini=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI

当数据库提示“SYSTEM IS READY"时,表明数据库已经open了。

image.png

二、验证集群信息

[dmdba@DSC01 ~]$ cd $DM_HOME/bin [dmdba@DSC01 bin]$ ./disql disql V8 用户名:SYSDBA 密码: 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 34.598(ms) SQL> select user; 行号 USER ---------- ------ 1 SYSDBA 已用时间: 0.909(毫秒). 执行号:601. SQL> select * from v$dsc_ep_info; 行号 EP_NAME EP_SEQNO EP_GUID EP_TIMESTAMP EP_MODE ---------- ------- ----------- -------------------- -------------------- ------------ EP_STATUS --------- 1 DSC01 0 2461615 2461651 Control Node OK 2 DSC02 1 2001668 2001697 Normal Node OK

三、启动数据库中遇到的错误

问题1:

启动过程中DSC02提示【BUFFER]参数不一致

parameter[BUFFER] is not same between DSC instances in memory, local ep[1] value[2000], remote ep[0] value[4000]! hpc_ini_info_check, local ep's ini value is not same with remote ep[0] in memory, need to modify local dm.ini manually and restart local ep!

image.png

解决:

1.DSC01和DSC02的dm.ini文件中BUFFER确实不一样,确认是否一样。

2.采用虚拟机测试,虚拟机cpu、内存都很低,可以适当降低两台节点dm.ini的某些参数

参考如下:

MEMORY_TARGET=384 BUFFER=192 CACHE_POOL_SIZE=16 HUGE_BUFFER=0

问题2:

roll.dbf缺失

image.png

解答:

1.roll.dbf缺失,可能是DMDCR.INI文件中roll文件的路径拼写有误,此例中参考
image.png
2.roll.dbf缺失可能是初始化数据库的时候中间失败,需要清理环境后重新初始化数据库,步骤如下。

清理环境

1.清空数据库目录(DSC01执行)

cd /dmdbms/bin ./dmasmtool DCR_INI=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI # 递归删除整个数据库目录(包含里面所有子目录、文件) rm -r +dmdata/data/dsc # 确认删除完毕 ls +dmdata/data

2.清空两台节点本地的CONF配置文件

#DSC01 rm -rf /home/dmdba/dmdsc/data/DSC01/DSC01_conf/* #DSC02 rm -rf /home/dmdba/dmdsc/data/DSC02/DSC02_conf/*

重新初始化dminit库(DSC01节点执行)

./dminit control=/home/dmdba/dmdsc/data/DSC01/DMINIT.INI

如果操作后还是不行,是DMDCR集群元数据缓存异常,需要删除共享磁盘,重建整套ASM磁盘(虚拟机测试场景,推荐)

10.配置启动监视器

现在我们搭建监视器,配置 DMCSSM.INI 文件。

DMCSSM 在任何机器上均可以启动,只要该台机器和 DMDSC 的真实机器网络是相通的,就可以监控 DMDSC 集群信息。

这里我们选择在 DSC01机器上搭建监视器。/home/dmdba/dmdsc/data 目录中DMCSSM.INI 详细内容如下:

[dmdba@DSC01 data]$ cat DMCSSM.INI #和 DMDCR_CFG.INI 中的 DCR_OGUID 保持一致 CSSM_OGUID = 63635 #配置所有 CSS 的连接信息, #与 DMDCR_CFG.INI 中 CSS 配置项的 DCR_EP_HOST 和 DCR_EP_PORT 保持一致 CSSM_CSS_IP = 10.0.0.80:9836 CSSM_CSS_IP = 10.0.0.81:9837 CSSM_LOG_PATH = /home/dmdba/dmdsc/data/cssm_log #监视器日志文件存放路径 CSSM_LOG_FILE_SIZE = 32 #每个日志文件最大 32M CSSM_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间

启动监视器

[dmdba@DSC01 bin]$ ./dmcssm ini_path=/home/dmdba/dmdsc/data/DMCSSM.INI [monitor] [2026-08-19 22:13:02.688] CSS MONITOR V8 [monitor] [2026-08-19 22:13:03.962] CSS MONITOR SYSTEM IS READY. [monitor] [2026-08-19 22:13:03.967] Wait CSS Control Node choosed... [monitor] [2026-08-19 22:13:05.071] Wait CSS Control Node choosed succeed.

show查看

show

image.png

至此,基于 DMASM 的 DMDSC 已经搭建完成!!!

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服