很多小伙伴部署完达梦 DSC 两节点集群后,会遇到业务扩容需要新增集群节点的场景。网上大部分教程只讲从零搭建 DSC,动态在线扩节点的完整实操文档比较少。本文首先演示搭建2节点DSC集群,然后进行扩容到三节点的全流程,包含前置准备、配置修改、扩节点操作、验证测试以及重点避坑,希望给做达梦集群运维的同学提供一份可参考的实战手册。
达梦数据库 DSC是达梦的共享存储集群架构,多个实例节点同时访问一套共享 ASM 磁盘,实现数据库的高可用与读写能力横向扩展。 在项目迭代、业务量上涨时,我们需要对现有 DSC 集群进行节点扩容。
**注意:**DSC 增加节点不是简单装一套数据库软件,需要修改 DCR 配置、MAL 通信、归档配置,更新集群元数据,步骤环环相扣,配置错误极易造成集群无法启动。
查看磁盘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*
| 节点 | 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(心跳) |
部署单机到2台服务器,参考单机即可
准备配置文件 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
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'
准备 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
准备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
# 新建窗口,开启服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcss DCR_INI=/home/dmdba/dmdbms/data/DSC01/dmdcr.ini
# 新建窗口,开启服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcss DCR_INI=/home/dmdba/dmdbms/data/DSC02/dmdcr.ini
# 新建窗口,开启服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmsvr DCR_INI=/home/dmdba/dmdbms/data/DSC01/dmdcr.ini
# 新建窗口,开启服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmsvr DCR_INI=/home/dmdba/dmdbms/data/DSC02/dmdcr.ini
只需要一个节点执行即可,在节点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'
只需要一个节点执行即可,在节点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
只需要一个节点执行即可,在节点1执行。
#使用dmdba执行
cd /home/dmdba/dmdbms/bin
./dminit control=/home/dmdba/dmdbms/data/DSC01/dminit.ini
初始化完成后把 /home/dmdba/dmdbms/data/DSC02 下的 DSC2_config 拷贝到另一个节点上
scp -r /home/dmdba/dmdbms/data/DSC02/* dmdba@192.168.43.21:/home/dmdba/dmdbms/data/DSC02/
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
现在我们搭建监视器,配置 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集群状态
ASM集群状态
DSC集群
集群状态正常,则进行注册服务
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
节点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
节点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
DSC集群任一节点执行,备份数据库
./disql SYSDBA/DMdata456
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/full_bak';
复制原DSC集群上的udev规则到DSC3节点,规则重载参考前文
查看udev规则
ll /etc/udev/rules.d/
在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'
使用 DIsql 登录任意一个节点执行添加日志文件操作
./disql SYSDBA/DMdata456
SQL>alter database add node logfile '+DMLOG/log/DSC3_log1.log' size 512, '+DMLOG/log/DSC3_log2.log' size 512;
拷贝DSC1_config
scp -r /home/dmdba/dmdbms/data/DSC01/DSC1_config/* dmdba@192.168.43.22:/home/dmdba/dmdbms/data/DSC03/DSC3_config
CONFIG_PATH = /home/dmdba/dmdbms/data/DSC03/DSC3_config
INSTANCE_NAME = DSC3
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
三个节点内容一致,参考原有配置,增加新节点即可
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
三个节点内容一致,参考原有配置,增加新节点即可
[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
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
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
cd /home/dmdba/dmdbms/bin
./dmasmcmd
Asm> extend dcrdisk '/dev/asmdisk/dcrdisk01' from '/home/dmdba/dmdbms/data/DSC01/dmdcr_cfg_bak.ini'
#使用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 执行成功
# 新建窗口,开启服务
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
修改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集群
ASM集群
DSC集群
控制节点创建测试数据
./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
关闭DSC1
./dmcssm dmcssm.ini
ep halt DSC.DSC1
故障处理流程
选举出新的控制节点DSC2
手动重启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]
故障节点恢复
达梦 DSC 集群动态增加节点,核心在于 DCR 磁盘元数据更新、全节点 MAL 与归档配置同步。不同于单机数据库直接部署实例,DSC 扩容需要先导出并修改集群元数据,回写 DCR 磁盘后通过监视器完成集群识别,再启动新节点整套集群服务。整个过程支持在线操作,原有集群业务不受影响,但每一步配置改动都需要覆盖全部集群节点,局部配置遗漏会直接引发通信异常、实例挂起等问题。
生产实施时一定要提前完成全库备份,并优先在测试环境完成完整演练。新节点的 udev 磁盘权限、ASM 共享识别、集群归档配置相同点和区别、ASM 实例 SHM KEY 不重复都是容易忽略的关键点,扩容结束后除验证数据一致性外,建议完成简单的故障切换测试,确认新节点能够稳定参与集群调度,再交付业务使用。
文章
阅读量
获赞
