DM 集群搭建DSC学习记录
文章目录
- [DM 集群搭建DSC学习记录](#DM 集群搭建DSC学习记录)
-
- DSC集群概述
- [一、基于 DMASM 的 DMDSC](#一、基于 DMASM 的 DMDSC)
-
- [1.1 集群规划](#1.1 集群规划)
- [1.2 创建用户](#1.2 创建用户)
- [1.3 共享存储实现](#1.3 共享存储实现)
- [1.4 搭建DSC](#1.4 搭建DSC)
-
- [1.4.1 创建 dmdcr_cfg.ini](#1.4.1 创建 dmdcr_cfg.ini)
- [1.4.2 初始化磁盘组](#1.4.2 初始化磁盘组)
- [1.4.3 配置 dmasvrmal.ini](#1.4.3 配置 dmasvrmal.ini)
- [1.4.4 配置 dmdcr.ini 文件](#1.4.4 配置 dmdcr.ini 文件)
- [1.4.5 启动 DMCSS、DMASM 服务](#1.4.5 启动 DMCSS、DMASM 服务)
- [1.4.6 创建DMASM磁盘组](#1.4.6 创建DMASM磁盘组)
- [1.4.7 创建 dminit.ini](#1.4.7 创建 dminit.ini)
- [1.4.8 配置 dmarch.ini 文件](#1.4.8 配置 dmarch.ini 文件)
- [1.4.9 启动 DMSERVER 服务](#1.4.9 启动 DMSERVER 服务)
- [1.4.10 注册 CSS、ASM、DMSERVER 后台服务](#1.4.10 注册 CSS、ASM、DMSERVER 后台服务)
- [1.4.11 配置监视器](#1.4.11 配置监视器)
- 二、数据库其他配置
-
- [2.1 设置 core 路径](#2.1 设置 core 路径)
- [2.2 开启 SQL 日志](#2.2 开启 SQL 日志)
- [2.3 调整redo](#2.3 调整redo)
- [2.4 创建 dm_svc.conf](#2.4 创建 dm_svc.conf)
- [2.5 常用的试图](#2.5 常用的试图)
大家想学习达梦数据库或者解决报错问题,可以去达梦数据库社区(https://eco.dameng.com)
DSC集群概述

DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件,这些文件保存在共享存储上。每个节点有自己独立的联机日志和归档日志,其中联机日志保存在共享存储上,归档日志可以保存在本地存储上也可以保存在共享存储上。
DMDSC 集群主要由数据库和数据库实例、共享存储、DMASM 或 DMASM 镜像、本地存储、 通信网络、集群控制软件 DMCSS、集群监视器 DMCSSM 组成。
一、基于 DMASM 的 DMDSC
1.1 集群规划
一个典型的基于 DMASM 的 DMDSC 一般具备两个 DMDSC 节点。使用块设备的真实物理磁盘做共享存储,并使用 DMASM 来管理块设备 。

存储方面:
①两台服务器都连接到同一个存储上(共享存储只需要映射到服务器端 fdisk -l 可以查看到就行,不需要格式化)。
②节点 1 所在服务器单独挂存储,需要格式化好,用来备份数据等,文件系统建议使用 ext4。
DMDSC 集群为了实现多实例同时访问和修改数据,需要数据文件、控制文件和日志文件都放到共享存储上。
注意: Redo 日志盘的空间大小建议最小不少于 4G,否则会引起后面数据库启动失败等问题。
| 名称 | 拟定配置 | 分区大小 | 备注 |
|---|---|---|---|
| VOTE 磁盘 | /dev/dm/asm-dmvote | 5 GB | 记录集群成员信息,集群通过 Voting Disk 进行心跳检测,确定集群中节点的状态 |
| DCR 盘 | /dev/dm/asm-dmdcr | 5 GB | 用于存储、维护集群配置的详细信息,整个集群环境共享 DCR 配置信息 |
| Redo 日志盘 | /dev/dm/asm-dmlog | 50 GB | 用于存储数据库集群 Redo log |
| 数据盘 | /dev/dm/asm-dmdata* | 500 GB * X | 用于存放数据 |
| 归档盘 | /dev/dm/asm-dmarch | 500 GB * 2 | 用于存储数据库集群各实例的归档日志 |
一般测试环境示例中 1 块DCR磁盘、1 块 VOTE 磁盘、1 个 DMDATA 磁盘组(含 1 块磁盘)和 1 个 DMLOG 磁盘组(含 1 块磁盘),共 4 块共享磁盘即可。
本示例以两节点为例搭建 DMDSC 环境。规划将 IP 为 11 的机器作为控制节点。
| 节点机器 | 实例名称 | IP | PORT_NUM |
|---|---|---|---|
| 11 | CSS0 | 192.168.6.11 | 9836 |
| ASM0 | 5836 | ||
| DSC01 | 6636 | ||
| 12 | CSS1 | 192.168.6.12 | 9837 |
| ASM1 | 5837 | ||
| DSC02 | 6637 |
在 4 块共享磁盘中:2 块较小的磁盘(1G)用于创建 DCR、VOTE 磁盘;2 块较大的磁盘(2T)用于创建 ASM 磁盘组(数据磁盘组 DMDATA 和联机日志磁盘组 DMLOG)。
| 项目 | A 机器 | B 机器 |
|---|---|---|
| 软件目录 | /opt/dsc/setup | /opt/dsc/setup |
| 安装目录 | /opt/dsc/dmdbms | /opt/dsc/dmdbms |
| 配置文件目录 | /opt/dsc/config | /opt/dsc/config |
| 备份目录 | /opt/dsc/bak | /opt/dsc/bak |
1.2 创建用户
两个节点node1,node2都需要创建
sql
# 创建用户组和用户
groupadd dinstall
useradd -g dinstall dmdba
echo "Dameng123" |passwd --stdin dmdba
# 修改资源限制
vi/etc/security/limits.conf
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
1.3 共享存储实现
参考文章:Linux环境下实现SCSI磁盘共享的详细教程 - OSCHINA - 开源 × AI · 开发者生态社区
Linux下搭建iSCSI实现共享存储。
iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的、可以在IP协议的上层运行的SCSI指令集, iSCSI 的主要功能是在TCP/IP 网络上的主机系统(启动器 initiator)和存储设备(目标器 target)之间进行大量数据的封装和可靠传输过程。
iSCSI架构主要由两个部分组成:iSCSI目标(Target)和iSCSI发起者(Initiator)。
- iSCSI目标(Target):通常是存储设备的提供者,它将本地的存储设备(如磁盘、磁盘阵列等)以iSCSI的方式共享出来。
- iSCSI发起者(Initiator):是访问存储设备的客户端,它通过网络连接到iSCSI目标,并将远程存储设备挂载到本地系统上使用。
iSCSI共享存储拓扑图:

iSCSI可分享的设备类型有很多,包括镜像文件(*.img)、分区(partition)、物理硬盘、raid设备、逻辑卷等,下面我只用物理磁盘分区来进行相关测试
安装targetcli软件包,它是一个用于配置iSCSI目标的命令行工具。
sql
yum install targetcli -y
yum install -y open-iscsi
虚拟机添加一个60GB的磁盘

bash
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 190M 0 part /boot
└─sda2 8:2 0 39.8G 0 part
├─klas-root 253:0 0 38.9G 0 lvm /
└─klas-swap 253:1 0 956M 0 lvm [SWAP]
sdb 8:16 0 60G 0 disk
sr0 11:0 1 4.4G 0 rom
配置iSCSI目标端(Target)
这些命令创建了一个名为
mydisk的后端存储,一个名为mytarget的iSCSI目标,并为客户端myclient设置了访问控制。同时,将mydisk后端存储映射到目标上。
bash
systemctl start target
systemctl enable target
targetcli
# 关闭自动保存(永久生效,写到 prefs.bin)
/> set global auto_save_on_exit=false
get global auto_save_on_exit
# 进入块存储后端目录,准备把本地磁盘纳入iSCSI存储池
/> cd backstores/block
# 创建块存储别名mydisk,关联物理磁盘/dev/sdb,作为共享存储底层设备
/> create name=mydisk dev=/dev/sdb
# 切换回targetcli根目录
/> cd /
# 进入iSCSI目标配置根目录
/> cd iscsi
# 创建iSCSI服务端目标端Target,定义共享服务唯一标识IQN名称
/> create iqn.2026-05.example.com:mytarget
# 进入目标端的ACL访问控制目录,配置客户端接入权限
/> cd iqn.2026-05.example.com:mytarget/tpg1/acls
# 准入客户端IQN,仅该客户端标识可登录连接此iSCSI共享
/> create iqn.2026-05.example.com:myclient
# 进入LUN映射目录,关联后端磁盘与iSCSI目标
/> cd /iscsi/iqn.2026-05.example.com:mytarget/tpg1/luns
# 将后端mydisk存储映射为LUN0,分配给客户端作为远程磁盘使用
/> create storage_object=/backstores/block/mydisk lun=0
# 切回根目录准备保存配置
/> cd /
/> ls
o- / ....................................................................................................... [...]
o- backstores ............................................................................................ [...]
| o- block ................................................................................ [Storage Objects: 1]
| | o- mydisk ........................................................ [/dev/sdb (60.0GiB) write-thru activated]
| | o- alua ................................................................................. [ALUA Groups: 1]
| | o- default_tg_pt_gp ..................................................... [ALUA state: Active/optimized]
| o- fileio ............................................................................... [Storage Objects: 0]
| o- pscsi ................................................................................ [Storage Objects: 0]
| o- ramdisk .............................................................................. [Storage Objects: 0]
o- iscsi .......................................................................................... [Targets: 1]
| o- iqn.2026-05.example.com:mytarget ................................................................ [TPGs: 1]
| o- tpg1 ............................................................................. [no-gen-acls, no-auth]
| o- acls ........................................................................................ [ACLs: 1]
| | o- iqn.2026-05.example.com:myclient ................................................... [Mapped LUNs: 1]
| | o- mapped_lun0 .............................................................. [lun0 block/mydisk (rw)]
| o- luns ........................................................................................ [LUNs: 1]
| | o- lun0 ................................................... [block/mydisk (/dev/sdb) (default_tg_pt_gp)]
| o- portals .................................................................................. [Portals: 1]
| o- 0.0.0.0:3260 ................................................................................... [OK]
o- loopback ....................................................................................... [Targets: 0]
o- vhost .......................................................................................... [Targets: 0]
o- xen-pvscsi ..................................................................................... [Targets: 0]
/>
# 永久保存所有iSCSI配置,系统重启后配置不失效
/> saveconfig
Configuration saved to /etc/target/saveconfig.json
配置完成后,重启iSCSI服务以应用更改。
bash
sudo systemctl restart target
systemctl restart iscsid
配置客户端
客户端是需要访问共享SCSI磁盘的系统。以下是配置客户端的步骤:
bash
# 对于iSCSI客户端,需要安装iscsiadm工具
yum install -y open-iscsi
systemctl start iscsid
# 使用iscsiadm发现目标并登录
sudo iscsiadm -m discovery -t st -p <target-IP>
[root@racnode1 ~]# sudo iscsiadm -m discovery -t st -p 192.168.157.140
192.168.157.140:3260,1 iqn.2026-05.example.com:mytarget
[root@racnode1 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-12.cn.kylinos:124d39a1b86
# 去服务端添加
targetcli
cd /iscsi/iqn.2026-05.example.com:mytarget/tpg1/acls
create iqn.2019-12.cn.kylinos:124d39a1b86
cd /
saveconfig
targetcli
cd /iscsi/iqn.2026-05.example.com:mytarget/tpg1/acls
create iqn.2019-12.cn.kylinos:437273e4224
cd /
saveconfig
[root@racnode1 ~]# sudo iscsiadm -m node -T iqn.2026-05.example.com:mytarget -p 192.168.157.140 -l
Logging in to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260]
Login to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260] successful.
sudo iscsiadm -m node -T <target-IQN> -p <target-IP> -l
sudo iscsiadm -m node -T iqn.2026-05.example.com:myclient -p 192.168.157.140 -l
# 检查是否连接到目标服务器
[root@racnode1 ~]# iscsiadm -m session
tcp: [4] 192.168.157.140:3260,1 iqn.2026-05.example.com:mytarget (non-flash)
# node1上可以看到设备
[root@racnode1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 190M 0 part /boot
└─sda2 8:2 0 39.8G 0 part
├─klas-root 253:0 0 37G 0 lvm /
└─klas-swap 253:1 0 2.8G 0 lvm [SWAP]
sdb 8:16 0 60G 0 disk
sr0 11:0 1 4.4G 0 rom
# 当本节点机器重启后,会自动登录且挂载这个磁盘
[root@racnode1 ~]# iscsiadm -m node -o show | grep node.startup
node.startup = automatic
# 节点2,必须先执行发现这个步骤,再执行登录
sudo iscsiadm -m discovery -t st -p 192.168.157.140
[root@racnode2 ~]# iscsiadm -m node -T iqn.2026-05.example.com:mytarget -p 192.168.157.140 -l
Logging in to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260]
Login to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260] successful.
[root@racnode2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 190M 0 part /boot
└─sda2 8:2 0 39.8G 0 part
├─klas-root 253:0 0 37G 0 lvm /
└─klas-swap 253:1 0 2.8G 0 lvm [SWAP]
sdb 8:16 0 60G 0 disk
sr0 11:0 1 4.4G 0 rom
划存储
小于 2TB 的存储使用 fdisk 命令来划分
| 用途 | 空间规划 (总共 60GB) |
|---|---|
| sdb1 用于 dcr 信息 | 100M |
| sdb2 用于存放 vote 信息 | 100M |
| sdb3 用于存放 redo log | 20480M |
| sdb4 用于存放 data | 剩下的全部空间 |
注意:log 盘的空间大小最小不少于 4G,否则会引起后面数据启动失败等问题。
root@\~\]# fdisk /dev/sdb 1. 依次输入 n p 1 回车 +100M,完成第一块磁盘划分 2. 依次输入 n p 2 回车 +100M,完成第二块磁盘划分 3. 依次输入 n p 3 回车 +20480M,完成第三块磁盘划分 4. 依次输入 n p 回车 回车 回车,完成第四块磁盘划分 5. 输入 w 命令,将裸设备划分的设置进行保存 ```bash [root@racnode1 ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.35.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 设备不包含可识别的分区表。 创建了一个磁盘标识符为 0x2b682d08 的新 DOS 磁盘标签。 命令(输入 m 获取帮助):n 分区类型 p 主分区 (0 primary, 0 extended, 4 free) e 扩展分区 (逻辑分区容器) 选择 (默认 p):p 分区号 (1-4, 默认 1): 1 第一个扇区 (8192-125829119, 默认 8192): 最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (8192-125829119, 默认 125829119): +100M 创建了一个新分区 1,类型为"Linux",大小为 100 MiB。 命令(输入 m 获取帮助):n 分区类型 p 主分区 (1 primary, 0 extended, 3 free) e 扩展分区 (逻辑分区容器) 选择 (默认 p):p 分区号 (2-4, 默认 2): 第一个扇区 (212992-125829119, 默认 212992): 最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (212992-125829119, 默认 125829119): +100M 创建了一个新分区 2,类型为"Linux",大小为 100 MiB。 命令(输入 m 获取帮助):n 分区类型 p 主分区 (2 primary, 0 extended, 2 free) e 扩展分区 (逻辑分区容器) 选择 (默认 p):p 分区号 (3,4, 默认 3): 第一个扇区 (417792-125829119, 默认 417792): 最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (417792-125829119, 默认 125829119): +10G 创建了一个新分区 3,类型为"Linux",大小为 10 GiB。 命令(输入 m 获取帮助):n 分区类型 p 主分区 (3 primary, 0 extended, 1 free) e 扩展分区 (逻辑分区容器) 选择 (默认 e):p 已选择分区 4 第一个扇区 (21389312-125829119, 默认 21389312): 最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (21389312-125829119, 默认 125829119): 创建了一个新分区 4,类型为"Linux",大小为 49.8 GiB。 命令(输入 m 获取帮助):w 分区表已调整。 将调用 ioctl() 来重新读分区表。 正在同步磁盘。 # 节点1 [root@racnode1 ~]# partprobe /dev/sdb [root@racnode1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 190M 0 part /boot └─sda2 8:2 0 39.8G 0 part ├─klas-root 253:0 0 37G 0 lvm / └─klas-swap 253:1 0 2.8G 0 lvm [SWAP] sdb 8:16 0 60G 0 disk ├─sdb1 8:17 0 100M 0 part ├─sdb2 8:18 0 100M 0 part ├─sdb3 8:19 0 10G 0 part └─sdb4 8:20 0 49.8G 0 part sr0 11:0 1 4.4G 0 rom # 节点2 [root@racnode2 ~]# partprobe /dev/sdb [root@racnode2 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 190M 0 part /boot └─sda2 8:2 0 39.8G 0 part ├─klas-root 253:0 0 37G 0 lvm / └─klas-swap 253:1 0 2.8G 0 lvm [SWAP] sdb 8:16 0 60G 0 disk ├─sdb1 8:17 0 100M 0 part ├─sdb2 8:18 0 100M 0 part ├─sdb3 8:19 0 10G 0 part └─sdb4 8:20 0 49.8G 0 part sr0 11:0 1 4.4G 0 rom ``` 大于 2TB 的需要使用 parted 命令来 \[root@\~\]# parted /dev/sdb 1. 输入 mklabel gpt 回车,将 MBR 磁盘磁盘转换为 gpt 格式 2. 输入 mkpart primary 0 100 回车,完成第一块磁盘划分 3. 输入 mkpart primary 100 200 回车,完成第二块磁盘划分 4. 输入 mkpart primary 200 20680 回车,完成第三块磁盘划分 5. 输入 mkpart primary 20680 5498G 回车,完成第四块磁盘划分 6. 输入 quit 回车,完成磁盘划分 **方法1:直接挂载存储** 把 /dev/sdb1\~sdb4 这四个分区绑定成裸设备(raw),并给达梦数据库(dmdba)赋权,`让 DM 可以直接使用裸设备存放 OCR、Vote、Redo、Data`。 **裸设备(raw)不经过文件系统,直接读写磁盘数据库(Oracle/DM)用裸设备性能更高、更少 IO 损耗** 作用: 把 sdb1 映射成 /dev/raw/raw1 把 sdb2 映射成 /dev/raw/raw2 把 sdb3 映射成 /dev/raw/raw3 把 sdb4 映射成 /dev/raw/raw4 ```bash # A 机器、B 机器依次修改: [root@~]# vi /etc/udev/rules.d/70-persistent-ipoib.rules ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N" ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N" ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N" ACTION=="add", KERNEL=="sdb4", RUN+="/bin/raw /dev/raw/raw4 %N" ACTION=="add", KERNEL=="raw[1-4]", OWNER="dmdba", GROUP="dinstall", MODE="660" [root@racnode1 ~]# ll /dev/raw/raw* crw-rw---- 1 dmdba dinstall 162, 1 5月 11 09:52 /dev/raw/raw1 crw-rw---- 1 dmdba dinstall 162, 2 5月 11 09:52 /dev/raw/raw2 crw-rw---- 1 dmdba dinstall 162, 3 5月 11 09:52 /dev/raw/raw3 crw-rw---- 1 dmdba dinstall 162, 4 5月 11 09:52 /dev/raw/raw4 crw-rw---- 1 root disk 162, 0 5月 11 09:52 /dev/raw/rawctl ``` [root@~]# partprobe /dev/sdb udevadm trigger --type=devices --action=change udevadm control --reload-rules blockdev --getsize64 /dev/raw/raw* for dev in /dev/raw/raw{1..4}; do size=$(blockdev --getsize64 $dev) size_gb=$(numfmt --to=iec --suffix=B $size) echo "$dev : $size_gb" done /dev/raw/raw1 : 100MB /dev/raw/raw2 : 100MB /dev/raw/raw3 : 10GB /dev/raw/raw4 : 50GB > 注意:可通过 `blockdev --getsize64 /dev/raw/raw*` 命令查看设备大小。 **方法2:多路径挂载裸设备** 有可能客户现场给提供的是多路径存储 使用命令 ll /dev/mappr 和 ll /dev/dm\*查看对应设备的信息。  ```bash [root@~]# vi /etc/udev/rules.d/70-persistent-ipoib.rules ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="3",RUN+="/bin/raw /dev/raw/raw1 %M %m" ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="4",RUN+="/bin/raw /dev/raw/raw2 %M %m" ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="5",RUN+="/bin/raw /dev/raw/raw3 %M %m" ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="6",RUN+="/bin/raw /dev/raw/raw4 %M %m" ACTION=="add",KERNEL=="raw[1-4]",OWNER="dmdba",GROUP="dinstall",MODE="660" [root@~]# partprobe /dev/mapper/mpathg [root@~]# reboot ``` > 注意:可通过 blockdev --getsize64 /dev/raw/raw\*命令查看设备大小。 #### 1.4 搭建DSC ##### 1.4.1 创建 dmdcr_cfg.ini db0 和 db1 机器均将数据库安装在 /opt/dsc/dmdbms/目录下,所有节点配置相同 ```bash vi /opt/dsc/config/dmdcr_cfg.ini [dmdba@~]# vi /opt/dsc/config/dmdcr_cfg.ini DCR_N_GRP = 3 ##集群环境有多少个 GROUP,范围:1~16 DCR_VTD_PATH = /dev/raw/raw2 ##规划为 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 = CSS0 ##CSS 节点名 DCR_EP_HOST = 192.168.6.11 ##心跳地址 DCR_EP_PORT = 11286 ##CSS 端口 [GRP_CSS] DCR_EP_NAME = CSS1 DCR_EP_HOST = 192.168.6.12 DCR_EP_PORT = 11286 [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 = ASM0 ##ASM 节点名,和 dmasvrmal 的 MAL_INST_NAME 一致 DCR_EP_SHM_KEY = 42424 ##共享内存标识 DCR_EP_SHM_SIZE = 1024 ##共享内存大小 DCR_EP_HOST = 192.168.6.11 ##心跳地址 DCR_EP_PORT = 11276 ##ASM 端口 DCR_EP_ASM_LOAD_PATH = /dev/raw [GRP_ASM] DCR_EP_NAME = ASM1 DCR_EP_SHM_KEY = 42425 DCR_EP_SHM_SIZE = 1024 DCR_EP_HOST = 192.168.6.12 DCR_EP_PORT = 11276 DCR_EP_ASM_LOAD_PATH = /dev/raw [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 = DSC0 ##实例名,和 dm.ini 的 INSTANCE_NAME 一致 DCR_EP_SEQNO = 0 ##组内序号,不能重复 DCR_EP_PORT = 5236 ##实例端口,和 dm.ini 的 PORT_NUM 一致 [GRP_DSC] DCR_EP_NAME = DSC1 DCR_EP_SEQNO = 1 DCR_EP_PORT = 5236 ``` ##### 1.4.2 初始化磁盘组 在node1节点上操作 ```bash [dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmasmcmd dmasmcmd V8 ASM>create dcrdisk '/dev/raw/raw1' 'dcr' ASM>create votedisk '/dev/raw/raw2' 'vote' ASM>create asmdisk '/dev/raw/raw3' 'LOG0' ASM>create asmdisk '/dev/raw/raw4' 'DATA0' ASM>init dcrdisk '/dev/raw/raw1' from '/opt/dsc/config/dmdcr_cfg.ini' identified by 'DCRpsd_123' ASM>init votedisk '/dev/raw/raw2' from '/opt/dsc/config/dmdcr_cfg.ini' ``` ##### 1.4.3 配置 dmasvrmal.ini 所有节点配置相同 ```bash [dmdba@~]# vi /opt/dsc/config/dmasvrmal.ini [MAL_INST0] MAL_INST_NAME = ASM0 MAL_HOST = 192.168.6.11 #心跳地址 MAL_PORT = 11266 #MAL 监听端口 [MAL_INST1] MAL_INST_NAME = ASM1 MAL_HOST = 192.168.6.12 MAL_PORT = 11266 ``` ##### 1.4.4 配置 dmdcr.ini 文件 * db0 机器配置 dmdcr.ini,dmdcr_seqno 为 0。 ```bash [dmdba@~]# vi /opt/dsc/config/dmdcr.ini DMDCR_PATH = /dev/raw/raw1 DMDCR_MAL_PATH = /opt/dsc/config/dmasvrmal.ini DMDCR_SEQNO = 0 DMDCR_AUTO_OPEN_CHECK = 111 DMDCR_ASM_TRACE_LEVEL = 2 ##DMDCR_ASM_RESTART_INTERVAL = 60 #CSS 认定 ASM 故障重启的时间 # ASM重启 ##DMDCR_ASM_STARTUP_CMD = /opt/dsc/dmdbms/bin/dmasmsvr dcr_ini=/opt/dsc/config/dmdcr.ini ##DMDCR_DB_RESTART_INTERVAL = 60 ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起 # 数据库重启 ##DMDCR_DB_STARTUP_CMD = /opt/dsc/dmdbms/bin/dmserver path=/opt/dsc/config/dsc0_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini ##DMDCR _LINK _CHECK _IP=192.168.157.140 ``` * db1 机器配置 dmdcr.ini,dmdcr_seqno 为 1。 ```bash [dmdba@~]# vi /opt/dsc/config/dmdcr.ini DMDCR_PATH = /dev/raw/raw1 DMDCR_MAL_PATH = /opt/dsc/config/dmasvrmal.ini DMDCR_SEQNO = 1 DMDCR_AUTO_OPEN_CHECK = 111 DMDCR_ASM_TRACE_LEVEL = 2 ##DMDCR_ASM_RESTART_INTERVAL = 60 #CSS 认定 ASM 故障重启的时间 # ASM重启 ##DMDCR_ASM_STARTUP_CMD = /opt/dsc/dmdbms/bin/dmasmsvr dcr_ini=/opt/dsc/config/dmdcr.ini ##DMDCR_DB_RESTART_INTERVAL = 60 ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起 # 数据库重启 ##DMDCR_DB_STARTUP_CMD = /opt/dsc/dmdbms/bin/dmserver path=/opt/dsc/config/dsc1_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini ##DMDCR _LINK _CHECK _IP=192.168.157.140 ``` 当前为手动拉起 db0 机器和 db1 机器的 ASM 和 DMSERVER 服务。待集群配置完成后,再修改为自动拉起(**删除 dmdcr.ini 中的"##"号即可**)。 ##### 1.4.5 启动 DMCSS、DMASM 服务 在 2 个节点分别启动 dmcss 命令: 两个节点启动`dmcss`,dmdba用户到数据库安装目录bin下执行 ```shell [dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmcss DCR_INI=/opt/dsc/config/dmdcr.ini & ``` 在 2 个节点分别启动`dmasmsvr`命令: ```shell [dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmasmsvr DCR_INI=/opt/dsc/config/dmdcr.ini & ``` 说明:如果 DMCSS 配置有自动拉起 dmasmsvr 的功能,可以等待 DMCSS 自动拉起 dmasmsvr 程序,不需要手动启动。 ##### 1.4.6 创建DMASM磁盘组 ```bash [dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmasmtool DCR_INI=/opt/dsc/config/dmdcr.ini ASM> create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3' ASM> create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4' ASM>ls + disk groups total [4]...... NO.1 name: DMLOG NO.2 name: DMDATA NO.3 name: VOTE NO.4 name: DCR Used time: 0.667(ms). ``` ##### 1.4.7 创建 dminit.ini ```bash ##创建 dminit.ini 文件 [dmdba@racnode1 ~]$ vi /opt/dsc/config/dminit.ini DB_NAME = dsc ##SYSDBA_PWD 和 SYSAUDITOR_PWD 为配置数据库 SYSDBA 用户和 SYSAUDITOR 用户的登录密码,需要用户自定义配置,且需保证一定的密码强度。详细参数解释可参考达梦数据库安装目录下 doc 目录中《DM8_dminit 使用手册》 SYSDBA_PWD = 'Linux123!@#' SYSAUDITOR_PWD = 'Linux123!@#' SYSTEM_PATH = +DMDATA/data SYSTEM = +DMDATA/data/dsc/SYSTEM.dbf SYSTEM_SIZE = 1024 ROLL = +DMDATA/data/dsc/ROLL.dbf ROLL_SIZE = 10000 MAIN = +DMDATA/data/dsc/MAIN.dbf MAIN_SIZE = 1024 CTL_PATH = +DMDATA/data/dsc/dm.ctl CTL_SIZE = 8 LOG_SIZE = 2048 DCR_PATH = /dev/raw/raw1 DCR_SEQNO = 0 AUTO_OVERWRITE = 1 PAGE_SIZE = 32 EXTENT_SIZE = 16 BLANK_PAD_MODE = 1 [DSC0] CONFIG_PATH = /opt/dsc/config/dsc0_config PORT_NUM = 5236 MAL_HOST = 192.168.6.11 MAL_PORT = 11246 LOG_PATH = +DMLOG/log/dsc/DSC0_LOG01.log LOG_PATH = +DMLOG/log/dsc/DSC0_LOG02.log [DSC1] CONFIG_PATH = /opt/dsc/config/dsc1_config PORT_NUM = 5236 MAL_HOST = 192.168.6.12 MAL_PORT = 11246 LOG_PATH = +DMLOG/log/dsc/DSC1_LOG01.log LOG_PATH = +DMLOG/log/dsc/DSC1_LOG02.log ##在 db0 节点执行初始化 db 命令 [dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dminit control=/opt/dsc/config/dminit.ini ##拷贝文件到 db1 节点 [dmdba@racnode1 ~]$ scp -r /opt/dsc/config/dsc1_config dmdba@192.168.6.12:/opt/dsc/config/ ``` ##### 1.4.8 配置 dmarch.ini 文件 > 没有挂归档磁盘,先不配置归档了 * db0 节点 ```shell ##修改 dm.ini [dmdba@~]# vi /opt/dsc/config/dsc0_config/dm.ini ARCH_INI = 1 ##创建 dmarch.ini [dmdba@~]# vi /opt/dsc/config/dsc0_config/dmarch.ini ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /opt/dsc/arch_0 ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 102400 [ARCHIVE_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DSC1 ARCH_INCOMING_PATH = /opt/dsc/arch_0_remote ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 102400 ``` * db1 节点 ```shell ##修改 dm.ini [dmdba@racnode2 ~]$ vi /opt/dsc/config/dsc1_config/dm.ini ARCH_INI = 1 ##创建 dmarch.ini [dmdba@racnode2 ~]$ vi /opt/dsc/config/dsc1_config/dmarch.ini ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /opt/dsc/arch_1 ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 102400 [ARCHIVE_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DSC0 ARCH_INCOMING_PATH = /opt/dsc/arch_1_remote ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 102400 ``` ##### 1.4.9 启动 DMSERVER 服务 ```bash # A 机器 [dmdba@racnode1 log]$ /opt/dsc/dmdbms/bin/dmserver /opt/dsc/config/dsc0_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini & # B机器 [dmdba@racnode1 log]$ /opt/dsc/dmdbms/bin/dmserver /opt/dsc/config/dsc1_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini & ``` ##### 1.4.10 注册 CSS、ASM、DMSERVER 后台服务 ```bash ##db0 机器 [dmdba@racnode1 log]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS [dmdba@racnode1 log]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM [dmdba@racnode1 log]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/dsc_config/DSC0/dm.ini -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC ##db1 机器 [dmdba@racnode2 ~]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS [dmdba@racnode2 ~]$/dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM [dmdba@racnode2 ~]$/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 -p DSC ``` db0 机器、db1 机器删除自启可参考以下命令。 ```bash [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 ``` ##### 1.4.11 配置监视器 ```bash ## A 机器、B 机器配置相同 [dmdba@racnode1 ~]$ vi /opt/dsc/dmdbms/bin/dmcssm.ini #和 DMDCR _CFG.INI 中的 DCR _OGUID 保持一致 CSSM_OGUID = 210715 #配置所有 CSS 的连接信息 CSSM_CSS_IP = 192.168.6.11:11286 CSSM_CSS_IP = 192.168.6.12:11286 CSSM_LOG_PATH = ../log CSSM_LOG_FILE_SIZE = 512 CSSM_LOG_SPACE_LIMIT = 2048 ``` **启动监视器** ```bash --前台启动: [dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmcssm INI_PATH=/opt/dsc/dmdbms/bin/dmcssm.ini & --后台启动: [dmdba@racnode1 ~]$/opt/dsc/dmdbms/bin/DmCSSMonitorServiceMonitor start # 查看状态 /opt/dsc/dmdbms/bin/dmcssm INI_PATH=/opt/dsc/dmdbms/bin/dmcssm.ini ``` ```txt show monitor current time:2026-05-11 14:25:53, n_group:3 =================== group[name = GRP_CSS, seq = 0, type = CSS, Control Node = 1] ======================================== DSC_MODE = FULL [CSS0] auto check = TRUE, global info: [ASM0] auto restart = FALSE [DSC0] auto restart = FALSE [CSS1] auto check = TRUE, global info: [ASM1] auto restart = FALSE [DSC1] auto restart = FALSE ep: css_time inst_name seqno port mode inst_status vtd_status is_ok active guid pid ts 2026-05-11 14:25:53 CSS0 0 11286 Normal Node OPEN WORKING OK TRUE 701449 3815 703396 2026-05-11 14:25:53 CSS1 1 11286 Control Node OPEN WORKING OK TRUE 1183397 4973 1185351 =================== 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 pid ts 2026-05-11 14:25:53 ASM0 0 11276 Control Node OPEN WORKING OK TRUE 754421 4469 756259 2026-05-11 14:25:53 ASM1 1 11276 Normal Node OPEN WORKING OK TRUE 1237511 5288 1239353 =================== 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 pid ts 2026-05-11 14:25:53 DSC0 0 5236 Control Node OPEN WORKING OK TRUE 707376 12635 707937 2026-05-11 14:25:53 DSC1 1 5236 Normal Node OPEN WORKING OK TRUE 959789 6143 960338 ================================================================================================================== ```  #### 二、数据库其他配置 ##### 2.1 设置 core 路径 ```bash ##使用 root 用户进行配置 su - root echo "kernel.core_pattern=/dm/core/core-%e-%p-%t" >> /etc/sysctl.conf sysctl -p ##使用 dmdba 用户进行测试 su - dmdba ##通过 kill -s 11 $$ 命令来验证 core 路径是否配置成功,$$表示进程号,可以选择 kill 掉 disql 的进程来测试。 kill -s 11 $$ ##检查是否有 core 生成 ll -rtl /dm/core ``` ##### 2.2 开启 SQL 日志 集群每个节点都建议开启 SQL 日志。如果内存充足(≥32G),参数 BUF_TOTAL_SIZ、BUF_SIZE 和 BUF_KEEP_CNT 建议做如下调整。 ```bash ##使用 dmdba 用户在 dm.ini 同级目录下配置 sqllog.ini 文件 vi sqllog.ini BUF_TOTAL_SIZE = 1024000 #SQLs Log Buffer Total Size(K)(1024~1024000) BUF_SIZE = 10240 #SQLs Log Buffer Size(K)(50~409600) BUF_KEEP_CNT = 20 #SQLs Log buffer keeped count(1~100) [SLOG_ALL] FILE_PATH = /dm/dmsqllog #根据实际配置 PART_STOR = 0 SWITCH_MODE = 2 SWITCH_LIMIT = 512 #根据实际配置 ASYNC_FLUSH = 1 FILE_NUM = 1024 #根据实际配置 ITEMS = 0 SQL_TRACE_MASK = 2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:22:24:25:26:27:28:29 MIN_EXEC_TIME = 100 USER_MODE = 2 USERS = ##登录数据库执行以下命令动态修改 SVR_LOG=1 开启 SQL 日志 call SP_SET_PARA_VALUE(1,'SVR_LOG',1); ``` ##### 2.3 调整redo ```sql --检查 redo 设置大小 select rlog_size/1024/1024 from v$rlogfile; --修改 redo 可参考如下命令: alter database resize logfile 'DMDB01.log' to 2048; alter database resize logfile 'DMDB02.log' to 2048; ``` ##### 2.4 创建 dm_svc.conf 以 2 节点 DSC 集群为例,配置 `dm_svc.conf `文件如下 ```bash [root@~]# vi /etc/dm_svc.conf ##以下仅供参考,具体按实际需求配置 TIME_ZONE=(+8:00) # 客户端时区,东八区 LANGUAGE=(cn) # 客户端语言,中文 DSC1=(192.168.6.11:5236,192.168.6.12:5236) # DSC1集群节点列表 [DSC1] LOGIN_ENCRYPT=(0) # 登录密码不加密 SWITCH_TIME=(20) # 故障最大切换次数 SWITCH_INTERVAL=(2000) # 切换间隔(毫秒) [dmdba@racnode1 ~]$ disql SYSDBA/'"Linux123!@#"'@DSC1 服务器[192.168.6.11:5236]:处于普通打开状态 登录使用时间 : 4.416(ms) disql V8 SQL> ``` ##### 2.5 常用的试图 查看DSC节点实例信息 ```bash # 查看DSC节点实例信息 SQL> select * from V$DSC_EP_INFO; 行号 EP_NAME EP_SEQNO EP_GUID EP_TIMESTAMP EP_MODE EP_STATUS ---------- ------- ----------- -------------------- -------------------- ------------ --------- 1 DSC0 0 707376 711088 Control Node OK 2 DSC1 1 959789 963489 Normal Node OK ``` 显示全局活动的事务锁信息,登录任意节点查询得到的结果一致。 ```bash SQL> select * from V$DSC_LOCK; 行号 EP_SEQNO ADDR TRX_ID LTYPE LMODE ---------- ----------- -------------------- -------------------- ------ ----- BLOCKED TABLE_ID ROW_IDX IGN_FLAG ----------- -------------------- -------------------- ----------- 1 0 139897433353408 24684 OBJECT IS 0 150994944 0 1 2 0 139814513969032 24684 OBJECT IS 0 150994945 0 1 ``` 显示 DMDSC 中所有节点活动事务相关的信息 ```bash SQL> select * from V$DSCIDS; 行号 EPSEQ MIN_ACTIVE_ID NEXT_ID N_ACTIVE ---------- ----------- -------------------- -------------------- ----------- MAX_CMT_LSN MIN_CMT_TID MIN_LAST_CMT_LSN -------------------- -------------------- -------------------- NOTIFY_VERSION -------------------- 1 0 24684 25720 1 47565 24683 47567 688 行号 EPSEQ MIN_ACTIVE_ID NEXT_ID N_ACTIVE ---------- ----------- -------------------- -------------------- ----------- MAX_CMT_LSN MIN_CMT_TID MIN_LAST_CMT_LSN -------------------- -------------------- -------------------- NOTIFY_VERSION -------------------- 2 1 12020 12021 0 47550 0 47541 1 已用时间: 2.425(毫秒). 执行号:65504. ``` 查看ASM磁盘组大小 ```bash select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP; SQL> select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP; 行号 GROUP_NAME N_DISK FREE_MB TOTAL_MB ---------- ---------- ----------- ----------- ----------- 1 DMLOG 1 2004 10207 2 DMDATA 1 38620 50963 3 VOTE 1 76 100 4 DCR 1 76 100 已用时间: 13.223(毫秒). 执行号:65505. ``` 查看ASM磁盘组大小 ```bash select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP; SQL> select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP; 行号 GROUP_NAME N_DISK FREE_MB TOTAL_MB ---------- ---------- ----------- ----------- ----------- 1 DMLOG 1 2004 10207 2 DMDATA 1 38620 50963 3 VOTE 1 76 100 4 DCR 1 76 100 已用时间: 13.223(毫秒). 执行号:65505. ```