前言
DSC(Data Sharing Cluster,共享存储集群)是达梦数据库提供的高可用集群解决方案。与主备集群和读写分离集群不同,DSC集群中所有节点共享同一份数据存储,多个节点同时处于可读写状态,任一节点故障后,其他节点可立即接管服务,实现高可用。
本文将从零开始搭建一个两节点的DSC集群,并验证数据同步等功能。
一、DSC集群核心概念
1.1 什么是DSC集群
DSC集群的核心特点是共享存储。多个数据库实例连接同一块共享磁盘,数据文件、控制文件、日志文件都存放在共享存储上,所有节点同时读写同一份数据。
| 对比项 | 主备集群 | DSC集群 |
| 数据存储 | 每个节点各有一份 | 所有节点共享一份 |
| 节点角色 | 主库可读写,备库只读 | 所有节点平等,均可读写 |
| 硬件要求 | 无需共享存储 | 必须配置共享存储 |
| 故障切换 | 备库接管需要时间 | 节点故障后其他节点立即接管 |
1.2 DSC集群核心组件
| 组件 | 全称 | 功能 |
| CSS | Cluster Synchronization Services | 集群同步服务,负责节点间心跳检测和集群管理 |
| ASM | Automatic Storage Management | 自动存储管理,管理共享磁盘上的数据文件 |
| DCR | DM Cluster Registry | 集群注册表,存储集群配置信息 |
| VOTE | Voting Disk | 表决磁盘,用于集群仲裁和防脑裂 |
二、环境规划
2.1 硬件环境
本文基于两台银河麒麟V10虚拟机搭建DSC集群:
| 项目 | 节点1(DSC-1) | 节点2(DSC-2) |
| IP地址 | 192.168.74.151 | 192.168.74.152 |
| 主机名 | dsc1 | dsc2 |
| CPU | 2核 | 2核 |
| 内存 | 2GB | 2GB |
| 本地磁盘 | 30GB | 30GB |
| 共享磁盘 | 需单独配置 | 需单独配置 |
2.2 共享存储规划
DSC集群需要独立的共享存储,本文使用VMware虚拟共享磁盘,规划如下:
| 磁盘 | 大小 | 设备名 | 用途 |
| DCR盘 | 2GB | /dev/dm/asm-dmdcr | 存储集群配置信息 |
| VOTE盘 | 2GB | /dev/dm/asm-dmvote | 表决磁盘,防脑裂 |
| LOG盘 | 10GB | /dev/dm/asm-dmlog | 存储REDO日志 |
| DATA盘 | 10GB | /dev/dm/asm-dmdata | 存储业务数据 |
2.3 端口规划
| 端口 | 用途 | DSC-1 | DSC-2 |
| 数据库端口 | 实例监听 | 5236 | 5236 |
| CSS端口 | CSS服务 | 11286 | 11286 |
| ASM端口 | ASM服务 | 11276 | 11276 |
| MAL端口 | 内部通信 | 11266 | 11266 |
| DCR端口 | DCR通信 | 11246 | 11246 |
三、共享存储配置
3.1 创建共享磁盘
在VMware中为两台虚拟机创建共享磁盘:
四、集群配置文件
4.1 创建配置目录
两台机器都执行:
su - dmdba
mkdir -p /dm8/dsc_config
mkdir -p /dm8/dsc_config/DSC0
mkdir -p /dm8/dsc_config/DSC1
4.2 配置 dmdcr_cfg.ini
在DSC-1上创建集群拓扑配置文件:
vi /dm8/dsc_config/dmdcr_cfg.ini
填入:
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/dm/asm-dmvote
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.74.151
DCR_EP_PORT = 11286
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.74.152
DCR_EP_PORT = 11286
[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.74.151
DCR_EP_PORT = 11276
DCR_EP_ASM_LOAD_PATH = /dev/dm
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 42425
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.74.152
DCR_EP_PORT = 11276
DCR_EP_ASM_LOAD_PATH = /dev/dm
[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 = 5236
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
4.3 初始化DCR和VOTE磁盘
在DSC-1上执行:
cd /dm8/bin
./dmasmcmd
在ASM>提示符下依次执行:
create dcrdisk '/dev/dm/asm-dmdcr' 'dcr'
create votedisk '/dev/dm/asm-dmvote' 'vote'
init dcrdisk '/dev/dm/asm-dmdcr' from '/dm8/dsc_config/dmdcr_cfg.ini' identified by 'Dameng@2026'
init votedisk '/dev/dm/asm-dmvote' from '/dm8/dsc_config/dmdcr_cfg.ini'
create asmdisk '/dev/dm/asm-dmlog' 'LOG0'
create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
exit
4.4 配置 dmasvrmal.ini
vi /dm8/dsc_config/dmasvrmal.ini
填入:
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.74.151
MAL_PORT = 11266
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.74.152
MAL_PORT = 11266
4.5 配置 dmdcr.ini
DSC-1配置:
vi /dm8/dsc_config/dmdcr.ini
填入:
DMDCR_PATH = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH = /dm8/dsc_config/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
复制到DSC-2并修改SEQNO:
scp /dm8/dsc_config/dmdcr.ini root@dsc2:/dm8/dsc_config/
在DSC-2上将DMDCR_SEQNO = 0改为DMDCR_SEQNO = 1。
五、启动集群服务
5.1 启动DMCSS
DSC-1执行:
cd /dm8/bin
./dmcss DCR_INI=/dm8/dsc_config/dmdcr.ini
看到DMCSS IS READY后保持运行。
DSC-2执行:
cd /dm8/bin
./dmcss DCR_INI=/dm8/dsc_config/dmdcr.ini
5.2 启动DMASM
DSC-1执行:
./dmasmsvr DCR_INI=/dm8/dsc_config/dmdcr.ini
DSC-2执行:
./dmasmsvr DCR_INI=/dm8/dsc_config/dmdcr.ini
5.3 创建ASM磁盘组
cd /dm8/bin
./dmasmtool DCR_INI=/dm8/dsc_config/dmdcr.ini
在ASM>提示符下:
create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-dmlog'
create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata'
exit
六、初始化数据库
6.1 创建 dminit.ini
vi /dm8/dsc_config/dminit.ini
DB_NAME = DSC
SYSDBA_PWD = Dameng@2026
SYSAUDITOR_PWD = Dameng@2026
SYSTEM_PATH = +DMDATA/data
SYSTEM = +DMDATA/data/SYSTEM.dbf
SYSTEM_SIZE = 128
ROLL = +DMDATA/data/ROLL.dbf
ROLL_SIZE = 128
MAIN = +DMDATA/data/MAIN.dbf
MAIN_SIZE = 128
CTL_PATH = +DMDATA/data/dm.ctl
CTL_SIZE = 8
LOG_SIZE = 256
DCR_PATH = /dev/dm/asm-dmdcr
DCR_SEQNO = 0
AUTO_OVERWRITE = 1
PAGE_SIZE = 32
EXTENT_SIZE = 16
[DSC0]
CONFIG_PATH = /dm8/dsc_config/DSC0
PORT_NUM = 5236
MAL_HOST = 192.168.74.151
MAL_PORT = 11246
LOG_PATH = +DMLOG/DSC0_LOG01.log
LOG_PATH = +DMLOG/DSC0_LOG02.log
[DSC1]
CONFIG_PATH = /dm8/dsc_config/DSC1
PORT_NUM = 5236
MAL_HOST = 192.168.74.152
MAL_PORT = 11246
LOG_PATH = +DMLOG/DSC1_LOG01.log
LOG_PATH = +DMLOG/DSC1_LOG02.log
6.2 初始化数据库
cd /dm8/bin
./dminit control=/dm8/dsc_config/dminit.ini
6.3 复制配置文件到DSC-2
scp -r /dm8/dsc_config/DSC1 root@dsc2:/dm8/dsc_config/
七、启动DMSERVER
DSC-1执行:
./dmserver /dm8/dsc_config/DSC0/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini
DSC-2执行:
./dmserver /dm8/dsc_config/DSC1/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini
(同时启动)
八、验证集群
8.1 启动监视器
vi /dm8/dsc_config/dmcssm.ini
填入:
CSSM_OGUID = 210715
CSSM_CSS_IP = 192.168.74.151:11286
CSSM_CSS_IP = 192.168.74.152:11286
CSSM_LOG_PATH = ../log
CSSM_LOG_FILE_SIZE = 512
CSSM_LOG_SPACE_LIMIT = 2048
启动监视器:
cd /dm8/bin
./dmcssm INI_PATH=/dm8/dsc_config/dmcssm.ini
执行show,查看集群状态。
8.2 验证数据同步
在DSC-1创建测试表:
cd /dm8/bin
./disql SYSDBA/Dameng@2026@localhost:5236(密码里的@会被系统误读,导致连接失败)
./disql SYSDBA@localhost:5236
然后根据提示输入密码: Dameng@2026
CREATE TABLE test_dsc (id INT, name VARCHAR(50), create_time DATE);
INSERT INTO test_dsc VALUES (1, 'DSC测试数据', SYSDATE);
INSERT INTO test_dsc VALUES (2, '集群测试', SYSDATE);
COMMIT;
SELECT * FROM test_dsc;
在DSC-2查询:
cd /dm8/bin
./disql SYSDBA/Dameng@2026@localhost:5236
SELECT * FROM test_dsc;
如果查询到相同数据,说明集群同步正常。
九、总结
本文成功完成了两节点DSC集群的部署,验证了共享存储架构下主备节点的数据同步能力。DSC集群通过多节点共享同一份数据,实现了所有节点同时可读写的功能,为后续高可用扩展奠定了基础。
文章
阅读量
获赞
