注册
DSC集群动态增加节点
专栏/培训园地/ 文章详情 /

DSC集群动态增加节点

DM_738629 2026/09/18 72 0 0
摘要

导读:

很多小伙伴部署完达梦 DSC 两节点集群后,会遇到业务扩容需要新增集群节点的场景。网上大部分教程只讲从零搭建 DSC,动态在线扩节点的完整实操文档比较少。本文首先演示搭建2节点DSC集群,然后进行扩容到三节点的全流程,包含前置准备、配置修改、扩节点操作、验证测试以及重点避坑,希望给做达梦集群运维的同学提供一份可参考的实战手册。

前言:

达梦数据库 DSC是达梦的共享存储集群架构,多个实例节点同时访问一套共享 ASM 磁盘,实现数据库的高可用与读写能力横向扩展。 在项目迭代、业务量上涨时,我们需要对现有 DSC 集群进行节点扩容。
**注意:**DSC 增加节点不是简单装一套数据库软件,需要修改 DCR 配置、MAL 通信、归档配置,更新集群元数据,步骤环环相扣,配置错误极易造成集群无法启动。

一、 环境准备

1.磁盘规划

查看磁盘uuid
/usr/lib/udev/scsi_id --whitelisted -g -u /dev/sdb

-- 编写 udev 规则文件
vi /etc/udev/rules.d/88‑dm‑asm‑uuid.rules

KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2914296413691f048cbf81e9368",SYMLINK+="asmdisk/dcrdisk01",OWNER="dmdba",GROUP="dminstall",MODE="0660"
KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29e9d15a2ecffdf30f10021cefb",SYMLINK+="asmdisk/votedisk01",OWNER="dmdba",GROUP="dminstall",MODE="0660"
KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2959e74ca26e6bb796040ac0127",SYMLINK+="asmdisk/redodisk01",OWNER="dmdba",GROUP="dminstall",MODE="0660"
KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29b83921d7335cbbcae30de4cea",SYMLINK+="asmdisk/archdisk01",OWNER="dmdba",GROUP="dminstall",MODE="0660"
KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29eb36f14b373769d420ffdc784",SYMLINK+="asmdisk/datadisk01",OWNER="dmdba",GROUP="dminstall",MODE="0660"


重载 udev 规则,触发生效

systemctl restart systemd-udev-trigger
partprobe /dev/sdb
partprobe /dev/sdc
partprobe /dev/sdd
partprobe /dev/sde
partprobe /dev/sdf
ll /dev/sd*

image.png

2.IP规划

节点 IP地址
DSC1 192.168.43.20(业务) 192.168.233.20(心跳)
DSC2 192.168.43.121(业务) 192.168.233.21(心跳)
DSC3 (待新增) 192.168.43.22(业务) 192.168.233.22(心跳)

二、部署过程

1. 软件安装

部署单机到2台服务器,参考单机即可

2.dmdcr_cfg.ini配置

准备配置文件 DMDCR_CFG.INI 文件,保存到DSC1的/home/dmdba/dmdbms/data/DSC01。

su - dmdba
mkdir -p /home/dmdba/dmdbms/data/DSC01

cd /home/dmdba/dmdbms/data/DSC01
vi dmdcr_cfg.ini


DCR_N_GRP             = 3
DCR_VTD_PATH          = /dev/asmdisk/votedisk01
DCR_OGUID             = 20260826

[GRP]
DCR_GRP_TYPE          = CSS  
DCR_GRP_NAME          = CSS
DCR_GRP_N_EP          = 2
DCR_GRP_DSKCHK_CNT    = 60
[CSS]
DCR_EP_NAME           = CSS1
DCR_EP_HOST           = 192.168.233.20
DCR_EP_PORT           = 9341
[CSS]
DCR_EP_NAME           = CSS2
DCR_EP_HOST           = 192.168.233.21
DCR_EP_PORT           = 9341
  
[GRP]
DCR_GRP_TYPE          = ASM
DCR_GRP_NAME          = ASM
DCR_GRP_N_EP          = 2
DCR_GRP_DSKCHK_CNT    = 60
[ASM]
DCR_EP_NAME           = ASM1
DCR_EP_SHM_KEY        = 93360
DCR_EP_SHM_SIZE       = 1024
DCR_EP_HOST           = 192.168.233.20
DCR_EP_PORT           = 9351
DCR_EP_ASM_LOAD_PATH  = /dev/asmdisk
[ASM]
DCR_EP_NAME           = ASM2
DCR_EP_SHM_KEY        = 93361
DCR_EP_SHM_SIZE       = 1024
DCR_EP_HOST           = 192.168.233.21
DCR_EP_PORT           = 9351
DCR_EP_ASM_LOAD_PATH  = /dev/asmdisk
  
[GRP]
DCR_GRP_TYPE          = DB
DCR_GRP_NAME          = DSC
DCR_GRP_N_EP          = 2
DCR_GRP_DSKCHK_CNT    = 60
[DSC]
DCR_EP_NAME           = DSC1
DCR_EP_SEQNO          = 0
DCR_EP_PORT           = 5236
DCR_CHECK_PORT        = 9741  
[DSC]
DCR_EP_NAME           = DSC2
DCR_EP_SEQNO          = 1
DCR_EP_PORT           = 5236
DCR_CHECK_PORT        = 9741

3. DMASMCMD工具初始化

DSC1机器使用 DMASMCMD 工具初始化所有磁盘

su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmcmd

ASM> create dcrdisk '/dev/asmdisk/dcrdisk01' 'DCR'
ASM> create votedisk '/dev/asmdisk/votedisk01' 'VOTE'
ASM> create asmdisk '/dev/asmdisk/datadisk01' 'DMDATA01'
ASM> create asmdisk '/dev/asmdisk/redodisk01'  'DMLOG01'
ASM> create asmdisk '/dev/asmdisk/archdisk01' 'DMARCH01'
ASM> init dcrdisk '/dev/asmdisk/dcrdisk01' from '/home/dmdba/dmdbms/data/DSC01/dmdcr_cfg.ini' identified by 'DCRpsd_123'
ASM> init votedisk  '/dev/asmdisk/votedisk01' from '/home/dmdba/dmdbms/data/DSC01/dmdcr_cfg.ini'

4. 编辑dmasvrmal.ini文件

准备 DMASM 的MAL 配置文件dmasvrmal.ini,保存到集群内两个节点DSC1,DSC2

su - dmdba
cd /home/dmdba/dmdbms/data/DSC01
vi dmasvrmal.ini

MAL_CHECK_INTERVAL = 60
MAL_CONN_FAIL_INTERVAL = 60
[MAL_INST1]
MAL_INST_NAME              = ASM1
MAL_HOST                   = 192.168.233.20
MAL_PORT                   = 7236
[MAL_INST2]
MAL_INST_NAME              = ASM2
MAL_HOST                   = 192.168.233.21
MAL_PORT                   = 7236

5. 编辑dmdcr.ini文件

准备dmdcr.ini文件,保存到集群内两个节点DSC1,DSC2。

-- DSC1机器

su - dmdba
cd /home/dmdba/dmdbms/data/DSC01
vi dmdcr.ini

DMDCR_PATH = /dev/asmdisk/dcrdisk01
DMDCR_MAL_PATH=/home/dmdba/dmdbms/data/DSC01/dmasvrmal.ini
DMDCR_ASM_TRACE_LEVEL=2 
DMDCR_SEQNO=0
#ASM
DMDCR_ASM_RESTART_INTERVAL=60
#DMDCR_ASM_STARTUP_CMD=/home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/dmdbms/data/DSC01/dmdcr.ini  
#DB
DMDCR_DB_RESTART_INTERVAL=0
#DMDCR_DB_STARTUP_CMD=/home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dmdbms/data/DSC01/DSC1_config/dm.ini 
DMDCR_AUTO_OPEN_CHECK=60



-- DSC2机器

su - dmdba
cd /home/dmdba/dmdbms/data/DSC02
vi dmdcr.ini

DMDCR_PATH = /dev/asmdisk/dcrdisk01
DMDCR_MAL_PATH=/home/dmdba/dmdbms/data/DSC02/dmasvrmal.ini
DMDCR_ASM_TRACE_LEVEL=2 
DMDCR_SEQNO=1
#ASM
DMDCR_ASM_RESTART_INTERVAL=60
#DMDCR_ASM_STARTUP_CMD=/home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/dmdbms/data/DSC02/dmdcr.ini 
#DB
DMDCR_DB_RESTART_INTERVAL=0
#DMDCR_DB_STARTUP_CMD=/home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dmdbms/data/DSC02/DSC2_config/dm.ini 
DMDCR_AUTO_OPEN_CHECK=60


6. 启动DMCSS、DMASM服务程序

启动dmcss(DSC1)

# 新建窗口,开启服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcss DCR_INI=/home/dmdba/dmdbms/data/DSC01/dmdcr.ini

启动dmcss (DSC2)

# 新建窗口,开启服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcss DCR_INI=/home/dmdba/dmdbms/data/DSC02/dmdcr.ini

启动dmasm(DSC1)

# 新建窗口,开启服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmsvr DCR_INI=/home/dmdba/dmdbms/data/DSC01/dmdcr.ini

启动dmasm(DSC2)

# 新建窗口,开启服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmsvr DCR_INI=/home/dmdba/dmdbms/data/DSC02/dmdcr.ini

7. dmasmtool工具创建DMASM磁盘组

只需要一个节点执行即可,在节点1执行。

#使用dmdba执行
cd /home/dmdba/dmdbms/bin
./dmasmtool dcr_ini=/home/dmdba/dmdbms/data/DSC01/dmdcr.ini
#创建日志磁盘组
create diskgroup 'DMLOG'  asmdisk '/dev/asmdisk/redodisk01'
#创建归档磁盘组
create diskgroup 'DMARCH' asmdisk '/dev/asmdisk/archdisk01'
#创建数据磁盘组
create diskgroup 'DMDATA' asmdisk '/dev/asmdisk/datadisk01'

##如创建磁盘错误 可使用以下语句进行删除再重新创建
drop diskgroup 'DMDATA'
drop diskgroup 'DMARCH'
drop diskgroup 'DMLOG'

8. 编辑dminit.ini文件

只需要一个节点执行即可,在节点1执行。

在 DSC1机器上准备dminit.ini配置文件,保存到/home/dmdba/dmdbms/data/DSC01 目录下。

#使用dmdba执行
su - dmdba
cd /home/dmdba/dmdbms/data/DSC01
vi dminit.ini

db_name=DSC
system_path=+DMDATA/data
system=+DMDATA/data/DSC/system.dbf
system_size=128
roll=+DMDATA/data/DSC/roll.dbf
roll_size=128
main=+DMDATA/data/DSC/main.dbf
main_size=128
ctl_path=+DMDATA/data/DSC/dm.ctl
ctl_size=8
log_size=512
dcr_path=/dev/asmdisk/dcrdisk01      
dcr_seqno=0
auto_overwrite=1
CASE_SENSITIVE=0
PAGE_SIZE=32
EXTENT_SIZE=32
CHARSET=1
SYSDBA_PWD=DMdata456
SYSAUDITOR_PWD=DMdata456
[DSC1]           
config_path=/home/dmdba/dmdbms/data/DSC01/DSC1_config
port_num=5236
mal_host=192.168.233.20
mal_port=9236     
log_path=+DMLOG/log/DSC1_log01.log
log_path=+DMLOG/log/DSC1_log02.log
[DSC2]           
config_path=/home/dmdba/dmdbms/data/DSC02/DSC2_config
port_num=5236
mal_host=192.168.233.21
mal_port=9236    
log_path=+DMLOG/log/DSC2_log01.log
log_path=+DMLOG/log/DSC2_log02.log

9. 使用dminit初始化DB环境

只需要一个节点执行即可,在节点1执行。

#使用dmdba执行
cd /home/dmdba/dmdbms/bin
./dminit control=/home/dmdba/dmdbms/data/DSC01/dminit.ini

10. 拷贝文件

初始化完成后把 /home/dmdba/dmdbms/data/DSC02 下的 DSC2_config 拷贝到另一个节点上

scp -r /home/dmdba/dmdbms/data/DSC02/* dmdba@192.168.43.21:/home/dmdba/dmdbms/data/DSC02/

11. 启动数据库服务

su - dmdba
cd /home/dmdba/dmdbms/bin
--节点1
./dmserver dcr_ini=/home/dmdba/dmdbms/data/DSC01/dmdcr.ini /home/dmdba/dmdbms/data/DSC01/DSC1_config/dm.ini
--节点2
./dmserver dcr_ini=/home/dmdba/dmdbms/data/DSC02/dmdcr.ini /home/dmdba/dmdbms/data/DSC02/DSC2_config/dm.ini

12. 配置监视器文件dmcssm.ini

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

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

这里选择在 DSC1 机器上搭建监视器。

#使用dmdba执行
vi /home/dmdba/dmdbms/bin/dmcssm.ini

CSSM_OGUID = 20260826 
CSSM_CSS_IP = 192.168.233.20:9341
CSSM_CSS_IP = 192.168.233.21:9341
CSSM_LOG_PATH =/home/dmdba/dmdbms/log
CSSM_LOG_FILE_SIZE = 32 
CSSM_LOG_SPACE_LIMIT = 0

查看集群状态,监视器

#使用dmdba执行
/home/dmdba/dmdbms/bin/dmcssm INI_PATH=/home/dmdba/dmdbms/bin/dmcssm.ini
#输入以下命令查看
show

CSS集群状态

image.png

ASM集群状态

image.png

DSC集群

image.png

13. 注册服务后台启动

集群状态正常,则进行注册服务

su - root
##节点1
#注册CSS
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmcss -p CSS1 -dcr_ini /home/dmdba/dmdbms/data/DSC01/dmdcr.ini
#注册ASM
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -p ASM1 -dcr_ini /home/dmdba/dmdbms/data/DSC01/dmdcr.ini -y DmCSSServiceCSS1
#注册DMSERVER
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DSC1 -dm_ini /home/dmdba/dmdbms/data/DSC01/DSC1_config/dm.ini -dcr_ini /home/dmdba/dmdbms/data/DSC01/dmdcr.ini -y DmASMSvrServiceASM1


##节点2
#注册CSS
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmcss -p CSS2 -dcr_ini /home/dmdba/dmdbms/data/DSC02/dmdcr.ini
#注册ASM
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -p ASM2 -dcr_ini /home/dmdba/dmdbms/data/DSC02/dmdcr.ini -y DmCSSServiceCSS2
#注册DMSERVER
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DSC2 -dm_ini /home/dmdba/dmdbms/data/DSC02/DSC2_config/dm.ini -dcr_ini /home/dmdba/dmdbms/data/DSC02/dmdcr.ini -y DmASMSvrServiceASM2

14. 配置归档

节点1:

#使用dmdba执行
cd /home/dmdba/dmdbms/data/DSC01/DSC1_config
--修改配置文件
vi dm.ini
ARCH_INI=1
ALTER_MODE_STATUS=0
ENABLE_OFFLINE_TS=2
REDOS_BUF_NUM=0
REDOS_BUF_SIZE=4096
REDOS_MAX_DELAY=1800
REDOS_PARALLEL_NUM=8

--新增dmarch.ini
vi dmarch.ini

ARCH_WAIT_APPLY=0
ARCH_RESERVE_TIME=10080

[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=+DMARCH/arch_desc1
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

[ARCHIVE_REMOTE1]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC2
ARCH_INCOMING_PATH=+DMARCH/arch_desc2
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

节点2:

#使用dmdba执行
cd /home/dmdba/dmdbms/data/DSC02/DSC2_config
--修改配置文件
vi dm.ini
ARCH_INI=1
ALTER_MODE_STATUS=0
ENABLE_OFFLINE_TS=2
REDOS_BUF_NUM=0
REDOS_BUF_SIZE=4096
REDOS_MAX_DELAY=1800
REDOS_PARALLEL_NUM=8

--新增dmarch.ini
vi dmarch.ini

ARCH_WAIT_APPLY=0
ARCH_RESERVE_TIME=10080

[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=+DMARCH/arch_desc2
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

[ARCHIVE_REMOTE1]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC1
ARCH_INCOMING_PATH=+DMARCH/arch_desc1
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

15.重启数据库服务

节点1:
cd /home/dmdba/dmdbms/bin
./DmServiceDSC1 restart

节点2:
cd /home/dmdba/dmdbms/bin
./DmServiceDSC2 restart

查看归档日志:
cd /home/dmdba/dmdbms/bin
./dmasmtool dcr_ini=/home/dmdba/dmdbms/data/DSC01/dmdcr.ini

image.png

三、DSC集群增加节点

1.备份

DSC集群任一节点执行,备份数据库

./disql SYSDBA/DMdata456
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/full_bak';

2.新机配置udev

复制原DSC集群上的udev规则到DSC3节点,规则重载参考前文

查看udev规则
ll /etc/udev/rules.d/

3.备份 DMDCR_CFG_BAK.INI

在DSC1机器上使用 DMASMCMD 工具 export 出备份 DMDCR_CFG_BAK.INI

cd /home/dmdba/dmdbms/bin
./dmasmcmd
Asm> export dcrdisk '/dev/asmdisk/dcrdisk01' to '/home/dmdba/dmdbms/data/DSC01/dmdcr_cfg_bak.ini'

4.为新增节点准备日志文件

使用 DIsql 登录任意一个节点执行添加日志文件操作

./disql SYSDBA/DMdata456
SQL>alter database add node logfile '+DMLOG/log/DSC3_log1.log' size 512, '+DMLOG/log/DSC3_log2.log' size 512;

5.为新增节点准备 config_path

拷贝DSC1_config

scp -r /home/dmdba/dmdbms/data/DSC01/DSC1_config/* dmdba@192.168.43.22:/home/dmdba/dmdbms/data/DSC03/DSC3_config

修改DSC3的DM.INI 配置文件

CONFIG_PATH		= /home/dmdba/dmdbms/data/DSC03/DSC3_config
INSTANCE_NAME	= DSC3

新建dmdcr.ini配置文件

cd /home/dmdba/dmdbms/data/DSC03 
vi dmdcr.ini

DMDCR_PATH = /dev/asmdisk/dcrdisk01
DMDCR_MAL_PATH=/home/dmdba/dmdbms/data/DSC03/dmasvrmal.ini
DMDCR_ASM_TRACE_LEVEL=2 
DMDCR_SEQNO=2
#ASM
DMDCR_ASM_RESTART_INTERVAL=60
#DMDCR_ASM_STARTUP_CMD=/home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/dmdbms/data/DSC03/dmdcr.ini  
#DB
DMDCR_DB_RESTART_INTERVAL=0
#DMDCR_DB_STARTUP_CMD=/home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dmdbms/data/DSC03/DSC3_config/dm.ini 
DMDCR_AUTO_OPEN_CHECK=60

6.修改所有节点 DMASVRMAL.INI

三个节点内容一致,参考原有配置,增加新节点即可

vi dmasvrmal.ini

MAL_CHECK_INTERVAL = 60
MAL_CONN_FAIL_INTERVAL = 60
[MAL_INST1]
MAL_INST_NAME              = ASM1
MAL_HOST                   = 192.168.233.20
MAL_PORT                   = 7236
[MAL_INST2]
MAL_INST_NAME              = ASM2
MAL_HOST                   = 192.168.233.21
MAL_PORT                   = 7236
[MAL_INST3]
MAL_INST_NAME              = ASM3
MAL_HOST                   = 192.168.233.22
MAL_PORT                   = 7236

7.修改所有节点dmmal.ini

三个节点内容一致,参考原有配置,增加新节点即可

[mal_inst0]
    mal_inst_name  = DSC1
    mal_host       = 192.168.233.20
    mal_port       = 9236

[mal_inst1]
    mal_inst_name  = DSC2
    mal_host       = 192.168.233.21
    mal_port       = 9236

[mal_inst1]
    mal_inst_name  = DSC3 
    mal_host       = 192.168.233.22 
    mal_port       = 9236

8.修改dmarch.ini

DSC1节点:

ARCH_WAIT_APPLY=0
ARCH_RESERVE_TIME=10080

[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=+DMARCH/arch_desc1
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

[ARCHIVE_REMOTE1]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC2
ARCH_INCOMING_PATH=+DMARCH/arch_desc2
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

[ARCHIVE_REMOTE2]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC3
ARCH_INCOMING_PATH=+DMARCH/arch_desc3
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

DSC2节点

ARCH_WAIT_APPLY=0
ARCH_RESERVE_TIME=10080

[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=+DMARCH/arch_desc2
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

[ARCHIVE_REMOTE1]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC1
ARCH_INCOMING_PATH=+DMARCH/arch_desc1
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

[ARCHIVE_REMOTE2]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC3
ARCH_INCOMING_PATH=+DMARCH/arch_desc3
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

DSC3节点

ARCH_WAIT_APPLY=0
ARCH_RESERVE_TIME=10080

[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=+DMARCH/arch_desc3
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

[ARCHIVE_REMOTE1]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC1
ARCH_INCOMING_PATH=+DMARCH/arch_desc1
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200


[ARCHIVE_REMOTE2]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC2
ARCH_INCOMING_PATH=+DMARCH/arch_desc2
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=51200

9.修改 dmdcr_cfg_bak.ini

vi /home/dmdba/dmdbms/data/DSC01/dmdcr_cfg_bak.ini 

# the file is auto-created by system, self edit is invalid!
#DCR HDR
DCR_N_GRP              = 3
DCR_VTD_PATH           = /dev/asmdisk/votedisk01
DCR_OGUID              = 20260826
DCR_MODE               = 0

[GRP]
DCR_GRP_TYPE           = CSS
DCR_GRP_NAME           = CSS
DCR_GRP_N_EP           = 3             # 此处修改
DCR_GRP_EP_ARR         = {0,1,2}       # 此处修改
DCR_GRP_N_ERR_EP       = 0
DCR_GRP_ERR_EP_ARR     = {}
DCR_GRP_DSKCHK_CNT     = 60

[GRP]
DCR_GRP_TYPE           = ASM
DCR_GRP_NAME           = ASM
DCR_GRP_N_EP           = 3           # 此处修改
DCR_GRP_EP_ARR         = {0,1,2}     # 此处修改
DCR_GRP_N_ERR_EP       = 0
DCR_GRP_ERR_EP_ARR     = {}
DCR_GRP_DSKCHK_CNT     = 60

[GRP]
DCR_GRP_TYPE           = DB
DCR_GRP_NAME           = DSC
DCR_GRP_N_EP           = 3          # 此处修改
DCR_GRP_EP_ARR         = {0,1,2}    # 此处修改
DCR_GRP_N_ERR_EP       = 0
DCR_GRP_ERR_EP_ARR     = {}
DCR_GRP_DSKCHK_CNT     = 60

[CSS]
DCR_EP_NAME        = CSS1
DCR_EP_HOST        = 192.168.43.5
DCR_EP_PORT        = 9341

[CSS]
DCR_EP_NAME        = CSS2
DCR_EP_HOST        = 192.168.43.6
DCR_EP_PORT        = 9341

[CSS]                                 # 此处新增
DCR_EP_NAME        = CSS3
DCR_EP_HOST        = 192.168.43.7
DCR_EP_PORT        = 9341

[ASM]
DCR_EP_NAME        = ASM1
DCR_EP_SHM_KEY     = 93360
DCR_EP_SHM_SIZE    = 1024
DCR_EP_HOST        = 192.168.43.5
DCR_EP_PORT        = 9351
DCR_EP_ASM_LOAD_PATH  = /dev/asmdisk

[ASM]
DCR_EP_NAME        = ASM2
DCR_EP_SHM_KEY     = 93361
DCR_EP_SHM_SIZE    = 1024
DCR_EP_HOST        = 192.168.43.6
DCR_EP_PORT        = 9351
DCR_EP_ASM_LOAD_PATH  = /dev/asmdisk

[ASM]                                      # 此处新增
DCR_EP_NAME        = ASM3
DCR_EP_SHM_KEY     = 93362                 # DCR_EP_SHM_KEY不冲突
DCR_EP_SHM_SIZE    = 1024
DCR_EP_HOST        = 192.168.43.7
DCR_EP_PORT        = 9351
DCR_EP_ASM_LOAD_PATH  = /dev/asmdisk

[DSC]
DCR_EP_NAME        = DSC1
DCR_EP_SEQNO       = 0
DCR_EP_PORT        = 5236
DCR_CHECK_PORT     = 9741

[DSC]
DCR_EP_NAME        = DSC2
DCR_EP_SEQNO       = 1
DCR_EP_PORT        = 5236
DCR_CHECK_PORT     = 9741

[DSC]                                      # 此处新增
DCR_EP_NAME        = DSC3
DCR_EP_SEQNO       = 2
DCR_EP_PORT        = 5236
DCR_CHECK_PORT     = 9741

10.使用 DMASMCMD导入 dmdcr_cfg_bak.ini

cd /home/dmdba/dmdbms/bin
./dmasmcmd
Asm> extend dcrdisk '/dev/asmdisk/dcrdisk01' from '/home/dmdba/dmdbms/data/DSC01/dmdcr_cfg_bak.ini'

image.png

11.在dmcssm控制台执行扩展节点命令

#使用dmdba执行
/home/dmdba/dmdbms/bin/dmcssm INI_PATH=/home/dmdba/dmdbms/bin/dmcssm.ini
#输入以下命令查看
show
extend node

扩展流程

extend node
[monitor]          [2026-09-15 16:33:58.208] 执行扩展节点动作

[monitor]          [2026-09-15 16:34:00.431] 通知当前活动的CSS执行清理操作
[monitor]          [2026-09-15 16:34:01.442] 清理CSS(0)请求成功
[monitor]          [2026-09-15 16:34:02.454] 清理CSS(1)请求成功
[monitor]          [2026-09-15 16:34:02.456] 命令EXTENT NODE 执行成功

12.启动新的 DMCSS、DMASM 服务程序

# 新建窗口,开启服务
cd /home/dmdba/dmdbms/bin
./dmcss DCR_INI=/home/dmdba/dmdbms/data/DSC03/dmdcr.ini

./dmasmsvr DCR_INI=/home/dmdba/dmdbms/data/DSC03/dmdcr.ini

./dmserver dcr_ini=/home/dmdba/dmdbms/data/DSC03/dmdcr.ini /home/dmdba/dmdbms/data/DSC03/DSC3_config/dm.ini

13.查看集群状态和查询数据

修改dmcssm.ini

CSSM_OGUID = 20260826
CSSM_CSS_IP = 192.168.233.20:9341
CSSM_CSS_IP = 192.168.233.21:9341
CSSM_CSS_IP = 192.168.233.22:9341
CSSM_LOG_PATH =/home/dmdba/dmdbms/log
CSSM_LOG_FILE_SIZE = 32
CSSM_LOG_SPACE_LIMIT = 0

#使用dmdba执行
/home/dmdba/dmdbms/bin/dmcssm INI_PATH=/home/dmdba/dmdbms/bin/dmcssm.ini
#输入以下命令查看
show

CSS集群

image.png

ASM集群

image.png
DSC集群

image.png

控制节点创建测试数据

./disql SYSDBA/DMdata456@192.168.43.20

create table test(id INT);
insert into test(id) values(1);
commit;

登录其他节点查看数据

./disql SYSDBA/DMdata456@192.168.43.22:5236

image.png

14.集群切换测试

关闭DSC1

./dmcssm dmcssm.ini
ep halt DSC.DSC1

故障处理流程
image.png

选举出新的控制节点DSC2
image.png

手动重启DSC1

恢复流程

1. CSS 识别 DSC1 节点重新上报,标记该实例是故障恢复重入节点
   [DB]: 设置EP DSC1[0]为故障重加入EP

2. 通知 DSC1 实例准备执行集群重入流程
   设置命令[START NOTIFY],目标站点 DSC1[0]

3. 挂起其余业务节点工作线程
  设置命令[SUSPEND EP WORKER THREAD],目标站点 DSC2[1] 
  设置命令[SUSPEND EP WORKER THREAD],目标站点 DSC3[2]

4. 所有节点重新加载 DCR 磁盘上集群元数据,确认当前集群成员列表
   设置命令[DCR_LOAD],目标站点 DSC1[0] 
   设置命令[DCR_LOAD],目标站点 DSC2[1] 
   设置命令[DCR_LOAD],目标站点 DSC3[2]

5. 故障离线节点恢复加入
   设置命令[ERROR EP ADD],目标站点 DSC1[0]  
   设置命令[ERROR EP ADD],目标站点 DSC2[1] 
   设置命令[ERROR EP ADD],目标站点 DSC3[2]

6. 各个节点之间重建 MAL 消息接收通道,节点之间可以互相收发 redo、集群消息
    设置命令[EP RECV],目标站点 DSC2[1] 
    设置命令[EP RECV],目标站点 DSC3[2]

7. 分步启动 DSC1 实例集群层
    设置命令[EP START],目标站点 DSC1[0] 
    设置命令[EP START2],目标站点 DSC1[0] 
    设置命令[EP OPEN],目标站点 DSC1[0]

8. 恢复其他节点挂机状态
   设置命令[RESUME EP WORKER THREAD],目标站点 DSC2[1] 
   设置命令[RESUME EP WORKER THREAD],目标站点 DSC3[2]

9. 实例正式对外提供集群服务
    设置命令[EP REAL OPEN],目标站点 DSC1[0]

image.png

故障节点恢复
image.png

总结

达梦 DSC 集群动态增加节点,核心在于 DCR 磁盘元数据更新、全节点 MAL 与归档配置同步。不同于单机数据库直接部署实例,DSC 扩容需要先导出并修改集群元数据,回写 DCR 磁盘后通过监视器完成集群识别,再启动新节点整套集群服务。整个过程支持在线操作,原有集群业务不受影响,但每一步配置改动都需要覆盖全部集群节点,局部配置遗漏会直接引发通信异常、实例挂起等问题。

生产实施时一定要提前完成全库备份,并优先在测试环境完成完整演练。新节点的 udev 磁盘权限、ASM 共享识别、集群归档配置相同点和区别、ASM 实例 SHM KEY 不重复都是容易忽略的关键点,扩容结束后除验证数据一致性外,建议完成简单的故障切换测试,确认新节点能够稳定参与集群调度,再交付业务使用。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服