注册
达梦共享存储集群搭建实践
培训园地/ 文章详情 /

达梦共享存储集群搭建实践

樟树🌳 2026/08/21 170 0 0

达梦 DSC 是共享存储型多实例集群,多节点共用一套存储,所有节点均可读写,依靠 MAL 高速网络做缓存同步、DMCSS 做集群仲裁,实现性能扩展和故障高可用。
在麒麟银河系统上搭建DSC,使用一台服务器+ 4块独立裸磁盘,实现DSC的部署。
image.png

1. 系统环境准备

1.1 系统资源限制配置

# 配置limits.conf
cat >> /etc/security/limits.conf << 'EOF'
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
EOF
# 配置20-nproc.conf
cat > /etc/security/limits.d/20-nproc.conf << 'EOF'
* soft nproc 65536
EOF

1.2 内核参数调优


# 追加内核参数
cat >> /etc/sysctl.conf << 'EOF'
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
vm.overcommit_memory = 0
EOF
# 立即生效
sysctl -p

1.3 确认dmdba用户权限

# 确认dmdba已在disk组
id dmdba
# 如果不在disk组,加入
usermod -aG disk dmdba
# 验证
groups dmdba

image.png

2. UDEV绑定共享磁盘

配置 UDEV 绑定共享磁盘,是为了解决虚拟机磁盘设备名随开机识别顺序发生漂移的问题,避免 /dev/sdd、/dev/sde 这类设备名称错乱导致数据库找不到裸盘而启动失败;同时可通过 UDEV 规则永久固化裸磁盘的属主与权限为 dmdba:dinstall,无需每次开机手动修改权限,保障 dmdba 用户正常访问裸设备,也是达梦主备、DSC 集群环境下裸磁盘部署的标准配置方式。

2.1 创建UDEV规则文件

# 创建asmdisk目录
mkdir -p /dev/asmdisk
# 创建规则文件(直接用KERNEL匹配)因为VMware虚拟磁盘默认不生成SCSI WWN
cat > /etc/udev/rules.d/99-dm-disk.rules << 'EOF'
# DSC集群共享磁盘绑定(直接使用设备名)
KERNEL=="sdb", SYMLINK+="asmdisk/asmdisk1", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sdc", SYMLINK+="asmdisk/asmdisk2", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sdd", SYMLINK+="asmdisk/asmdisk3", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sde", SYMLINK+="asmdisk/asmdisk4", OWNER="dmdba", GROUP="dinstall", MODE="0660"
EOF

2.2 重载UDEV规则并验证

# 重载规则
udevadm control --reload-rules
# 触发生效
udevadm trigger
# 验证绑定结果
ls -l /dev/asmdisk/

image.png

3. DSC集群配置

3.1 创建配置文件目录

su - dmdba
# 创建DSC相关目录
mkdir -p /home/dmdba/DSC/DSC0 /home/dmdba/DSC/DSC1

3.2 创建 dmdcr_cfg.ini

dmdcr_cfg.ini 是达梦 DSC 集群核心配置文件,用来定义集群全局架构信息,描述集群节点、磁盘、投票磁盘、ASM 磁盘组等资源配置,供 DMCSS、DMASM 服务读取,完成集群环境初始化,指定节点序号、节点类型、投票盘与 ASM 磁盘标识,控制集群节点数量、投票机制与磁盘资源分配,是搭建 DSC 集群必须预先编写的配置文件,仅用于集群初始化阶段,初始化完成后修改不再生效。

cat > /home/dmdba/DSC/dmdcr_cfg.ini << 'EOF'
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/asmdisk/asmdisk2
DCR_OGUID = 210715

[GRP]
 DCR_GRP_TYPE = CSS
 DCR_GRP_NAME = GRP_CSS
 DCR_GRP_N_EP = 2
 DCR_GRP_DSKCHK_CNT = 65

[GRP_CSS]
 DCR_EP_NAME = CSS0
 DCR_EP_HOST = 192.168.140.140
 DCR_EP_PORT = 11286

[GRP_CSS]
 DCR_EP_NAME = CSS1
 DCR_EP_HOST = 192.168.140.140
 DCR_EP_PORT = 11287

[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
 DCR_EP_SHM_KEY = 42424
 DCR_EP_SHM_SIZE = 1024
 DCR_EP_HOST = 192.168.140.140
 DCR_EP_PORT = 11276
 DCR_EP_ASM_LOAD_PATH = /dev/asmdisk

[GRP_ASM]
 DCR_EP_NAME = ASM1
 DCR_EP_SHM_KEY = 42425
 DCR_EP_SHM_SIZE = 1024
 DCR_EP_HOST = 192.168.140.140
 DCR_EP_PORT = 11277
 DCR_EP_ASM_LOAD_PATH = /dev/asmdisk

[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
 DCR_EP_SEQNO = 0
 DCR_EP_PORT = 5238
 DCR_CHECK_PORT = 11256

[GRP_DSC]
 DCR_EP_NAME = DSC1
 DCR_EP_SEQNO = 1
 DCR_EP_PORT = 5239
 DCR_CHECK_PORT = 11257
EOF

3.3 创建 dmasvrmal.ini

dmasvrmal.ini 是达梦 DSC 集群 ASM 实例的 MAL 通信配置文件,专门用于各个 DMASM 服务之间的内部消息通信,配置 ASM 节点间 MAL 端口、IP 地址,实现多节点 ASM 实例的数据交互与消息同步,保障集群磁盘管理服务内部网络互通,是 DSC 环境 ASM 节点之间完成磁盘状态同步、资源协调必不可少的配置文件。

cat > /home/dmdba/DSC/dmasvrmal.ini << 'EOF'
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.140.140
MAL_PORT = 11266
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.140.140
MAL_PORT = 11267
EOF

3.4 创建节点 dmdcr.ini

dmdcr.ini 是每个节点本地的集群控制配置文件,供 DMCSS、DMASM、DMServer 读取。
它指定本节点机器的 MAL 通信地址、端口,指向全局配置dmdcr_cfg.ini文件路径,定义本地 CSS 服务、ASM 服务、数据库实例的各项本地运行参数;每个 DSC 节点都要有自己独立的 dmdcr.ini,记录当前节点编号、MAL 监听信息、日志路径等,集群启动时各个服务依靠该文件找到全局 dmdcr_cfg.ini,完成注册与启动。
区别:dmdcr_cfg.ini是全局集群架构(一套);dmdcr.ini是单节点本地配置(每节点一份)。
节点0

cat > /home/dmdba/DSC/dmdcr_DSC0.ini << 'EOF'
DMDCR_PATH = /dev/asmdisk/asmdisk1
DMDCR_MAL_PATH = /home/dmdba/DSC/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/DSC/dmdcr_DSC0.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver dcr_ini=/home/dmdba/DSC/dmdcr_DSC0.ini
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
EOF

节点1

cat > /home/dmdba/DSC/dmdcr_DSC1.ini << 'EOF'
DMDCR_PATH = /dev/asmdisk/asmdisk1
DMDCR_MAL_PATH = /home/dmdba/DSC/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/DSC/dmdcr_DSC1.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver dcr_ini=/home/dmdba/DSC/dmdcr_DSC1.ini
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
EOF

4. 初始化集群

4.1 初始化DCR和Vote磁盘

#在交互界面中依次执行
cd /home/dmdba/dmdbms/bin
# 启动dmasmcmd交互界面
./dmasmcmd
#在交互界面中依次执行
create dcrdisk /dev/asmdisk/asmdisk1 dcr
create votedisk /dev/asmdisk/asmdisk2 vote
init dcrdisk '/dev/asmdisk/asmdisk1' from '/home/dmdba/DSC/dmdcr_cfg.ini' identified by 'Zs010310'
init votedisk '/dev/asmdisk/asmdisk2' from '/home/dmdba/DSC/dmdcr_cfg.ini'
exit

4.2 启动DMCSS和DMASM服务

(需要开启4个终端,按顺序启动)

# 每个命令单独在一个新终端执行,执行后前台阻塞保持运行,不要关闭终端

# 终端1:节点0 DMCSS服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcss DCR_INI=/home/dmdba/DSC/dmdcr_DSC0.ini

# 终端2:节点0 DMASM服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmsvr DCR_INI=/home/dmdba/DSC/dmdcr_DSC0.ini

# 终端3:节点1 DMCSS服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcss DCR_INI=/home/dmdba/DSC/dmdcr_DSC1.ini
# 终端4:节点1 DMASM服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmsvr DCR_INI=/home/dmdba/DSC/dmdcr_DSC1.ini

4.3 创建ASM磁盘

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

create asmdisk '/dev/asmdisk/asmdisk4' 'LOG0' 51200
create asmdisk '/dev/asmdisk/asmdisk3' 'DATA0' 20480
exit

4.4 创建ASM磁盘组

./dmasmtool DCR_INI=/home/dmdba/DSC/dmdcr_DSC0.ini

create diskgroup 'DMLOG' asmdisk '/dev/asmdisk/asmdisk4'
create diskgroup 'DMDATA' asmdisk '/dev/asmdisk/asmdisk3'
exit

5. 初始化数据库

5.1 创建 dminit.ini

cat > /home/dmdba/DSC/dminit.ini << 'EOF'
DB_NAME = DSCDB
SYSDBA_PWD = Zs010310
SYSAUDITOR_PWD = Zs010310
SYSTEM_PATH = +DMDATA/data
SYSTEM = +DMDATA/data/SYSTEM.dbf
SYSTEM_SIZE = 1024
ROLL = +DMDATA/data/ROLL.dbf
ROLL_SIZE = 10000
MAIN = +DMDATA/data/MAIN.dbf
MAIN_SIZE = 1024
CTL_PATH = +DMDATA/data/dm.ctl
CTL_SIZE = 8
LOG_SIZE = 2048
DCR_PATH = /dev/asmdisk/asmdisk1
DCR_SEQNO = 0
AUTO_OVERWRITE = 2
PAGE_SIZE = 32
EXTENT_SIZE = 16
BLANK_PAD_MODE = 1
CHARSET = 1
[DSC0]
CONFIG_PATH = /home/dmdba/DSC/DSC0
PORT_NUM = 5238
MAL_HOST = 192.168.140.140
MAL_PORT = 8344
LOG_PATH = +DMLOG/DSC0_LOG01.log
LOG_PATH = +DMLOG/DSC0_LOG02.log
[DSC1]
CONFIG_PATH = /home/dmdba/DSC/DSC1
PORT_NUM = 5239
MAL_HOST = 192.168.140.140
MAL_PORT = 8346
LOG_PATH = +DMLOG/DSC1_LOG01.log
LOG_PATH = +DMLOG/DSC1_LOG02.log
EOF

5.2 初始化数据库

cd /home/dmdba/dmdbms/bin
./dminit control=/home/dmdba/DSC/dminit.ini

6. 启动数据库服务

# ==========节点0前台启动==========
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmserver /home/dmdba/DSC/DSC0/dm.ini dcr_ini=/home/dmdba/DSC/dmdcr_DSC0.ini

# ==========节点1前台启动==========
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmserver /home/dmdba/DSC/DSC1/dm.ini dcr_ini=/home/dmdba/DSC/dmdcr_DSC1.ini

7. 验证集群

节点0插入数据

cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Zs010310@localhost:5238
CREATE TABLE TEST_DSC (ID INT, NAME VARCHAR(50));
INSERT INTO TEST_DSC VALUES (1, 'DSC_INSERT');
COMMIT;
SELECT * FROM TEST_DSC;
EXIT;

节点1查询验证

cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Zs010310@localhost:5239
SELECT * FROM TEST_DSC;
EXIT;

image.png

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服