注册
达梦数据库DSC部署及测试
专栏/技术分享/ 文章详情 /

达梦数据库DSC部署及测试

DM_394095 2026/09/30 195 0 0
摘要

达梦数据库DSC部署及测试

一、达梦数据库DSC部署

1.1 创建共享磁盘

1.1.1 命令行创建共享磁盘

需要提前创建E:\DSC_share目录,进到VMware目录执行
.\vmware-vdiskmanager.exe -c -s 15000Mb -a lsilogic -t 2 “E:\DSC_share\sharedisk.vmdk”
image.png

1.1.2 配置dmdsc0、dmdsc1两台虚拟机文件

进入文件目录,在.vmx中添加

disk.locking=“FALSE”
scsi0:1.SharedBus=“Virtual”

#disk.locking=“FALSE” 参数是设置虚拟磁盘的锁定行为。FALSE 表示禁用磁盘锁定,禁用磁盘锁定允许多个虚拟机同时访问同一个虚拟磁盘,这在一些特定的配置(例如共享磁盘集群)中是有用的。
#scsi0:1.SharedBus=“Virtual” 这个参数设置 SCSI 控制器 0 上的第 1 个设备(通常是虚拟磁盘)的共享总线行为。SharedBus=“Virtual” 表示 SCSI 总线处于虚拟共享模式,使多个虚拟机可以共享同一个 SCSI 总线上的设备。

找不到.vmx文件显示的时候打开显示后缀名

1.1.3 虚拟机添加共享磁盘

两台虚拟机新增永久磁盘,两台虚拟机操作步骤相同,步骤如下

1、点击编辑虚拟机设置
image.png
2、选择硬盘,点击添加
image.png
3、点击硬盘,点击下一步
image.png
4、选择磁盘类型,选择SCSI,点击下一步
image.png
5、选择使用现有虚拟磁盘,点击下一步
image.png
6、选择之前创建好的虚拟磁盘文件(根据自己创建的来),点击完成,最后选择保持现有格式
image.png
image.png

1.1.4、到控制节点机器中执行磁盘分区操作

开启虚拟机dmdsc0,执行fdisk -l命令查看系统新添加的磁盘信息

1、输入fdisk /dev/sdb进入划分命令
2、依次输入 n --> p–> 1–> 回车–> +1500M–> 回车,完成第一块磁盘划分
3、依次输入 n --> p–> 2–> 回车–> +4500M–> 回车,完成第二块磁盘划分
4、依次输入 n --> p–> 3–> 回车–> 回车–>回车,完成第三块磁盘划分
5、输入w,保存退出

两个节点查看fdisk -l 查询结果应都包括新分区磁盘
image.png

1.1.5、两节点修改udev规则文件

所有节点都添加并执行命令重启后生效查看

image.png

1.2 部署DM应用

本文忽略

1.3 集群组件

1.3.1 配置 DCR 初始化配置文件(主节点修改即可)

dmdcr_cfg.ini 是格式化 DCR 磁盘和 Voting 磁盘的配置文件。配置信息包括三类:集群环境全局信息、集群组信息、以及组内节点信息。使用 dmasmcmd 工具初始化共享磁盘时,可以根据 dmdcr_cfg.ini 配置文件,格式化 DCR 和 Voting Disk。

dmdcr_cfg.ini 是格式化 DCR 磁盘和 Voting 磁盘的配置文件。配置信息包括三类:集群环境全局信息、集群组信息、以及组内节点信息。使用 dmasmcmd 工具初始化共享磁盘时,可以根据 dmdcr_cfg.ini 配置文件,格式化 DCR 和 Voting Disk。

dmdba用户添加以下内容
[dmdba@localhost ~]cat dmdcr_cfg.ini
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/raw/raw2
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_EP_NAME = DMCSS0
DCR_EP_HOST = 192.168.1.100
DCR_EP_PORT = 9341
[GRP_CSS]
DCR_EP_NAME = DMCSS1
DCR_EP_HOST = 192.168.1.101
DCR_EP_PORT = 9341
[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 = DMASM0
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 20
DCR_EP_HOST = 192.168.1.100
DCR_EP_PORT = 7349
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP_ASM]
DCR_EP_NAME = DMASM1
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 20
DCR_EP_HOST = 192.168.1.101
DCR_EP_PORT = 7349
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 = 60
[GRP_DSC]
DCR_EP_NAME = DMDSC0
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
[GRP_DSC]
DCR_EP_NAME = DMDSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9742

1.3.2 创建ASM磁盘

进行初始化之前对dmdba用户进行授权/dev/raw文件。
授权需要登录root用户,dmdsc0、dmdsc1两台机器都需要授权,执行以下命令:

[root@localhost ~]# chown -R dmdba:dinstall /dev/raw
[root@localhost ~]# ll /dev/raw
total 0
crw-rw---- 1 dmdba dinstall 162, 1 Aug 29 21:28 raw1
crw-rw---- 1 dmdba dinstall 162, 2 Aug 29 21:28 raw2
crw-rw---- 1 dmdba dinstall 162, 3 Aug 29 21:28 raw3
crw-rw---- 1 dmdba dinstall 162, 0 Aug 29 21:28 rawctl

创建磁盘(dmdba用户执行)
[root@localhost ~]# su - dmdba
Last login: Sat Aug 29 21:33:58 PDT 2026 on pts/1
[dmdba@localhost ~]$ cd dmdbms/bin
[dmdba@localhost bin]$ ./dmasmcmd
dmasmcmd V8
ASM>create dcrdisk ‘/dev/raw/raw1’ ‘dcr’
[TRACE]The ASM initialize dcrdisk /dev/raw/raw1 to name DMASMdcr
Used time: 6.206(ms).
ASM>create votedisk ‘/dev/raw/raw2’ ‘vote’
[TRACE]The ASM initialize votedisk /dev/raw/raw2 to name DMASMvote
Used time: 4.531(ms).
ASM>create asmdisk ‘/dev/raw/raw3’ ‘DATA0’
[TRACE]The ASM initialize asmdisk /dev/raw/raw3 to name DMASMDATA0
Used time: 4.896(ms).
init dcrdisk ‘/dev/raw/raw1’ from '/home/dmdba/dm/dm_config/dmdcr_cfg.ini’identified by ‘Dwtest_11’
init votedisk ‘/dev/raw/raw2’ from ‘/home/dmdba/dm/dm_config/dmdcr_cfg.ini’

1.3.3 配置dmasvrmal.ini文件

su - dmdba
cat /dm8/dmdata/dmasvrmal.ini

[MAL_INST0]
MAL_INST_NAME = DMASM0
MAL_HOST = 192.168.1.100
MAL_PORT = 7239
[MAL_INST1]
MAL_INST_NAME = DMASM1
MAL_HOST = 192.168.1.101
MAL_PORT = 7239

1.3.4 配置dmdcr.ini文件

使用dmdba用户配置 DCR 启动文件,两个节点都要操作,配置如下:

DSC0:
su - dmdba
cat /dm8/dmdata/dmdcr.ini

DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/home/dmdba/dm/dm_config/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_AUTO_OPEN_CHECK = 60

DSC1:
su - dmdba
cat /dm8/dmdata/dmdcr.ini

DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/home/dmdba/dm/dm_config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 60

1.3.5 启动集群DMCSS服务程序

复制启动脚本并修改配置文件目录后启动

[dmdba@localhost bin]$ cp service_template/DmCSSService ./DmCSSService0
[dmdba@localhost bin][dmdba@localhostbin] [dmdba@localhost bin]
[dmdba@localhost bin]$ vi ./DmCSSService0
[dmdba@localhost bin]$ cat ./DmCSSService0|grep dcr
DCR_INI_PATH=/home/dmdba/dm/dm_config/dmdcr.ini
STARTUP_PARAMS="dcr_ini=\“DCR_INI_PATH\"" PS_STARTUP_PARAMS="dcr_ini=DCR_INI_PATH”
elif [ “$1” = “dcr_ini” ]
[dmdba@localhost bin]$ ./DmCSSService0 status
DmCSSService0 (pid 26787) is running.

1.3.6 启动集群DMASM服务程序

同上也是复制启动脚本并修改配置文件目录后启动

[dmdba@localhost bin]$ cp service_template/DmASMSvrService ./DmASMSvrServiceDMASM0
[dmdba@localhost bin]$ cat DmASMSvrServiceDMASM0 |grep -i dcr_ini_path=
DCR_INI_PATH=/home/dmdba/dm/dm_config/dmdcr.ini
[dmdba@localhost bin]$
[dmdba@localhost bin]$ ./DmASMSvrServiceDMASM0 status
DmASMSvrServiceDMASM0 (pid 26905) is running.

1.3.7 使用 dmasmtool 工具创建 DMASM 磁盘组

其中一个节点即可

[dmdba@localhost bin]$ ./dmasmtool dcr_ini=/home/dmdba/dm/dm_config/dmdcr.ini
dmasmtool V8
ASM>create diskgroup ‘DMDATA’ asmdisk ‘/dev/raw/raw3’
Used time: 22.603(ms).
ASM>exit

1.3.8 使用 dminit 初始化共享存储 集群数据库实例

[dmdba@localhost ~]$ cd dm_config/
[dmdba@localhost dm_config]$ vi dminit.ini
[dmdba@localhost dm_config]$ cat dminit.ini
db_name = DAMENG
system_path = +DMDATA/
system = +DMDATA/DAMENG/system.dbf
system_size = 128
roll = +DMDATA/DAMENG/roll.dbf
roll_size = 128
main = +DMDATA/DAMENG/main.dbf
main_size = 128
ctl_path = +DMDATA/DAMENG/dm.ctl
ctl_size = 8
dcr_path = /dev/raw/raw1
dcr_seqno = 0
auto_overwrite = 1
[DMDSC0]
config_path= /home/dmdba/dm/dm_config/conf0
port_num = 5236
mal_host = 192.169.1.00
mal_port = 9255
log_path = +DMDATA/dsc0_01.log
log_path = +DMDATA/dsc0_02.log
log_size = 2048
page_size= 32
extent_size=16
case_sensitive=Y
RLOG_GEN_FOR_HUGE=0
SYSDBA_PWD=Dwtest_11
SYSAUDITOR_PWD=Dwtest_11
[DMDSC1]
config_path= /home/dmdba/dm/dm_config/conf1
port_num = 5236
mal_host = 192.169.1.101
mal_port = 9266
log_path = +DMDATA/dsc1_01.log
log_path = +DMDATA/dsc1_02.log
log_size = 2048
page_size= 32
extent_size=16
case_sensitive=Y
RLOG_GEN_FOR_HUGE=0
SYSDBA_PWD=Dwtest_11
SYSAUDITOR_PWD=Dwtest_11

[root@localhost bin]# ./dminit control=/home/dmdba/dm/dm_config/dminit.ini
initdb V8
db version: 0x7000d
file dm.key not found, use default license!
License will expire on 2026-09-17
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL

log file path: +DMDATA/dsc0_01.log

log file path: +DMDATA/dsc0_02.log

log file path: +DMDATA/dsc1_01.log

log file path: +DMDATA/dsc1_02.log

write to dir [+DMDATA/DAMENG].
create dm database success. 2026-08-29 22:52:16

1.3.9 启动集群DMDSC实例

[dmdba@localhost bin]$ ./dmserver /home/dmdba/dm/dm_config/conf0/dm.ini dcr_ini=/home/dmdba/dm/dm_config/dmdcr.ini
file dm.key not found, use default license!
version info: develop
csek2_vm_t = 1448
nsql_vm_t = 328
prjt2_vm_t = 176
ltid_vm_t = 216
nins2_vm_t = 1144
nset2_vm_t = 272
ndlck_vm_t = 192
ndel2_vm_t = 768
slct2_vm_t = 352
nli2_vm_t = 200
aagr2_vm_t = 304
pscn_vm_t = 416
dist_vm_t = 992
DM Database Server 64 V8 05134284368-20250917-293539-20149 startup…
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2026-09-17

su - dmdba
cd /dm8/dminstall/bin
./disql
# 执行下面sql,查看集群信息:
select * from v$dsc_ep_info;
image.png

二、达梦数据库DSC基础命令及测试

次测试主要验证达梦DM8 DSC共享存储集群在单节点故障、实例进程异常、集群私网中断、存储服务异常等各类故障场景下的高可用容错能力,具体验证目标如下:
Tips:VMware下共享存储打快照会让共享磁盘失效出现脑裂情况

  1. 验证集群故障自动判定、节点隔离机制有效性,杜绝集群脑裂问题;
  2. 验证单节点故障后,剩余节点可正常持续对外提供数据库读写服务,保障业务不中断;
  3. 验证故障节点事务一致性,已提交数据不丢失、未提交事务自动回滚,保障数据安全;
  4. 验证客户端基于dm_svc.conf配置文件,实现故障自动重连、节点自动切换的能力;
  5. 验证故障节点修复重启后,可自动识别并加入集群,恢复双节点正常集群架构。

DSC为达梦共享存储多实例集群,对标Oracle RAC架构,多节点实例共用一套共享存储数据文件。依托DMCSS集群控制服务实现节点心跳监控与故障判定,通过VOTE表决磁盘实现磁盘心跳机制,从底层规避集群脑裂风险。

2.1 基础介绍及常用SQL命令

2.1.1 基础组件介绍

  1. DMCSS:集群控制服务,负责节点状态监控、心跳检测、故障判定与节点隔离;
  2. DMASMSVR:ASM共享存储管理服务,统一管理集群共享磁盘资源;
  3. DMSERVER:数据库实例服务,提供数据库读写服务;
  4. DMCSSM:集群监视器,用于实时查看集群节点状态、执行集群运维操作。

2.1.2 常用SQL命令

  1. 查看DSC实例运行状态
    SELECT * FROM V$DSC_INSTANCE;
  2. 查看DCR集群注册表信息
    SELECT * FROM V$DCR_INFO;
  3. 查看ASM磁盘组状态
    SELECT * FROM V$ASM_DISKGROUP;
  4. 查询集群全局所有会话
    SELECT SESS_ID,INSTANCE_ID,USER_NAME,CLNT_IP,STATE FROM GV$SESSIONS;
  5. 查询DSC全局锁及事务等待信息
    SELECT * FROM V$DSC_TRXWAIT;

2.2 高可用测试

2.2.1 基础功能测试

一致性测试:
image.png

2.2.2 高可用测试

场景1:模拟数据库实例进程宕机

测试场景:单节点dmserver数据库进程异常宕机
故障模拟:在节点0执行kill -9 79331(pid)模拟进程崩溃
预期结果:
1、集群检测到节点0故障,自动将其踢出集群
2、节点1自动接管所有连接
实际结果:
image.png
image.png
恢复验证:重启 DMDSC0 后,节点自动加入集群,状态恢复为 OPEN / WORKING,Control Node 切换为DMDSC1

场景2:模拟MAL私网中断故障(集群心跳中断)

测试场景:MAL私网终端故障
故障模拟:在节点0执行 iptables -A INPUT -s 192.168.1.101 -j DROP 阻断节点间通信
预期结果:集群检测到心跳超时低优先级的节点自动退出集群高优先级节点继续提供服务
实际结果:image.png
image.png
image.png
恢复验证 执行 iptables -D INPUT -s 192.168.1.101 -j DROP 恢复网络,节点自动加入(前提是CSS配置自动拉起ASM和DMSERVER)

场景3:模拟ASM共享存储进程异常故障

测试场景:ASM共享存储进程异常故障
故障模拟:在节点0执行 kill -9 <dmasmsvr_pid> 模拟 ASM 进程崩溃
预期结果:CSS 检测到 ASM 故障后,自动终止同节点 DB 进程故障节点被踢出集群正常节点继续提供服务
实际结果:关闭asm进程
image.png
image.png
重启asm和dsc:
image.png
image.png
恢复验证:重启 DMASM0 和 DMDSC0 后,节点重新加入集群

2.3 共享磁盘扩容测试

2.3.1 编辑/etc/udev/rules.d/99-dmraw.rules

在原来基础上新增磁盘信息。增加如下

ACTION==“add”, KERNEL==“raw5”, OWNER=“dmdba”, GROUP=“dinstall”, MODE=“660”
ACTION==“add”, KERNEL==“raw6”, OWNER=“dmdba”, GROUP=“dinstall”, MODE=“660”

执行命令生效后查看:
[root@localhost ~]# udevadm trigger --action=add
[root@localhost ~]# ll /dev/raw
image.png

2.3.2 创建磁盘并添加到新的磁盘组

2.3.2.1 初始化新增数据盘使用 dmasmcmd工具初始化磁盘,将新增的裸设备初始化为 ASM 磁盘

[root@localhost ~]$ su - dmdba
[dmdba@localhost bin]$ cd dmdbms/bin
[dmdba@localhost bin]$./dmasmcmd
ASM> create asmdisk ‘/dev/raw/raw5’ ‘DATA02’
ASM> create asmdisk ‘/dev/raw/raw6’ ‘LOG02’

2.3.2.2 将新增的 ASM 磁盘加入 ASM 磁盘组

[dmdba@ bin]$ ./dmasmtool dcr_ini=/home/config/dmdcr.ini
DMASMTOOL V8
ASM>alter diskgroup ‘DMDATA’ add asmdisk ‘/dev/raw/raw5’
ASM>alter diskgroup ‘DMLOG’ add asmdisk ‘/dev/raw/raw6’

2.3.2.3 执行lsdg操作查看到DMDATA、DMLOG磁盘组已扩容

[dmdba@localhost ~]$ dmasmtool DCR_INI=/home/dmdba/dmdsc/dmdcr.ini
DMASMTOOL V8
ASM>lsdg
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服