注册
通过命令行搭建DSC集群
培训园地/ 文章详情 /

通过命令行搭建DSC集群

lccccc 2025/08/14 29 0 0

通过命令行搭建DSC集群

达梦共享存储集群(DM Data Shared Cluster,简称DMDSC)是达梦数据库企业级的高可用解决方案,采用多实例共享存储架构,允许多个数据库节点同时访问同一套数据文件,实现真正意义上的并行计算和高可用性。DMDSC通过集群同步服务确保各节点数据一致性,支持自动故障检测和转移,当某个节点发生故障时,其他节点可立即接管服务,保证业务连续性。该架构具备负载均衡能力,可智能分配客户端连接至不同节点,显著提升系统整体吞吐量,同时支持在线扩展节点以满足业务增长需求。下面,将用命令行配置DSC

一、提前准备

首先我们需要准备两台虚拟机,以下是我准备虚拟机的配置

机器1:心跳IP:192.168.252.10
机器2:心跳IP:192.168.252.11

然后我们要为虚拟机添加共享磁盘,先提前规划出我们的计划

/dev/sdb 10 G /dev/asmdata0(数据磁盘)
/dev/sdc 5 G /dev/asmdcr(DCR 磁盘)
/dev/sdd 5 G /dev/asmvote(vote 磁盘)
/dev/sde 10 G /dev/asmlog0(redo 日志磁盘)
/dev/sdf 10 G /dev/asmarch0(归档日志磁盘)

创建共享磁盘的核心目的是实现集群中多个节点对存储资源的并发访问和数据一致性,从而构建高可用、高性能的数据库集群架构。这些共享磁盘作为集群的底层存储基础,分别承担不同的关键角色:数据磁盘存储所有业务数据文件,DCR磁盘维护集群配置和状态元数据,Vote磁盘提供节点间仲裁以避免脑裂,Redo日志磁盘确保事务的持久性和故障恢复能力,而归档日志磁盘则保留历史日志用于备份和容灾。通过共享存储架构,多个计算节点可以同时访问同一份数据,既实现了负载均衡和故障自动切换,又保证了数据的强一致性,当某个节点发生故障时,其他节点可立即接管服务而无需数据迁移,显著提高了系统的可用性和可靠性。

然后我们通过cmd命令行创建共享磁盘

image.png

这段命令使用 VMware 的 vmware-vdiskmanager.exe 工具为达梦 DSC 集群创建了五个虚拟共享磁盘文件(VMDK),分别用于不同的集群功能:10GB 的 share-data0.vmdk 作为数据磁盘存储数据库文件,5GB 的 share-dcr.vmdk 用于存储集群配置元数据,5GB 的 share-vote.vmdk 作为仲裁磁盘防止脑裂,两个 10GB 的磁盘 share-log0.vmdk 和 share-arch0.vmdk 则分别用于存储重做日志和归档日志。

接下来我们分别编辑两台虚拟机的vmx文件(这个操作需要在关闭虚拟机的情况下进行)

我们需分别在两台虚拟机的vmx文件下面添加下述配置
#shared disks configure
diskLib.dataCacheMaxSize=0
diskLib.dataCacheMaxReadAheadSize=0
diskLib.dataCacheMinReadAheadSize=0
diskLib.dataCachePageSize=4096
diskLib.maxUnsyncedWrites = "0"
disk.locking = "FALSE"
scsi1.sharedBus = "virtual"
scsi1.present = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1:0.mode = "independent-persistent"
scsi1:0.deviceType = "disk"
scsi1:0.present = "TRUE"
scsi1:0.fileName = "D:\dm\sharedisk\share-data0.vmdk"
scsi1:0.redo = ""
scsi1:1.mode = "independent-persistent"
scsi1:1.deviceType = "disk"
scsi1:1.present = "TRUE"
scsi1:1.fileName = "D:\dm\sharedisk\share-dcr.vmdk"
scsi1:1.redo = ""
scsi1:2.mode = "independent-persistent"
scsi1:2.deviceType = "disk"
scsi1:2.present = "TRUE"
scsi1:2.fileName = "D:\dm\sharedisk\share-vote.vmdk"
scsi1:2.redo = ""
scsi1:3.mode = "independent-persistent"
scsi1:3.deviceType = "disk"
scsi1:3.present = "TRUE"
scsi1:3.fileName = "D:\dm\sharedisk\share-log0.vmdk"
scsi1:3.redo = ""
scsi1:4.mode = "independent-persistent"
scsi1:4.deviceType = "disk"
scsi1:4.present = "TRUE"
scsi1:4.fileName = "D:\dm\sharedisk\share-arch0.vmdk"
scsi1:4.redo = ""

这段配置是为VMware虚拟机设置达梦DSC集群所需的共享存储环境,通过禁用磁盘缓存(diskLib参数)和启用虚拟SCSI控制器共享模式(scsi1.sharedBus),将五个虚拟磁盘文件(包括数据盘、元数据盘、仲裁盘、日志盘等)以独立持久化模式(independent-persistent)挂载到虚拟机上,并关闭磁盘锁定(disk.locking)以实现多节点并发访问,从而为达梦数据库集群提供高可用性所需的共享存储基础。

这时候我们就可以查看我们的虚拟机,就可以看到配置成功的硬盘

image.png

二、搭建DSC集群

1.准备磁盘

接下来我们就开始搭建我们的DSC集群了,首先我们先获取磁盘信息,我们分别在两台虚拟机上面执行下述命令

/usr/lib/udev/scsi_id -g -u /dev/sdb
/usr/lib/udev/scsi_id -g -u /dev/sdc
/usr/lib/udev/scsi_id -g -u /dev/sdd
/usr/lib/udev/scsi_id -g -u /dev/sde
/usr/lib/udev/scsi_id -g -u /dev/sdf

可以发现两台虚拟机磁盘是一一对应的

image.png

image.png

接下来我们要在两台机器上编写配置信息,创建磁盘链接,配置udev规则的核心目的是解决存储设备的持久化命名和权限管理两大关键问题,确保集群的稳定运行

我们在/etc/udev/rules.d/66-dmdevices.rules中配置如下信息

image.png

这段配置通过Linux的udev规则为达梦DSC集群创建持久化的设备符号链接实现了以下功能:

  • 设备持久化命名:通过磁盘的SCSI ID(如36000c29df91b9169b65f5b9da848c4d3)将物理磁盘(/dev/sd*)映射为固定的逻辑名称(/dev/DCR、/dev/VOTE等),避免设备节点名(如sdb/sdc)因系统重启或扫描顺序变化而改变。

  • 权限控制:将所有共享磁盘的所有者和组设置为dmdba用户(达梦数据库的运行用户),权限设为660(所有者与组可读写),确保数据库进程有足够的访问权限。

  • 集中管理:在/dev_DSC目录下创建统一的软链接(如/dev_DSC/DCR指向/dev/DCR),方便集群管理,同时通过最后一条规则的chown命令确保该目录及其链接的权限正确。

  • 自动化配置:在设备加载时自动完成权限设置和链接创建(通过RUN指令),无需人工干预,提高集群部署的可靠性。

然后我们重启服务就能看到如下的磁盘权限了

image.png

2.配置 DCR 初始化配置文件(两台虚拟机均需配置)

这一步我们使用dmdba用户,并在其下配置dmdcr_cfg.ini文件,配置如下

DCR_N_GRP = 3
DCR_VTD_PATH = /dev_DSC/VOTE
DCR_OGUID = 63635
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP_CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_CSS]
DCR_EP_NAME = CSS0
DCR_EP_HOST = 192.168.252.10
DCR_EP_PORT = 9836
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.252.11
DCR_EP_PORT = 9837
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_ASM]
DCR_EP_NAME = ASM0
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 512
DCR_EP_HOST = 192.168.252.10
DCR_EP_PORT = 5836
DCR_EP_ASM_LOAD_PATH = /dev_DSC
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 512
DCR_EP_HOST = 192.168.252.11
DCR_EP_PORT = 5837
DCR_EP_ASM_LOAD_PATH = /dev_DSC
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = GRP_DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_DSC]
DCR_EP_NAME = DSC01
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5260
[GRP_DSC]
DCR_EP_NAME = DSC02
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5260

这段配置定义了达梦DSC集群的基础架构和通信规则。通过分层设计确保集群各组件协同工作,实现高可用和负载均衡。

  1. DCR_N_GRP=3 表示集群包含三个核心组件组:CSS集群同步服务、ASM存储管理和DB数据库实例。这种分层架构使得各组可以独立扩展和维护。
  2. DCR_VTD_PATH=/dev_DSC/VOTE 指定了仲裁磁盘路径,这是解决节点间通信故障时防止脑裂的关键配置。仲裁磁盘会在节点失去联系时决定哪个节点继续存活。
  3. DCR_OGUID=63635 是集群的唯一标识符,确保在同一个网络环境中多个集群能够互相区分,避免资源冲突。
  4. CSS组配置了两个节点(CSS0和CSS1),通过指定的IP和端口(9836/9837)进行心跳检测和状态同步。DSKCHK_CNT=60设置了磁盘健康检查的超时阈值。
  5. ASM组管理共享存储,两个ASM节点通过共享内存通信,并使用统一路径/dev_DSC访问存储设备。EP_ASM_LOAD_PATH确保所有节点以相同方式识别磁盘。
  6. DB组定义了两个数据库实例(DSC01和DSC02),它们共享存储但独立提供服务。实例序号(SEQNO)和端口号(5260)的配置为故障转移提供了基础。

这种配置结构确保了集群各层级的明确分工:CSS负责节点监控,ASM管理存储访问,DB提供数据服务。所有配置信息都会持久化到DCR磁盘中,保证集群重启后能快速恢复。

3.初始化磁盘组(仅需一台虚拟机完成)

我们在一台虚拟机上面,使用dmdba用户,在达梦的bin目录下执行

./dmasmcmd

然后进入ASM后执行

create dcrdisk '/dev_DSC/DCR' 'DCR'
create votedisk '/dev_DSC/VOTE' 'VOTE'
create asmdisk '/dev_DSC/DMDATA' 'DMDATA'
create asmdisk '/dev_DSC/DMLOG' 'DMLOG'
init dcrdisk '/dev_DSC/DCR' from '/home/dmdba/config/dmdcr_cfg.ini' identified by 'DCRpsd_123'
init votedisk '/dev_DSC/VOTE' from '/home/dmdba/config/dmdcr_cfg.ini'

image.png

这段操作是在达梦DSC集群的一个节点上初始化ASM磁盘组,为集群运行准备必要的存储资源。通过dmasmcmd工具创建并初始化各类磁盘,确保集群能够正确识别和管理共享存储。

  1. create dcrdisk命令创建了DCR磁盘,该磁盘用于存储集群的配置信息和节点状态。路径指向 /dev_DSC/DCR,命名为'DCR',这是集群的大脑所在。
  2. create votedisk命令初始化了仲裁磁盘,路径为/dev_DSC/VOTE,命名为'VOTE'。这个磁盘将在节点间通信中断时决定哪些节点继续存活,防止脑裂发生。
  3. create asmdisk命令创建了两个ASM磁盘:DMDATA用于存储实际数据文件,DMLOG用于存放日志文件。这两个磁盘构成了数据库运行的基础存储空间。
  4. init dcrdisk命令将dmdcr_cfg.ini配置文件中的集群参数写入DCR磁盘,并设置访问密码 'DCRpsd_123'。这一步使集群配置持久化到共享存储中。
  5. init votedisk命令同样基于配置文件初始化仲裁磁盘。至此,集群所需的全部共享存储资源都已准备就绪,为后续启动集群服务奠定了基础。

4.配置ASM系统配置文件(两台虚拟机均需配置)

这次我们要配置的是dmasvrmal.ini文件,我们要添加如下配置

[MAL_INST1]
MAL_INST_NAME= ASM0
MAL_HOST= 192.168.160.155
MAL_PORT= 4836

[MAL_INST2]
MAL_INST_NAME= ASM1
MAL_HOST= 192.168.160.156
MAL_PORT= 4837

image.png

这段配置是在设置达梦DSC集群的ASM(自动存储管理)MAL(消息通信层)系统,用于两个ASM节点间的网络通信。

  1. MAL_INST1段定义了第一个ASM节点的通信参数:节点名称为ASM0,使用IP地址192.168.160.155和端口4836进行通信。这是集群中第一个存储管理节点的网络标识。
  2. MAL_INST2段配置了第二个ASM节点:命名为ASM1,使用IP192.168.160.156和端口4837。两个节点通过这两个不同的端口避免通信冲突。

这个配置文件确保了两个ASM存储节点能够相互发现并建立稳定的通信连接。MAL系统负责节点间的心跳检测、状态同步和存储协调,是ASM高可用性的基础。配置需在两个节点上保持一致,包括节点名称、IP和端口信息。任何不一致都可能导致ASM通信失败,进而影响整个集群的存储访问。

5.配置 DCR 启动配置文件(两台虚拟机均需配置)

这次我们要配置的是dmdcr.ini文件,这个文件两台虚拟机的配置并不一致

第一台虚拟机:
DMDCR_PATH = /dev_DSC/DCR
DMDCR_MAL_PATH = /home/dmdba/config/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/config/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/config/DSC01_conf/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini

image.png

第二台虚拟机:
DMDCR_PATH = /dev_DSC/DCR
DMDCR_MAL_PATH = /home/dmdba/config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/config/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/config/DSC01_conf/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini

image.png

这段配置是在设置达梦DSC集群的DCR(达梦集群注册表)启动参数,用于定义集群节点的基本属性和启动方式。

  1. DMDCR_PATH指定了集群注册表磁盘的位置,即之前创建的/dev_DSC/DCR磁盘,这是集群管理的核心存储。
  2. DMDCR_MAL_PATH指向ASM通信配置文件dmasvrmal.ini,确保节点能够通过正确的网络参数进行通信。
  3. DMDCR_SEQNO定义了节点的唯一序号,节点一为0,节点二为1,这是区分不同节点的重要标识。
  4. DMDCR_ASM_RESTART_INTERVAL设置为0表示ASM服务异常时不自动重启,由集群管理服务控制。
  5. DMDCR_ASM_STARTUP_CMD定义了ASM服务的启动命令和配置文件路径,确保使用正确的参数启动存储管理服务。
  6. DMDCR_DB_RESTART_INTERVAL同样设置为0,表示数据库服务不自动重启。
  7. DMDCR_DB_STARTUP_CMD指定了数据库实例的启动命令和配置文件,其中path参数指向各自的dm.ini配置文件。

这些配置在两台虚拟机上基本一致,只有DMDCR_SEQNO不同,确保集群能够正确识别和管理各个节点。这是达梦DSC集群正常启动和运行的关键配置。

6.启动服务

首先在两台虚拟机的达梦bin目录下分别启动dmcss命令:

./dmcss DCR_INI=/home/dmdba/config/dmdcr.ini

image.png

image.png

通过执行./dmcss并指定DCR配置文件路径,启动集群的基础协调层。这个服务负责:

  • 监控所有节点的心跳状态
  • 管理集群成员关系(节点加入/退出)
  • 协调故障切换流程
  • 维护DCR磁盘中的集群元数据

然后在两台虚拟机的达梦bin目录下分别启动 dmasmsvr 命令:

./dmasmsvr DCR_INI=/home/dmdba/config/dmdcr.ini

image.png

image.png

执行./dmasmsvr启动共享存储管理层,其核心功能包括:

  • 管理共享磁盘(DCR/VOTE/DATA/LOG等)
  • 处理多节点并发I/O请求
  • 确保存储访问的一致性
  • 通过MAL系统与其他ASM节点通信

完成这两步后,集群才具备启动数据库实例的基础条件

7.创建ASM 磁盘组(仅需一台虚拟机上完成)

使用 dmdba 用户在bin目录下启动 dmasmtool 工具,然后创建一个 DATA 磁盘组和一个 LOG 磁盘组

创建DATA磁盘组:CREATE DISKGROUP DMDATA asmdisk '/dev_DSC/DMDATA'

创建LOG磁盘组:CREATE DISKGROUP DMLOG asmdisk '/dev_DSC/DMLOG'

image.png

这是在为达梦DSC集群配置ASM存储结构,将物理磁盘组织为逻辑磁盘组。

启动dmasmtool工具后进入ASM管理界面,准备创建存储容器。这是集群存储管理的交互式操作界面。

  • 创建DATA磁盘组将物理磁盘/dev_DSC/DMDATA初始化为名为DMDATA的逻辑存储组,用于存放数据库的数据文件(表空间、索引等核心数据)。
  • 创建LOG磁盘组将/dev_DSC/DMLOG初始化为DMLOG磁盘组,专门存储重做日志和归档日志,确保事务日志的独立存储和高性能读写。

这两个磁盘组的分离设计遵循了数据库最佳实践,实现数据和日志的I/O隔离,提升整体性能。完成此步骤后,达梦DSC集群就具备了完整的存储体系结构。

8.初始化DSC集群数据库实例(仅需一台虚拟机上面完成)

首先我们要配置dminit.ini文件

DB_NAME= dsc2
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
LOG_SIZE= 2048
DCR_PATH= /dev_DSC/DCR
DCR_SEQNO= 0
AUTO_OVERWRITE= 2
PAGE_SIZE = 16
EXTENT_SIZE = 16
SYSDBA_PWD=DMdba_123
SYSAUDITOR_PWD=DMauditor_123

[DSC01]
CONFIG_PATH= /home/dmdba/config/DSC01_conf
PORT_NUM = 5261
MAL_HOST= 192.168.252.10
MAL_PORT= 6536
LOG_PATH= +DMLOG/log/DSC01_log1.log
PORT_NUM = 5262

[DSC02]
CONFIG_PATH= /home/dmdba/config/DSC02_conf
PORT_NUM = 5262
MAL_HOST= 192.168.252.11
MAL_PORT= 6537
LOG_PATH= +DMLOG/log/DSC02_log1.log
LOG_PATH= +DMLOG/log/DSC02_log2.log

然后我们要在bin目录下初始化实例

./dminit control=/home/dmdba/config/dminit.ini

image.png

接下来,我们将另一台虚拟机的配置文件,复制过去

scp -r /home/dmdba/config/DSC02_conf dmdba@192.168.252.11:/home/dmdba/config/

image.png

这段操作是在初始化达梦DSC集群的数据库实例,为集群创建基础数据库结构和配置文件。

9.启动启动数据库服务器

我们分别启动两台虚拟机上的数据库

./dmserver dcr_ini=/home/dmdba/config/dmdcr.ini /home/dmdba/config/DSC01_conf/dm.ini

./dmserver dcr_ini=/home/dmdba/config/dmdcr.ini /home/dmdba/config/DSC02_conf/dm.ini

image.png

image.png

10.配置DMCSSM监视器(在一台虚拟机上配置即可)

DMCSSM监视器是达梦DSC集群的集中监控与管理工具,作为集群的"控制中枢",它通过图形化界面或命令行实时监控所有节点状态(包括CSS、ASM和DB实例),提供集群启停、节点管理、故障切换、资源配置等核心运维功能。

接下来我们来配置这个监视器,先创建DMCSSM 的日志存放路径

mkdir /home/dmdba/cssmlog

然后开始配置dmcssm.ini文件

CSSM_OGUID = 63635
CSSM_CSS_IP = 192.168.252.10:9836
CSSM_CSS_IP = 192.168.252.11:9837
CSSM_LOG_PATH = /home/dmdba/cssmlog
CSSM_LOG_FILE_SIZE = 32
CSSM_LOG_SPACE_LIMIT = 0

这段配置是在设置达梦DSC集群监视器(DMCSSM)的核心参数,确保其能正确监控和管理集群。

  1. CSSM_OGUID设置为63635,与dmdcr_cfg.ini中的DCR_OGUID保持一致,这是集群的唯一标识符,确保监视器监控正确的集群。
  2. CSSM_CSS_IP配置了CSS服务的连接信息,包括两个节点的IP和端口(9836/9837),这些信息必须与dmdcr_cfg.ini中的DCR_EP_HOST和DCR_EP_PORT完全一致,否则无法建立监控连接。
  3. CSSM_LOG_PATH指定了监视器日志的存放目录,默认为/home/dmdba/dm/cssmlog,管理员可通过日志分析集群运行状况。
  4. CSSM_LOG_FILE_SIZE限制单个日志文件最大为32MB,避免日志文件过大影响查看。
  5. CSSM_LOG_SPACE_LIMIT设为0表示不限制日志总大小,确保关键监控信息不会因空间限制而被丢弃。

配置完成即可在bin目录下启动监视器

./dmcssm /home/dmdba/config/dmcssm.ini

image.png

三、测试

在完成上述的操作后我们的DSC集群就搭建成功了,为了确认搭建无误我们进行两个测试

1.数据同步

DSC支持数据同步与共享存储,这里我们测试一下是否真的能实现

我们先在第一台虚拟机上建表并插入数据(注意需要提交事务)

image.png

然后我们在第二台虚拟机上面查询,可以看到我们成功查询到了这个表和对应的数据了

image.png

2.高可用性

DSC支持高可用,单个节点故障不会导致数据库服务中断,业务自动切换到其他节点。这里我们来确认一下

我们直接关闭一台虚拟机,看一下监视器的反应,可以看到集群很快就发现了问题并很快就将这个问题解决了

image.png

这时我们再操作剩下的一台虚拟机,发现操作都能正常的进行

image.png

至此我们完成了DSC集群的搭建

4.总结

达梦共享存储集群采用多节点共享存储架构,突破传统主备模式的性能瓶颈,允许多个数据库实例同时读写同一份数据,实现真正的多活并行处理。该方案通过三层架构实现高可用:CSS集群同步服务负责节点监控与仲裁,ASM存储管理层管理共享磁盘(包括数据盘、日志盘和仲裁盘),DB层运行多个可并行工作的数据库实例。部署时需依次完成共享磁盘配置、集群服务初始化、存储管理和数据库实例创建等步骤,最终由DMCSSM监视器统一管理整个集群。DSC集群显著提升了数据库系统的可用性、扩展性和处理能力,支持自动故障检测和切换,确保业务连续性,特别适用于对可靠性和性能要求严苛的关键业务场景。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服