注册
DM8 DSC共享集群
专栏/技术分享/ 文章详情 /

DM8 DSC共享集群

马羊君 2026/09/04 179 0 0
摘要

一、DSC共享集群概述

数据共享集群(DMDSC)是达梦数据库自研的共享存储架构多实例集群解决方案。在国产数据库领域率先推出,可对标 Oracle RAC,是达梦数据库支持网络计算环境的核心技术。

DMDSC集群与传统的守护集群区别:
主备/读写分离集群:其核心是“多份数据靠日志追平”。主库产生日志,备库接收并重演日志,以此保持数据同步。
DMDSC共享集群:其核心是“多个实例围绕一份数据协同工作”。所有节点共享同一份数据文件,协同对外提供服务。
简单来说,DSC集群中所有节点共享同一份数据文件(存放在共享存储上),每个节点运行独立的数据库实例,所有节点均可执行读写操作,不存在“主备”之分。

DMDSC 集群主要由数据库和数据库实例、共享存储、DMASM 或 DMASM 镜像、本地存储、通信网络、集群控制软件 DMCSS、集群监视器 DMCSSM 组成。DMDSC 集群最多支持 8 个数据库实例节点。
image.png

1.核心组件

image.png

2.DSC集群关键特性与优势

高可用性:集群中只要有一个活动节点,就能正常提供数据库服务。单节点故障时,其他节点会自动接管服务,实现故障透明切换。

高吞吐量与负载均衡:多个节点同时提供数据库服务,能有效提升集群的整体事务处理能力。用户的连接请求可以被平均分配到各个节点,实现负载均衡。

高可扩展性:当业务需求增长时,可通过增加节点来水平扩展集群的处理能力。目前DM8共享存储集群已突破8节点。

对标Oracle RAC:作为国产数据库在共享集群领域的重要技术突破,DMDSC提供了与Oracle RAC类似的高可用和扩展能力。

二、DSC集群关键技术

1.缓存交换

DSC实现高性能的核心技术,其核心思想是利用高速网络在节点内存间直接传递数据页,避免慢速的磁盘I/O,对标Oracle RAC的“缓存融合”。

当某个节点需要访问一个数据页时,它会通过集群的MAL私有高速网络,向管理该数据页的“主节点”发起请求。如果数据在另一个节点的内存中,主节点会协调直接将数据页从该节点内存传输过来,而不是从共享磁盘读取。

这项技术依赖于全局缓冲区服务(GBS) 和本地缓冲区服务(LBS)。GBS维护着每个数据页在集群中的状态和位置,LBS则负责执行本地的缓存管理。
image.png
1)节点 EP0 的本地 LBS 向 EP1 的 GBS 请求数据页 P1 的 S LATCH 权限;
2)节点 EP1 的 GBS 修改 P1 控制结构,记录访问节点 EP0 的封锁模式为 S LATCH(数
据分布节点为 EP0),并响应 EP0 的 LBS 请求;
3)节点 EP0 的 LBS 获得 GBS 授权后,记录获得的授权模式是 S_LATCH,P1 数据不
在其他节点的 Buffer 中,发起本地 IO 请求,从磁盘读取数据。IO 完成后,修改 LBS 控制结构,记录数据页上的 LSN 信息;

2.全局并发控制

DMDSC 集群中实现与单节点相同的多版本并发控制(MVCC)策略,每个事务需要知道所有节点当前活动的事务信息,根据事务隔离级的不同,在事务启动时(串行化),或者语句执行时(读提交),收集这一时刻所有节点上的活动事务,以及系统中即将产生的事务号 NEXT_TID,记录到事务的活动事务视图中。DMDSC 集群将事务信息全局化,由控制节点统一管理集群中所有节点的全局事务视图(Global Transaction View,简称 GTV);与之对应的是每个节点维护一个本地事务视图(Local Transaction View,简称 LTV)。

全局事务管理 (GTV):每个节点在启动事务时,都会从统一的控制节点获取GTV,它记录了集群中所有节点当前的活动事务。通过GTV,每个节点都能“看到”全局一致的数据快照,从而在实现高并发读写的同时,保证了事务的隔离性和数据一致性。

全局锁管理 (GLS):协调多节点并发访问的核心服务。整个集群只有一个全局的全局封锁服务(GLS),它统一处理所有节点的封锁请求、维护全局封锁信息并进行死锁检测,确保当多个节点尝试同时修改同一数据时,通过全局协调来避免冲突,保证数据的一致性。

GTV 与 GLS 的协同工作

以一个典型的 “EP1 更新,EP2 查询” 场景为例
写入阶段(依赖GLS)
1)EP1向GLS申请修改行R的锁。
2)GLS授权后,EP1修改该行,将自身TID(100)写入行头,并生成新版本(Undo链接)。
3)此时GLS并未通知GTV,因为事务还未提交。

读取阶段(依赖GTV)
1)EP2发起查询,根据隔离级别获取GTV/LTV提供的快照(假设快照中TID(100)是活跃的)。
2)EP2读到行R的头部TID=100,依据MVCC规则(TID在活动列表中),判定该版本不可见,于是沿RPTR回滚指针找到上一个已提交版本读取。
3)整个过程无需访问GLS,完美实现读写分离。

提交阶段(协同更新)
1)EP1提交事务,先写Redo日志,然后通知GLS释放行锁(清空或标记TID为已提交)。
2)同时,通知GTV将TID(100)从全局活动事务列表中移除。
3)此后,EP2的新查询再读取到GTV快照时,会发现TID(100)不在活动列表中且小于NEXT_TID,该版本变为可见。

3.DMCSS

达梦集群同步服务(Dameng Cluster Synchronization Services,简称 DMCSS),在 DMASM 集群或 DMDSC 集群中,每个节点都需要配置一个 DMCSS 服务。

DMCSS 工作的基本原理是:在 VOTE 磁盘(非镜像环境下)或 DCRV 磁盘(镜像环境下)中,为每个被监控对象(DMASMSVR、DMSERVER、DMCSS)分配一片独立的存储区域,被监控对象定时向 VOTE 或 DCRV 磁盘写入信息(包括时间戳、状态、命令、以及命令执行结果等);DMCSS 控制节点定时从 VOTE 或 DCRV 磁盘读取信息,检查被监控对象的状态变化。

DMCSS通过心跳机制检测节点存活,并在节点故障时触发自动切换,将服务转移到其他节点。防脑裂机制:它通过VOTE(表决盘) 存储心跳和仲裁信息,并依靠DCR(集群注册表盘) 存储集群全局配置,在发生网络分区时防止“脑裂”,确保集群只有一个“主控”。

4.DMASM

DM 自动存储管理器(DM Auto Storage Manager,简称 DMASM)是一个专用的分布式文件系统,用于统一管理集群的的磁盘和文件。
DMASM是达梦自研的共享存储管理组件,它将底层的裸设备(如/dev/sdb)抽象为磁盘组(Disk Group) 进行管理。无需操作系统进行格式化分区,简化了存储管理。同时,它还支持ASM镜像和条带化功能,提升了存储的可靠性和性能
image.png

DMASM 的主要功能

  1. 分布式管理
    支持多台机器并发访问 ASM 磁盘和文件,提供全局并发控制。
  2. 磁盘组管理
    支持创建和删除磁盘组,将块设备格式化为DMASM格式,并由DMASMSVR统一管理;一个磁盘组可以包含一个或者多个 ASM 磁盘;磁盘组支持在线增加 ASM 磁盘,实现动态存储扩展。
  3. 文件管理
    支持创建、删除、截断文件等功能;支持创建目录;支持动态扩展文件;文件可以存放在一个磁盘组的多个磁盘中,文件大小不再受限于单个磁盘大小。
  4. 完善、高效的访问接口
    通过 DMASMAPI 可以获得各种文件管理功能。
  5. 通用功能的管理工具
    DMASMTOOL 提供一套类 Linux 的文件操作命令用于管理 ASM 文件,降低用户学习、使用 DMASM 文件系统的难度。

三、DMDSC 搭建

1、环境准备

虚拟机一:host01 172.16.1.51:15236
虚拟机二:host02 172.16.1.52:15236
image.pngimage.png

2、虚拟机创建共享磁盘

image.png
在VMware Workstation虚拟机产品安装的目录下找到vmware-vdiskmanager.exe,打开终端(也可以用cmd打开),执行命令创建共享磁盘,语句如下:

.\vmware-vdiskmanager.exe -c -s 2048Mb -a lsilogic -t 2 "D:\Virtual Machines\达梦共享集群\DMDSC_DISK\sdb.vmdk"
.\vmware-vdiskmanager.exe -c -s 2048Mb -a lsilogic -t 2 "D:\Virtual Machines\达梦共享集群\DMDSC_DISK\sdc.vmdk"
.\vmware-vdiskmanager.exe -c -s 4096Mb -a lsilogic -t 2 "D:\Virtual Machines\达梦共享集群\DMDSC_DISK\sdd.vmdk"
.\vmware-vdiskmanager.exe -c -s 15360Mb -a lsilogic -t 2 "D:\Virtual Machines\达梦共享集群\DMDSC_DISK\sde.vmdk"

3、配置dmdsc0、dmdsc1两台虚拟机文件

到两台虚拟机(dmdsc0、dmdsc1)目录下的.vmx查看是否末尾有以下参数,如果没有的手动加入,系统会起不来。
注意:虚拟机必须关闭时添加,否则配置不生效。

disk.EnableUUID = "TRUE"
scsi0:1.SharedBus="Virtual" 		#对应为sdb磁盘
scsi0:2.SharedBus="Virtual"		#对应为sdc磁盘
scsi0:3.SharedBus="Virtual"		#对应为sdd磁盘
scsi0:4.SharedBus="Virtual"		#对应为sde磁盘
# disk.locking="FALSE" 参数是设置虚拟磁盘的锁定行为。FALSE 表示禁用磁盘锁定,禁用磁盘锁定允许多个虚拟机同时访问同一个虚拟磁盘,这在一些特定的配置(例如共享磁盘集群)中是有用的。 
# scsi0:1.SharedBus="Virtual" 这个参数设置 SCSI 控制器 0 上的第 1 个设备(通常是虚拟磁盘)的共享总线行为。SharedBus="Virtual" 表示 SCSI 总线处于虚拟共享模式,使多个虚拟机可以共享同一个 SCSI 总线上的设备。

4、虚拟机添加共享磁盘

image.png
image.png
image.png
image.png
image.png
image.png
按顺序将其他3块硬盘添加到虚拟机中,两台虚拟机都需要添加;

检查磁盘,确定sdb、sdc、sdd、sde磁盘号一致,两台服务器进行比较

[root@~]# /usr/lib/udev/scsi_id -g -u /dev/sdb
[root@~]# /usr/lib/udev/scsi_id -g -u /dev/sdc
[root@~]# /usr/lib/udev/scsi_id -g -u /dev/sdd
[root@~]# /usr/lib/udev/scsi_id -g -u /dev/sde

image.png
image.png

5.添加第二块网卡

注意与第一块网卡选择不同的虚拟网络
image.png

6、挂载存储

#编辑脚本

[root@~]# str1=1;for str2 in sdb sdc sdd sde;do
echo "KERNEL==\"sd*\", SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$str2`\", SYMLINK+=\"raw/raw$((str1++))\",OWNER=\"dmdba\", GROUP=\"dinstall\",MODE=\"0660\"" >> /etc/udev/rules.d/88-dmasm.rules
done

image.png

#重启udev

[root@~]# udevadm trigger
[root@~]# udevadm control --reload-rules

#查看挂载、UUID、大小(所有节点都要相同)

[root@~]# for str1 in raw1 raw2 raw3 raw4;do
echo `ll /dev/raw/$str1` `/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/raw/$str1` `blockdev --getsize64 /dev/raw/$str1`
done

image.png
image.png

7、使用dmdba用户安装数据库软件

安装路径为/home/dmdba/dm/dmdbms。

7.1 数据库用户创建

使用root用户进行创建

[root@~]# groupadd dinstall
[root@~]# mkdir -p /home/dmdba
[root@~]# useradd -g dinstall -m -d /home/dmdba/dm -s /bin/bash dmdba
[root@~]# passwd dmdba  #密码自定义

7.2 服务器参数配置

7.2.1关闭防火墙

#查看防火墙状态
[root@~]# systemctl status firewalld.service
#停止防火墙服务
[root@~]# systemctl stop firewalld.service
#禁用防火墙服务
[root@~]# systemctl disable firewalld.service

7.2.2 dmdba用户内核参数调整

[root@~]# vi /etc/security/limits.conf
添加如下内容
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 131072
dmdba hard nproc 131072
dmdba soft nofile 131072
dmdba hard nofile 131072
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
dmdba soft memlock unlimited 
dmdba hard memlock unlimited

7.2.3 sysctl.conf配置调整

这一步用于调整core文件路径、虚拟内存和swap使用策略、min_free_kbyte参数。
当内存很大的情况下建议关闭交换分区或最小化交换的使用,避免内核的内存申请到交换分区影响数据库性能over commit_memory配置为0。内存小于256GB时swapiness参数设置为10以下,大于256GB时关闭。

[root@~]#vi /etc/sysctl.conf
添加如下内容
kernel.core_pattern=/dbbak/core-%e-%p-%t-%s
vm.swappiness=10
vm.overcommit_memory=0
# 当物理内存小于等于64G时,设置系统保留的最小空闲内存量为1153434(单位KB)
# 当物理内存大于64G时,设置系统保留的最小空闲内存量为物理内存的2%;
vm.min_free_kbytes = 物理内存的2%(单位KB)

保存后执行
[root@~]# sysctl -p

7.2.4 禁用透明大页

[root@~]# vi /etc/rc.local
添加如下内容(内容加在 exit 0 之前)
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

7.2.5 磁盘IO调度算法

固态盘建议磁盘调度算法设置为noop或none,机械磁盘建议为dead1ine,从而优化数据库的磁盘性能。

[root@~]# cat /sys/block/sdb/queue/scheduler
[root@~]# cat /sys/block/sdc/queue/scheduler
[root@~]# cat /sys/block/sdd/queue/scheduler
[root@~]# cat /sys/block/sde/queue/scheduler

image.png

该操作需让操作系统厂家进行调整,永久生效。
如个人临时调整可参考以下方式:
#手动临时调整 sdc 为盘符,需要对应数据库使用的真实盘符
固态磁盘:
[root@~]# echo noop >  /sys/block/sdc/queue/scheduler
[root@~]# echo none >  /sys/block/sdc/queue/scheduler
机械磁盘:
[root@~]# echo deadline >  /sys/block/sdc/queue/scheduler

7.2.6 关闭SELinux

#查看当前selinux的状态:
[root@~]# /usr/sbin/sestatus -v
[root@~]# vi /etc/selinux/config
设置SELINUX=disabled,重启机器生效。

7.3数据库软件安装

注意:为增强系统数据库安全性,数据库安装统一使用安全版本,数据库初始化时请注意安全许可证的使用。
iso 后缀的文件,需要对文件进行挂载,使用root用户执行命令如下:

[root@~]# mount -o loop /opt/dm8_20240514_x86_rh6_64.iso /mnt

在终端进入到安装程序所在文件夹,使用dmdba用户执行以下命令进行命令行安装:
[dmdba@~]# /mnt/DMInstall.bin -i

8、麒麟操作系统修改RemoveIPC参数

防止关闭asm服务时,进程还在,导致重新起来报错:

vim /etc/systemd/logind.conf 
设置 RemoveIPC 参数为 no保存后重启服务
systemctl daemon-reload 
systemctl restart systemd-logind 
##检查验证 
grep RemoveIPC /etc/systemd/logind.conf 
RemoveIPC=no 
#结果验证确认 
loginctl show-session|grep RemoveIPC 
systemctl show systemd-logind|grep RemoveIPC

9、主备机创建dmdcr_cfg.ini

[root@~]mkdir /dsc/config/ -p
[root@~]chown dmdba:dinstall /dsc/config/ -R

[dmdba@~]$  vi /dsc/config/dmdcr_cfg.ini
DCR_N_GRP                  = 3  #集群环境有多少个GROUP,范围:1~16
DCR_VTD_PATH               = /dev/raw/raw2
DCR_OGUID                  = 45331  #消息标识

[GRP]  #新建一个GROUP
  DCR_GRP_TYPE             = CSS  #组类型(CSS/ASM/DB)
  DCR_GRP_NAME             = GRP_CSS  #组名
  DCR_GRP_N_EP             = 2  #组内节点个数
  DCR_GRP_DSKCHK_CNT       = 60  #磁盘心跳容错时间,单位:秒
[GRP_CSS]
  DCR_EP_NAME              = CSS0  #CSS节点名
  DCR_EP_HOST              = 10.0.0.1  #心跳IP
  DCR_EP_PORT              = 5636  #CSS端口
[GRP_CSS]
  DCR_EP_NAME              = CSS1
  DCR_EP_HOST              = 10.0.0.2
  DCR_EP_PORT              = 5636

[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  #ASM节点名
  DCR_EP_SHM_KEY           = 93360  #共享内存标识
  DCR_EP_SHM_SIZE          = 20  #共享内存大小
  DCR_EP_HOST              = 10.0.0.1  #心跳IP
  DCR_EP_PORT              = 5736  #ASM端口
  DCR_EP_ASM_LOAD_PATH     = /dev/raw
[GRP_ASM]
  DCR_EP_NAME              = ASM1
  DCR_EP_SHM_KEY           = 93361
  DCR_EP_SHM_SIZE          = 512
  DCR_EP_HOST              = 10.0.0.2
  DCR_EP_PORT              = 5736
  DCR_EP_ASM_LOAD_PATH     = /dev/raw

[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              = DSC0  #实例名
  DCR_EP_SEQNO             = 0  #组内序号,不能重复
  DCR_EP_PORT              = 15236  #实例端口
  DCR_CHECK_PORT           = 5836  #DCR检查端口
[GRP_DSC]
  DCR_EP_NAME              = DSC1
  DCR_EP_SEQNO             = 1
  DCR_EP_PORT              = 15236
  DCR_CHECK_PORT           = 5836


10、初始化磁盘组(主机)

[dmdba@~]$ /home/dmdba/dm/dmdbms/bin/dmasmcmd
  ASM> create dcrdisk '/dev/raw/raw1' 'dcr'
  ASM> create votedisk '/dev/raw/raw2' 'vote'
  ASM> create asmdisk '/dev/raw/raw3' 'DMLOG'
  ASM> create asmdisk '/dev/raw/raw4' 'DMDATA'
  ASM> init dcrdisk '/dev/raw/raw1' from '/dsc/config/dmdcr_cfg.ini' identified by 'Dameng456'
  ASM> init votedisk '/dev/raw/raw2' from '/dsc/config/dmdcr_cfg.ini'

image.png

11、主备机创建dmasvrmal.ini

[dmdba@~]$ vi /dsc/config/dmasvrmal.ini
[MAL_INST1]
  MAL_INST_NAME            = ASM0  #ASM节点名
  MAL_HOST                 = 10.0.0.1  #心跳IP
  MAL_PORT                 = 5936  #MAL监听端口
[MAL_INST2]
  MAL_INST_NAME            = ASM1
  MAL_HOST                 = 10.0.0.2
  MAL_PORT                 = 5936

image.png

12、主备机创建dmdcr.ini

主机:

[dmdba@~]$  vi /dsc/config/dmdcr.ini
DMDCR_PATH                 = /dev/raw/raw1
DMDCR_MAL_PATH             = /dsc/config/dmasvrmal.ini
DMDCR_SEQNO                = 0  #当前节点序号(用来获取ASM登录信息)
DMDCR_AUTO_OPEN_CHECK      = 90  #指定时间内节点未启动,CSS将节点踢出,单位:秒
DMDCR_LINK_CHECK_IP        = 10.0.0.254  #第三方确认机器的IP(配置应用IP)

DMDCR_ASM_TRACE_LEVEL      = 2  #日志级别为INFO
#DMDCR_ASM_RESTART_INTERVAL = 30  #CSS认定ASM故障重启时间
#DMDCR_ASM_STARTUP_CMD      = /home/dmdba/dm/dmdbms/bin/DmASMSvrServiceASM start

#DMDCR_DB_RESTART_INTERVAL  = 60  #CSS认定DSC故障重启时间
#DMDCR_DB_STARTUP_CMD       = /home/dmdba/dm/dmdbms/bin/DmServiceDSC start

image.png
#备机:

[dmdba@~]$  vi /dsc/config/dmdcr.ini
DMDCR_PATH                 = /dev/raw/raw1
DMDCR_MAL_PATH             = /dsc/config/dmasvrmal.ini
DMDCR_SEQNO                = 1
DMDCR_AUTO_OPEN_CHECK      = 90
DMDCR_LINK_CHECK_IP        = 10.0.0.254
DMDCR_ASM_TRACE_LEVEL      = 2
#DMDCR_ASM_RESTART_INTERVAL = 30
#DMDCR_ASM_STARTUP_CMD      =/home/dmdba/dm/dmdbms/bin/DmASMSvrServiceASM start

#DMDCR_DB_RESTART_INTERVAL  = 60
#DMDCR_DB_STARTUP_CMD       = /home/dmdba/dm/dmdbms/bin/DmServiceDSC start

注意:当前为手动拉起1机器和2机器的ASM和DMSERVER服务。集群配置完成后,再修改为自动拉起(删除dmdcr.ini中红色井号)
image.png

13、主备机启动CSS、ASM服务

[dmdba@~]$   /home/dmdba/dm/dmdbms/bin/dmcss DCR_INI=/dsc/config/dmdcr.ini
[dmdba@~]$   /home/dmdba/dm/dmdbms/bin/dmasmsvr DCR_INI=/dsc/config/dmdcr.ini

14、创建DMASM磁盘组(主机)

[dmdba@~]$ /home/dmdba/dm/dmdbms/bin/dmasmtool DCR_INI=/dsc/config/dmdcr.ini
  ASM> create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
  ASM> create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'

image.png

15、主备机创建dminit.ini

[dmdba@~]$ vi /dsc/config/dminit.ini
DB_NAME                    = DAMENG  #数据库名
SYSTEM_PATH                = +DMDATA/data
MAIN                       = +DMDATA/data/DAMENG/MAIN.DBF
MAIN_SIZE                  = 128
ROLL                       = +DMDATA/data/DAMENG/ROLL.DBF
ROLL_SIZE                  = 128
SYSTEM                     = +DMDATA/data/DAMENG/SYSTEM.DBF
SYSTEM_SIZE                = 128
CTL_PATH                   = +DMDATA/data/DAMENG/dm.ctl
CTL_SIZE                   = 8
LOG_SIZE                   = 512  #REDO大小,单位MB
DCR_PATH                   = /dev/raw/raw1
DCR_SEQNO                  = 0
AUTO_OVERWRITE             = 1
PAGE_SIZE                  = 16  #页大小
EXTENT_SIZE                = 32  #簇大小
CASE_SENSITIVE             = Y  #大小写是否敏感。Y:敏感 N:不敏感
CHARSET                    = 0  #字符集。0:GB18030 1:UTF-8
SYSDBA_PWD                 = Dameng456
SYSAUDITOR_PWD             = Dameng456

[DSC0]
  CONFIG_PATH              = /dsc/config/dsc0_config
  PORT_NUM                 = 15236  #实例端口
  MAL_HOST                 = 10.0.0.1  #心跳IP
  MAL_PORT                 = 5336  #MAL监听端口
  LOG_PATH                 = +DMLOG/DAMENG0_01.log
  LOG_PATH                 = +DMLOG/DAMENG0_02.log
[DSC1]
  CONFIG_PATH              = /dsc/config/dsc1_config
  PORT_NUM                 = 15236
  MAL_HOST                 = 10.0.0.2
  MAL_PORT                 = 5336
  LOG_PATH                 = +DMLOG/DAMENG1_01.log
  LOG_PATH                 = +DMLOG/DAMENG1_02.log

16、初始化实例(主机)

[dmdba@~]$ /home/dmdba/dm/dmdbms/bin/dminit control=/dsc/config/dminit.ini
[dmdba@~]$ scp -r /dsc/config/dsc1_config dmdba@172.16.1.52:/dsc/config/

image.png
image.png

17、开启归档

#主机:

vi /dsc/config/dsc0_config/dm.ini 
ARCH_INI = 1
mkdir -p /dsc/arch0

#主机创建dmarch.ini

[dmdba@~]$ vi /dsc/config/dsc0_config/dmarch.ini
ARCH_LOCAL_SHARE           = 1  #本地归档是否共享给远程节点。0:不共享 1:共享
[ARCHIVE_LOCAL1]
  ARCH_TYPE                = LOCAL
  ARCH_DEST                = +DMDATA/data/arch0
  ARCH_FILE_SIZE           = 512
  ARCH_SPACE_LIMIT         = 1024
  ARCH_FLUSH_BUF_SIZE      = 32
[ARCHIVE_LOCAL2]
  ARCH_TYPE                = LOCAL  #本地归档类型
  ARCH_DEST                = /dsc/arch0  #本地归档路径
  ARCH_FILE_SIZE           = 512  #单个归档大小,单位MB
  ARCH_SPACE_LIMIT         = 1024  #归档上限,单位MB
  ARCH_FLUSH_BUF_SIZE      = 32  #归档合并刷盘缓存大小,单位MB
 [ARCHIVE_REMOTE]
  ARCH_TYPE                = REMOTE  #远程归档类型
  ARCH_DEST                = DSC1  #归档目标实例名
  ARCH_INCOMING_PATH       = +DMDATA/data/arch1  #远程归档在本节点的路径
  ARCH_FILE_SIZE           = 512
  ARCH_SPACE_LIMIT         = 1024
  ARCH_FLUSH_BUF_SIZE      = 32

image.png

#备机:

vi /dsc/config/dsc1_config/dm.ini 
ARCH_INI = 1
mkdir -p /dsc/arch1

#备机创建dmarch.ini

[dmdba@~]$ vi /dsc/config/dsc1_config/dmarch.ini
ARCH_LOCAL_SHARE           = 1
[ARCHIVE_LOCAL1]
  ARCH_TYPE                = LOCAL
  ARCH_DEST                = +DMDATA/data/arch1
  ARCH_FILE_SIZE           = 512
  ARCH_SPACE_LIMIT         = 1024
  ARCH_FLUSH_BUF_SIZE      = 32
[ARCHIVE_LOCAL2]
  ARCH_TYPE                = LOCAL
  ARCH_DEST                = /dsc/arch1
  ARCH_FILE_SIZE           = 512
  ARCH_SPACE_LIMIT         = 1024
  ARCH_FLUSH_BUF_SIZE      = 32
[ARCHIVE_REMOTE]
  ARCH_TYPE                = REMOTE
  ARCH_DEST                = DSC0
  ARCH_INCOMING_PATH       = +DMDATA/data/arch0
  ARCH_FILE_SIZE           = 512
  ARCH_SPACE_LIMIT         = 1024
  ARCH_FLUSH_BUF_SIZE      = 32

image.png

18、主备机启动DMSERVER服务

#主机:

[dmdba@~]$/home/dmdba/dm/dmdbms/bin/dmserver /dsc/config/dsc0_config/dm.ini dcr_ini=/dsc/config/dmdcr.ini

image.png

#备机

[dmdba@~]$/home/dmdba/dm/dmdbms/bin/dmserver /dsc/config/dsc1_config/dm.ini dcr_ini=/dsc/config/dmdcr.ini

image.png

19、注册服务(主备机)

(1)exit退出所有前台服务。
(2)取消dmdcr.ini文件中的4个#号。

[dmdba@~]$vi /dsc/config/dmdcr.ini

image.png

主机:

[root@~]#/home/dmdba/dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dsc/config/dmdcr.ini -p CSS
[root@~]#/home/dmdba/dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dsc/config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]#/home/dmdba/dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dsc/config/dsc0_config/dm.ini -dcr_ini /dsc/config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC

image.png
备机:

[root@~]#/home/dmdba/dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dsc/config/dmdcr.ini -p CSS
[root@~]#/home/dmdba/dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dsc/config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]#/home/dmdba/dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dsc/config/dsc1_config/dm.ini -dcr_ini /dsc/config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC

image.png

20、配置监视器

(1)主备机创建dmcssm.ini

[dmdba@~]$  vi /home/dmdba/dm/dmdbms/bin/dmcssm.ini
CSSM_OGUID                 = 45331  #消息标识
CSSM_CSS_IP                = 10.0.0.1:5636
CSSM_CSS_IP                = 10.0.0.2:5636
CSSM_LOG_PATH              = ../log
CSSM_LOG_FILE_SIZE         = 128  #单个日志大小,单位MB
CSSM_LOG_SPACE_LIMIT       = 512  #日志上限,单位MB

(2)CSSM用法
image.png
(3)CSSM启动方式

[dmdba@~]$/home/dmdba/dm/dmdbms/bin/dmcssm /home/dmdba/dm/dmdbms/bin/dmcssm.ini

21、赋予权限

主备机:

[root@~]# sudo setcap cap_net_raw,cap_net_admin=eip /home/dmdba/dm/dmdbms/bin/dmserver

22、集群的启停

#启动,主备机:

[dmdba@~]$ /home/dmdba/dm/dmdbms/bin/DmCSSServiceCSS start

说明:CSS启动后30秒自动拉起ASM,60秒自动拉起DMSERVER。
image.png
image.png

#停止CSSM:

[dmdba@~]$/home/dmdba/dm/dmdbms/bin/dmcssm /home/dmdba/dm/dmdbms/bin/dmcssm.ini
执行:ep stop GRP_DSC
执行:ep stop GRP_ASM

image.png
主备机:

[dmdba@~]$/home/dmdba/dm/dmdbms/bin/DmCSSServiceCSS stop

说明:
1)在执行ep stop GRP_DSC和ep stop GRP_ASM后,尽快停止CSS,避免被自动拉起。
2)服务全部停止后,检查进程。

四、DSC集群故障处理

4.1测试单个集群节点故障

4.1.1.关闭一台服务器

查看DSC集群状态
image.png
可以看到两个节点数据库实例都是open状态,并且检测状态ok

现在手动关闭一台服务器,查看DSC1上监视器输出内容
image.png
集群检测到DSC0发生故障,将该节点设为故障节点,并且由于DSC0为控制节点,故障后集群重新选择DSC1为控制节点;

再次查看数据库集群,发现数据库DSC0节点的ASM和实例状态都报ERROR了
image.png

启动服务器后,DSC0节点重新加入集群
image.png
并且ASM和实例状态都恢复正常,但是控制节点任然是DSC1
image.png

4.1.2.关闭数据库实例

手动kill DSC0节点的数据库实例
image.png

CSS 通过心跳超时(60秒)发现 DSC0 失联,强制杀死 DSC0 进程,并将其标记为故障,DSC1 接管控制权,执行崩溃恢复,所有未完成事务被正确处理,集群进入可接受故障节点重新加入的状态。
image.png

DSC集群会尝试重启故障实例和ASM进程
image.png

再次查看DSC集群状态,已恢复正常
image.png

4.1.3.关闭ASM实例

手动关闭DSC1的ASM实例进程
image.png

CSS 通过心跳超时(60秒)发现 ASM1 失联,强制杀死 ASM1 进程,并将其标记为故障EP,向故障节点发送 SYS HALT 强制停止,在存活节点执行 EP_CRASH 进行集群修复,回滚未提交事务,清理已提交事务,清理命令队列,完成故障处理。
image.png

集群开始拉起故障ASM进程
image.png

建议手动重启db2节点的所有服务
image.png

再次查看DSC集群状态
image.png

4.1.4.关闭DMCSS进程

手动关闭dmcss进程
image.png

系统检测到ASM1和DSC1在打开过程中发生故障,分别执行崩溃清理并完成恢复,均允许重新加入;随后CSS1因心跳超时被判定为死实例,被排除集群并启动崩溃恢复,最终整个CSS1组被认定为故障。且不会自动拉起dmcss进程。
image.png

查询集群状态
image.png
发现dmcss进程、ASM实例、数据库实例都报错了

手动拉起dmcss进程
image.png

当手动启动dcss进程后,DSC集群会自动拉起数据库实例和ASM实例,并最终加入集群;
image.png

查询集群状态
image.png

4.2测试集群心跳网络不通

查看当前数据库集群状态
image.png
手动关闭10.0.0.0段的网卡
image.png
image.png

DB组件发起对DSC0和DSC1的链路检查,检测到DSC1故障并标记为故障EP,随后对其下达系统停机命令,并向健康的DSC0下发崩溃清理命令以回滚活动事务和清除已提交事务;完成所有命令清除,最终确认故障处理完成,允许DSC1重新加入集群
image.png
且DSC集群并未尝试重启故障节点的数据库实例和ASM实例

再次查看DSC集群状态,发现数据库实例和ASM实例都显示ERROR,且active显示FALSE
image.png
再次打开10.0.0.0段的网卡后,DSC启动故障节点重加入流程,先对ASM1执行暂停工作线程、加载配置、启动和打开等恢复操作,随后CSS1重启本地DB实例,接着对DSC1执行类似流程(含DCR_LOAD、启动和打开等),最终该故障节点DSC1成功重新加入集群。
image.png

再次查看集群状态
image.png

总结:
DSC集群在数据库实例和ASM实例发生故障时会尝试拉起实例进程,而在服务器关机,心跳网络不通时则不会尝试重启实例进程;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服