注册
达梦 DM8 两节点 DSC 集群搭建流程
专栏/技术分享/ 文章详情 /

达梦 DM8 两节点 DSC 集群搭建流程

文橘本可 2026/07/23 73 0 0
摘要

环境说明

  • 环境特点:一台物理机 + 两个 IP + 四块真实裸设备,完全模拟生产双节点 DSC 部署
  • 操作方式:全程命令行,所有进程后台启动,手动控制

目录

一、环境架构与规划

基础配置

项目 详情
虚拟机配置 6C 14G,本地 50G
裸设备 /dev/vdb 500M (DCR)<br>/dev/vdc 500M (VOTE)<br>/dev/vdd 20G (DATA)<br>/dev/vde 50G (LOG)
用户/组 dmdba:dinstall
DM_HOME /home/dmdba/dmdbms

节点与端口规划

节点 IP 实例名 数据库端口 CSS端口 ASM端口 ASM MAL端口
节点0 192.168.200.208 DSC01 5236 9341 9351 11266
节点1 192.168.201.128 DSC02 5237 9342 9352 11267

二、裸设备权限持久化

# root 用户执行 cat > /etc/udev/rules.d/99-dsc-disks.rules << 'EOF' KERNEL=="vdb", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="vdc", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="vdd", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="vde", OWNER="dmdba", GROUP="dinstall", MODE="0660" EOF chown dmdba:dinstall /dev/vdb /dev/vdc /dev/vdd /dev/vde chmod 660 /dev/vdb /dev/vdc /dev/vdd /dev/vde udevadm control --reload-rules udevadm trigger

QQ20260717132053.png

三、集群配置文件

  • 配置文件统一存放目录:/data/dsc_config
  • 节点本地配置目录:
    • 节点0:/data/dmdata/DAMENG
    • 节点1:/data/dmdata_STB/DAMENG_STB

1. dmdcr_cfg.ini

mkdir -p /data/dsc_config cat > /data/dsc_config/dmdcr_cfg.ini << 'EOF' DCR_N_GRP = 3 DCR_VTD_PATH = /dev/vdc DCR_OGUID = 453331 [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.200.208 DCR_EP_PORT = 9341 [GRP_CSS] DCR_EP_NAME = CSS1 DCR_EP_HOST = 192.168.201.128 DCR_EP_PORT = 9342 [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.200.208 DCR_EP_PORT = 9351 DCR_EP_ASM_LOAD_PATH = /dev [GRP_ASM] DCR_EP_NAME = ASM1 DCR_EP_SHM_KEY = 42425 DCR_EP_SHM_SIZE = 1024 DCR_EP_HOST = 192.168.201.128 DCR_EP_PORT = 9352 DCR_EP_ASM_LOAD_PATH = /dev [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 = DSC01 DCR_EP_SEQNO = 0 DCR_EP_PORT = 5236 DCR_CHECK_PORT = 9741 [GRP_DSC] DCR_EP_NAME = DSC02 DCR_EP_SEQNO = 1 DCR_EP_PORT = 5237 DCR_CHECK_PORT = 9742 EOF

2. dmasvrmal.ini

cat > /data/dsc_config/dmasvrmal.ini << 'EOF' [MAL_INST0] MAL_INST_NAME = ASM0 MAL_HOST = 192.168.200.208 MAL_PORT = 11266 [MAL_INST1] MAL_INST_NAME = ASM1 MAL_HOST = 192.168.201.128 MAL_PORT = 11267 EOF

3. dmdcr.ini(每个节点一份)

节点0 /data/dsc_config/dmdcr_node0.ini

cat > /data/dsc_config/dmdcr_node0.ini << 'EOF' DMDCR_PATH = /dev/vdb DMDCR_MAL_PATH = /data/dsc_config/dmasvrmal.ini DMDCR_SEQNO = 0 DMDCR_ASM_RESTART_INTERVAL = 0 DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/data/dsc_config/dmdcr_node0.ini DMDCR_DB_RESTART_INTERVAL = 0 DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver /data/dmdata/DAMENG/dm.ini dcr_ini=/data/dsc_config/dmdcr_node0.ini EOF

节点1 /data/dsc_config/dmdcr_node1.ini

cat > /data/dsc_config/dmdcr_node1.ini << 'EOF' DMDCR_PATH = /dev/vdb DMDCR_MAL_PATH = /data/dsc_config/dmasvrmal.ini DMDCR_SEQNO = 1 DMDCR_ASM_RESTART_INTERVAL = 0 DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/data/dsc_config/dmdcr_node1.ini DMDCR_DB_RESTART_INTERVAL = 0 DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver /data/dmdata_STB/DAMENG_STB/dm.ini dcr_ini=/data/dsc_config/dmdcr_node1.ini EOF

四、初始化磁盘与启动集群

1. 清理并创建磁盘元数据

# 停止所有残留进程(dmdba用户) kill -9 $(ps -ef | grep -E "dmcss|dmasmsvr|dmserver" | grep -v grep | awk '{print $2}') 2>/dev/null # 清空磁盘头部旧签名 dd if=/dev/zero of=/dev/vdb bs=1M count=10 dd if=/dev/zero of=/dev/vdc bs=1M count=10 dd if=/dev/zero of=/dev/vdd bs=1M count=10 dd if=/dev/zero of=/dev/vde bs=1M count=10 # 初始化 DCR、Vote、ASM 磁盘 cd /home/dmdba/dmdbms/bin ./dmasmcmd << EOF create dcrdisk '/dev/vdb' 'dcr' create votedisk '/dev/vdc' 'vote' create asmdisk '/dev/vdd' 'DATA0' 20480 create asmdisk '/dev/vde' 'LOG0' 51200 init dcrdisk '/dev/vdb' from '/data/dsc_config/dmdcr_cfg.ini' identified by 'Wei050210' init votedisk '/dev/vdc' from '/data/dsc_config/dmdcr_cfg.ini' EOF

2. 启动 CSS 和 ASM

# 启动 CSS0 nohup ./dmcss DCR_INI=/data/dsc_config/dmdcr_node0.ini > /data/dsc_logs/css0.log 2>&1 & # 启动 CSS1 nohup ./dmcss DCR_INI=/data/dsc_config/dmdcr_node1.ini > /data/dsc_logs/css1.log 2>&1 & sleep 5 grep "IS READY" /data/dsc_logs/css0.log && grep "IS READY" /data/dsc_logs/css1.log # 启动 ASM0 nohup ./dmasmsvr DCR_INI=/data/dsc_config/dmdcr_node0.ini > /data/dsc_logs/asm0.log 2>&1 & # 启动 ASM1 nohup ./dmasmsvr DCR_INI=/data/dsc_config/dmdcr_node1.ini > /data/dsc_logs/asm1.log 2>&1 & sleep 5 ps -ef | grep dmasmsvr | grep -v grep # 确保两个ASM进程都在

3. 创建 ASM 磁盘组

./dmasmtool DCR_INI=/data/dsc_config/dmdcr_node1.ini << EOF create diskgroup 'DMDATA' asmdisk '/dev/vdd' create diskgroup 'DMLOG' asmdisk '/dev/vde' EOF

五、初始化数据库与启动实例

1. 准备 dminit.ini

cat > /data/dsc_config/dminit.ini << 'EOF' DB_NAME = DSCDB SYSDBA_PWD = Wei050210 SYSAUDITOR_PWD = Wei050210 SYSTEM_PATH = +DMDATA/data SYSTEM = +DMDATA/data/SYSTEM.dbf SYSTEM_SIZE = 1024 ROLL = +DMDATA/data/ROLL.dbf ROLL_SIZE = 1024 MAIN = +DMDATA/data/MAIN.dbf MAIN_SIZE = 1024 CTL_PATH = +DMDATA/data/dm.ctl CTL_SIZE = 8 LOG_SIZE = 2048 DCR_PATH = /dev/vdb DCR_SEQNO = 0 AUTO_OVERWRITE = 2 PAGE_SIZE = 32 EXTENT_SIZE = 16 BLANK_PAD_MODE = 1 CHARSET = 1 [DSC01] CONFIG_PATH = /data/dmdata/DAMENG PORT_NUM = 5236 MAL_HOST = 192.168.200.208 MAL_PORT = 61141 LOG_PATH = +DMLOG/DSC01_LOG01.log LOG_PATH = +DMLOG/DSC01_LOG02.log [DSC02] CONFIG_PATH = /data/dmdata_STB/DAMENG_STB PORT_NUM = 5237 MAL_HOST = 192.168.201.128 MAL_PORT = 61142 LOG_PATH = +DMLOG/DSC02_LOG01.log LOG_PATH = +DMLOG/DSC02_LOG02.log EOF

QQ20260717132628.png

2. 初始化数据库

rm -rf /data/dmdata/DAMENG/* /data/dmdata_STB/DAMENG_STB/* ./dminit control=/data/dsc_config/dminit.ini # 看到 "create dm database success" 即为成功

QQ20260717132647.png

3. 后台启动两节点

nohup ./dmserver /data/dmdata/DAMENG/dm.ini dcr_ini=/data/dsc_config/dmdcr_node0.ini > /data/dsc_logs/dsc01.log 2>&1 & nohup ./dmserver /data/dmdata_STB/DAMENG_STB/dm.ini dcr_ini=/data/dsc_config/dmdcr_node1.ini > /data/dsc_logs/dsc02.log 2>&1 & sleep 15

QQ20260717133017.png

六、验证 DSC 集群

1. 数据同步测试

# 节点0 建表并插入 ./disql SYSDBA/Wei050210@192.168.200.208:5236 << EOF CREATE TABLE test_dsc(id INT PRIMARY KEY, name VARCHAR(50)) STORAGE(ON MAIN); INSERT INTO test_dsc VALUES(1, 'Hello DSC'); COMMIT; EOF # 节点1 查询 ./disql SYSDBA/Wei050210@192.168.201.128:5237 <<< "SELECT * FROM test_dsc;" # 应返回 (1, 'Hello DSC')

QQ20260717133305.png

2. 故障切换测试

# 模拟节点0故障 kill -9 $(ps -ef | grep "dmserver.*dmdcr_node0" | grep -v grep | awk '{print $2}') # 在节点1 继续写入 ./disql SYSDBA/Wei050210@192.168.201.128:5237 << EOF INSERT INTO test_dsc VALUES(2, 'After failover'); COMMIT; SELECT * FROM test_dsc; EOF # 应看到两条数据 # 重启节点0 nohup ./dmserver /data/dmdata/DAMENG/dm.ini dcr_ini=/data/dsc_config/dmdcr_node0.ini > /data/dsc_logs/dsc01.log 2>&1 & sleep 15 ./disql SYSDBA/Wei050210@192.168.200.208:5236 <<< "SELECT * FROM test_dsc;" # 数据自动同步

QQ20260717133929.png

七、典型故障与解决

现象 原因 解决
[code: -4546] File open failure 裸设备权限为 root 执行 chown dmdba:dinstall 并添加 udev 规则
DCRV磁盘过多 残留 loop 设备或旧签名 losetup -D,dd 清空前 10MB
ASM 后台进程 Exit 255 使用普通文件模拟共享盘 改用真实裸设备
磁盘空间不足 (-523) 数据文件总大小超过磁盘组容量 确保 DATA 磁盘组足够大(本例 20G)
MAIN.dbf 已存在 (-7004) ASM 残留上次文件 删除并重建磁盘组,或擦除裸设备

八、启停顺序总结

启动顺序

  1. 启动所有 CSS(节点0 → 节点1)
  2. 启动所有 ASM(节点0 → 节点1)
  3. 创建磁盘组(仅首次)
  4. 初始化数据库(仅首次)
  5. 启动所有 DMSERVER(节点0 → 节点1)

停止顺序

  1. 停止所有 DMSERVER
  2. 停止所有 ASM
  3. 停止所有 CSS
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服