达梦共享存储集群(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日志磁盘确保事务的持久性和故障恢复能力,而归档日志磁盘则保留历史日志用于备份和容灾。通过共享存储架构,多个计算节点可以同时访问同一份数据,既实现了负载均衡和故障自动切换,又保证了数据的强一致性,当某个节点发生故障时,其他节点可立即接管服务而无需数据迁移,显著提高了系统的可用性和可靠性。
这段命令使用 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文件下面添加下述配置
#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)以实现多节点并发访问,从而为达梦数据库集群提供高可用性所需的共享存储基础。
/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
我们在/etc/udev/rules.d/66-dmdevices.rules中配置如下信息
这段配置通过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指令),无需人工干预,提高集群部署的可靠性。
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集群的基础架构和通信规则。通过分层设计确保集群各组件协同工作,实现高可用和负载均衡。
这种配置结构确保了集群各层级的明确分工:CSS负责节点监控,ASM管理存储访问,DB提供数据服务。所有配置信息都会持久化到DCR磁盘中,保证集群重启后能快速恢复。
./dmasmcmd
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'
这段操作是在达梦DSC集群的一个节点上初始化ASM磁盘组,为集群运行准备必要的存储资源。通过dmasmcmd工具创建并初始化各类磁盘,确保集群能够正确识别和管理共享存储。
[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
这段配置是在设置达梦DSC集群的ASM(自动存储管理)MAL(消息通信层)系统,用于两个ASM节点间的网络通信。
这个配置文件确保了两个ASM存储节点能够相互发现并建立稳定的通信连接。MAL系统负责节点间的心跳检测、状态同步和存储协调,是ASM高可用性的基础。配置需在两个节点上保持一致,包括节点名称、IP和端口信息。任何不一致都可能导致ASM通信失败,进而影响整个集群的存储访问。
第一台虚拟机:
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
第二台虚拟机:
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
这段配置是在设置达梦DSC集群的DCR(达梦集群注册表)启动参数,用于定义集群节点的基本属性和启动方式。
这些配置在两台虚拟机上基本一致,只有DMDCR_SEQNO不同,确保集群能够正确识别和管理各个节点。这是达梦DSC集群正常启动和运行的关键配置。
./dmcss DCR_INI=/home/dmdba/config/dmdcr.ini
通过执行./dmcss并指定DCR配置文件路径,启动集群的基础协调层。这个服务负责:
./dmasmsvr DCR_INI=/home/dmdba/config/dmdcr.ini
执行./dmasmsvr启动共享存储管理层,其核心功能包括:
完成这两步后,集群才具备启动数据库实例的基础条件
创建DATA磁盘组:CREATE DISKGROUP DMDATA asmdisk '/dev_DSC/DMDATA'
创建LOG磁盘组:CREATE DISKGROUP DMLOG asmdisk '/dev_DSC/DMLOG'
启动dmasmtool工具后进入ASM管理界面,准备创建存储容器。这是集群存储管理的交互式操作界面。
这两个磁盘组的分离设计遵循了数据库最佳实践,实现数据和日志的I/O隔离,提升整体性能。完成此步骤后,达梦DSC集群就具备了完整的存储体系结构。
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
./dminit control=/home/dmdba/config/dminit.ini
scp -r /home/dmdba/config/DSC02_conf dmdba@192.168.252.11:/home/dmdba/config/
./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
DMCSSM监视器是达梦DSC集群的集中监控与管理工具,作为集群的"控制中枢",它通过图形化界面或命令行实时监控所有节点状态(包括CSS、ASM和DB实例),提供集群启停、节点管理、故障切换、资源配置等核心运维功能。
mkdir /home/dmdba/cssmlog
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)的核心参数,确保其能正确监控和管理集群。
./dmcssm /home/dmdba/config/dmcssm.ini
我们先在第一台虚拟机上建表并插入数据(注意需要提交事务)
然后我们在第二台虚拟机上面查询,可以看到我们成功查询到了这个表和对应的数据了
我们直接关闭一台虚拟机,看一下监视器的反应,可以看到集群很快就发现了问题并很快就将这个问题解决了
这时我们再操作剩下的一台虚拟机,发现操作都能正常的进行
达梦共享存储集群采用多节点共享存储架构,突破传统主备模式的性能瓶颈,允许多个数据库实例同时读写同一份数据,实现真正的多活并行处理。该方案通过三层架构实现高可用:CSS集群同步服务负责节点监控与仲裁,ASM存储管理层管理共享磁盘(包括数据盘、日志盘和仲裁盘),DB层运行多个可并行工作的数据库实例。部署时需依次完成共享磁盘配置、集群服务初始化、存储管理和数据库实例创建等步骤,最终由DMCSSM监视器统一管理整个集群。DSC集群显著提升了数据库系统的可用性、扩展性和处理能力,支持自动故障检测和切换,确保业务连续性,特别适用于对可靠性和性能要求严苛的关键业务场景。
文章
阅读量
获赞