注册
DMDSC部署测试
专栏/技术分享/ 文章详情 /

DMDSC部署测试

Eric 2025/09/19 83 0 0
摘要

DMDSC

1 共享存储集群介绍

1.1 DMDSC

DM 共享存储数据库集群的英文全称 DM Data Shared Cluster,简称 (DMDSC)。DMDSC 允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。并支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供。

DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件,这些文件保存在共享存储上,各个节点有自己独立的联机日志和归档日志,联机日志和归档日志都需要保存在共享存储上。

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

DMDSC 主要特点包括:

  • 高可用性:只要集群中有一个活动节点,就能正常提供数据库服务。此外,当出现磁盘损坏或数据丢失时,既可以利用其他镜像副本继续提供数据库服务,又可以使用其他镜像副本进行数据恢复。
  • 高吞吐量:多个节点同时提供数据库服务,有效提升集群的整体事务处理能力。
  • 负载均衡:一方面,通过巧用服务名,用户的连接请求被平均分配到集群中的各个节点,确保连接负载平衡;另一方面,条带化技术可保证写入的数据均匀分布到磁盘组内的不同磁盘中,实现数据负载均衡。

1.2 DMCSS

达梦集群同步服务(Dameng Cluster Synchronization Services,简称 DMCSS)使用 DMASM 集群或 DMDSC 集群都必须配置 DMCSS 服务。在 DMASM 集群或 DMDSC 集群中,每个节点都需要配置一个 DMCSS 服务。这些 DMCSS 服务自身也构成一个集群,DMCSS 集群中负责监控、管理整个 DMASM 集群和 DMDSC 集群的节点称为控制节点(Control Node),其他 DMCSS 节点称为普通节点(Normal Node)。DMCSS 普通节点不参与 DMASM 集群和 DMDSC 集群管理,当 DMCSS 控制节点故障时,会从活动的普通节点中重新选取一个 DMCSS 控制节点。

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

DMCSS 主要功能包括:写入心跳信息、选举 DMCSS 控制节点、选取 DMASM/DMDSC 控制节点、管理被监控对象的启动流程、集群状态监控、节点故障处理、节点重加入等,DMCSS 还可以接收并执行 DMCSSM 指令。

1.3 DMASM

1.3.1 DMASM介绍

DM 自动存储管理器(DM Auto Storage Manager,简称 DMASM)是一个专用的分布式文件系统。DMDSC 如果直接使用块设备作为共享存储来存放数据库文件,会因为块设备本身的诸多功能限制,造成 DMDSC 集群在使用、维护上并不是那么灵活方便。为克服块设备的这些使用限制。

其中块设备(例如裸设备)它不支持动态扩展文件大小,导致创建文件时必须预分配固定空间,导致无法随数据增长自动扩容,每个文件需要独占整个块设备,导致存储空间浪费。

DM 专门设计了一款分布式文件系统 DMASM,来管理块设备的磁盘和文件。DMASM 的出现为 DMDSC 灵活管理和使用块设备提供了完美的解决方案。

使用 DMASM 自动存储管理方案,可以帮助用户更加便捷地管理 DMDSC 集群的数据库文件。DMASM 的主要部件包括:提供存储服务的块设备、DMASMSVR 服务器、DMASMAPI 接口、初始化工具 DMASMCMD 和管理工具 DMASMTOOL 等。

1.3.2 DMASM镜像介绍

共享存储上的数据非常宝贵,为了保障这些数据的安全性和高可用性,达梦提供了 DMASM 镜像功能。镜像是 DMASM 的一个重要功能。

DMASM 镜像提供了多副本条带化功能。多副本技术保证同一数据的多个副本会分别写入到不同的磁盘中。多个副本中只有一个作为主副本对外提供服务,其余副本均作为镜像副本。当主副本发生故障后,系统会从镜像副本中重新自动挑选一个继续提供服务。条带化技术可保证写入的数据均匀分布到磁盘组内的不同磁盘中,实现负载均衡。

DMDSC 采用配置镜像功能的 DMASM 管理的块设备作为共享存储,当出现磁盘损坏或数据丢失时,既可以利用其他镜像副本继续提供数据库服务,又可以使用其他镜像副本进行数据恢复。

2 安装部署DMDSC

2.1 创建共享磁盘

首先我们在Windows上需要先创建共享磁盘,在上面我们提到了我们所需要的共享磁盘空间,我们使用VMware自带的工具vmware-vdiskmanager来创建共享磁盘,这里我们选择的是厚置备来创建磁盘,同时是按照标准流程创建了5类磁盘:数据盘、DCR盘、VOTE盘、REDO日志盘和归档日志盘。创建多个独立共享磁盘(数据磁盘、DCR 磁盘、VOTE 磁盘、REDO 日志磁盘、归档日志磁盘)而非单一大型共享磁盘,是出于 ​架构设计、性能优化、故障隔离与管理便捷性​ 的核心考量。

磁盘类型 用途 重要性
数据磁盘 存储数据库数据文件(表空间、索引等) 核心业务数据载体,需高性能读写支持
DCR 磁盘 存储集群配置元数据(节点信息、组状态) 集群大脑,丢失将导致集群无法启动或管理失控
VOTE 磁盘 用于节点心跳检测和故障仲裁(判断节点存活状态) 高可用基石,单点故障可能触发误判导致节点被驱逐
REDO 日志磁盘 存储联机重做日志(事务实时记录) 数据一致性关键,写入延迟直接影响事务提交速度
归档日志磁盘 存储已切换的归档日志(用于备份恢复) 保障数据可恢复性,与联机日志物理分离避免 I/O 竞争
# 数据磁盘(10G) .\vmware-vdiskmanager.exe -c -s 10g -a lsilogic -t 2 "D:\VMareMachine\dsc1\sharedisk\share-data0.vmdk" # DCR磁盘(5G) .\vmware-vdiskmanager.exe -c -s 5g -a lsilogic -t 2 "D:\VMareMachine\dsc1\sharedisk\share-dcr.vmdk" # vote磁盘(5G) .\vmware-vdiskmanager.exe -c -s 5g -a lsilogic -t 2 "D:\VMareMachine\dsc1\sharedisk\share-vote.vmdk" # redo日志磁盘(10G) .\vmware-vdiskmanager.exe -c -s 10g -a lsilogic -t 2 "D:\VMareMachine\dsc1\sharedisk\share-log0.vmdk" # 归档日志磁盘(10G) .\vmware-vdiskmanager.exe -c -s 10g -a lsilogic -t 2 "D:\VMareMachine\dsc1\sharedisk\share-arch0.vmdk" # -c:表示创建一个新的虚拟磁盘。 # -s 10g:指定虚拟磁盘的大小为10GB。 # -a lsilogic:指定虚拟磁盘的适配器类型为 LSI Logic(这是一个 SCSI 控制器)。 # -t 2:指定虚拟磁盘的类型。类型 2 表示“growable”虚拟磁盘,即磁盘文件在创建时很小,但随着数据的增加而增长,直到达到指定的最大大小。 # "D:\...\.vmdk":指定虚拟磁盘文件的路径和名称。

I0yH3XnV6G0tREhFy_ZuSkCjg9fgN3rDvBBwOjwULQ.png

D76bAdvsZ6o9bs9oZBN3XAh75TFlLi1Rwb9iGh8Dq0.png

2.2 配置虚拟机

首先先关闭dsc1和dsc2两台虚拟机,然后进行修改dsc1.vmx和dsc2.vmx的配置文件,在末尾处添加共享磁盘配置:

# shared disks configure # 共享磁盘配置区块开始 — 用于在多台 VM 之间共享同一组 VMDK diskLib.dataCacheMaxSize=0 # 禁用磁盘数据缓存;0 表示不使用宿主缓存,确保 I/O 直接写入宿主存储以降低数据不一致风险 diskLib.dataCacheMaxReadAheadSize=0 # 关闭预读(read-ahead)最大值,避免自动预读导致额外 I/O diskLib.dataCacheMinReadAheadSize=0 # 关闭预读最小阈值,配合上面完全关闭预读行为 diskLib.dataCachePageSize=4096 # 缓存页大小(字节),当启用缓存时按此粒度工作(这里为 4KB) diskLib.maxUnsyncedWrites = "0" # 不允许未同步写(unsynced writes),强制写入同步刷盘,优先数据一致性 disk.locking = "FALSE" # 禁用 VMware 文件锁定机制,允许多个 VM 打开同一 VMDK(用于测试/共享场景)。风险:可能导致并发写冲突或数据损坏 scsi1.sharedBus = "virtual" # 将 SCSI 控制器设置为虚拟共享总线,使多台 VM 能通过同一控制器共享磁盘 scsi1.present = "TRUE" # 表示该 SCSI 控制器已启用并附加到虚拟机 scsi1.virtualDev = "lsilogic" # SCSI 控制器的虚拟设备类型为 LSI Logic(Guest 端应使用对应驱动) # 数据磁盘 # 用于存放业务/数据文件的共享磁盘 scsi1:0.mode = "independent-persistent" # 磁盘为 independent-persistent,不随 VM 快照回滚或被快照影响,写入持久化 scsi1:0.deviceType = "disk" # 设备类型为磁盘(vmdk) scsi1:0.present = "TRUE" # 该磁盘条目启用并附加到 VM scsi1:0.fileName = "D:\\VMareMachine\\dsc1\\sharedisk\\share-data0.vmdk" # 指向 VMDK 描述文件路径。多台 VM 指向同一路径即可实现共享(宿主必须能访问该路径) scsi1:0.redo = "" # redo 为空表示不使用 redo/覆盖快照文件(无单独的 redo 文件) # DCR磁盘 # DCR(Distributed Consensus/Coordination)或仲裁相关磁盘 scsi1:1.mode = "independent-persistent" scsi1:1.deviceType = "disk" scsi1:1.present = "TRUE" scsi1:1.fileName = "D:\\VMareMachine\\dsc1\\sharedisk\\share-dcr.vmdk" scsi1:1.redo = "" # 同上,指向仲裁/协调用途的共享 VMDK # vote磁盘 # 用于集群投票/仲裁的小磁盘(通常很小) scsi1:2.mode = "independent-persistent" scsi1:2.deviceType = "disk" scsi1:2.present = "TRUE" scsi1:2.fileName = "D:\\VMareMachine\\dsc1\\sharedisk\\share-vote.vmdk" scsi1:2.redo = "" # redo日志磁盘 # 用于写 redo/回滚日志的共享磁盘(数据库/集群日志) scsi1:3.mode = "independent-persistent" scsi1:3.deviceType = "disk" scsi1:3.present = "TRUE" scsi1:3.fileName = "D:\\VMareMachine\\dsc1\\sharedisk\\share-log0.vmdk" scsi1:3.redo = "" # 归档日志磁盘 # 用于归档日志(archive log)存放的共享磁盘 scsi1:4.mode = "independent-persistent" scsi1:4.deviceType = "disk" scsi1:4.present = "TRUE" scsi1:4.fileName = "D:\\VMareMachine\\dsc1\\sharedisk\\share-arch0.vmdk" scsi1:4.redo = ""

2.3 共享磁盘配置验证

在编辑虚拟机设置中进行查看是否有刚刚配置的新增额5块共享磁盘

II2_Ykrq_Yeqv0xIlF5LEXQIX43Jo4Nux_vD5g2saJ8.png

同时我们可以在虚拟机中通过命令行进行查看fdisk -l | grep dev/sd*

zaWJrUd5DrngIqLuJNhcsGVDspo2Av94fyG3QkwPnBE.png

3 安装dm8

按照正常的步骤创建dmdba用户并挂载安装。

4 磁盘绑定

4.1 获取磁盘scsi_id(双节点执行)

查询并记录下每块磁盘的唯一 ID。

/usr/lib/udev/scsi_id -g -u /dev/sdb # 数据磁盘 /usr/lib/udev/scsi_id -g -u /dev/sdc # DCR磁盘 /usr/lib/udev/scsi_id -g -u /dev/sdd # vote磁盘 /usr/lib/udev/scsi_id -g -u /dev/sde # redo日志磁盘 /usr/lib/udev/scsi_id -g -u /dev/sdf # 归档日志磁盘

对于dsc1的查询:

tfByuJeuZMQv00KrCevpTo5ErNiSwx5G0tUeZKnIZrA.png

对于dsc2的查询:

tfByuJeuZMQv00KrCevpTo5ErNiSwx5G0tUeZKnIZrA.png

得到结果为:

[root@localhost ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb # 数据磁盘 36000c2908dbf17207b822f4c3c9922af [root@localhost ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc # DCR磁盘 36000c29ced26b56f38c75800f9a6e41a [root@localhost ~]# /usr/lib/udev/scsi_id -g -u /dev/sdd # vote磁盘 36000c29bc8498ff0dd3cc2e9cdf68b22 [root@localhost ~]# /usr/lib/udev/scsi_id -g -u /dev/sde # redo日志磁盘 36000c290b9a82bd4ec44a6b205fb7ff7 [root@localhost ~]# /usr/lib/udev/scsi_id -g -u /dev/sdf # 归档日志磁盘 36000c29cc86e6a82f8c3359078f398c1

4.2 创建udev规则文件(两个节点都要执行)

vi /etc/udev/rules.d/99-dm-asmdevices.rules

为每块磁盘添加配置规则,绑定别名并赋予dmdba权限,记得替换自己的实际ID。

这里并没有对于归档磁盘进行绑定是因为我们可以在dmarch.ini中自己进行绑定将归档指向我们指定的共享磁盘。

# DCR磁盘 KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29ced26b56f38c75800f9a6e41a",SYMLINK+="DCR", OWNER="dmdba", GROUP="dinstall", MODE="0660", RUN+="/bin/sh -c 'chown dmdba:dinstall /dev/$name;mkdir -p /dev_DSC; ln -s /dev/DCR /dev_DSC/DCR'" # VOTE磁盘 KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29bc8498ff0dd3cc2e9cdf68b22",SYMLINK+="VOTE", OWNER="dmdba", GROUP="dinstall", MODE="0660", RUN+="/bin/sh -c 'chown dmdba:dinstall /dev/$name; ln -s /dev/VOTE /dev_DSC/VOTE'" # 数据磁盘 KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2908dbf17207b822f4c3c9922af",SYMLINK+="DMDATA", OWNER="dmdba", GROUP="dinstall", MODE="0660", RUN+="/bin/sh -c 'chown dmdba:dinstall /dev/$name; ln -s /dev/DMDATA /dev_DSC/DMDATA'" # redo日志磁盘 KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c290b9a82bd4ec44a6b205fb7ff7",SYMLINK+="DMLOG", OWNER="dmdba", GROUP="dinstall", MODE="0660", RUN+="/bin/sh -c 'chown dmdba:dinstall /dev/$name; ln -s /dev/DMLOG /dev_DSC/DMLOG ; chown -R dmdba:dinstall /dev_DSC '"

4.3 生效规则并验证

#生效udev规则 udevadm control --reload-rules && udevadm trigger # 验证磁盘链接 ls -lth /dev_DSC

成功状态会显示DCR、VOTE、DMDATA、DMLOG的符号链接并且是dmdba的权限如下图所示:

nY1Be5QkFsJDynVbDroPybs7MKMweAPw6IgxneFj1o.png

5 DCR配套与初始化

5.1 创建DCR配置文件

创建DCR配置文件dmdcr_cfg.ini 定义 CSS、ASM、DB 三个组的节点信息、端口号及磁盘路径。

su - dmdba #使用dmdba用户,确保权限 mkdir -p /home/dmdba/config #新建config路径,后续配置文件基本都放这里 vi /home/dmdba/config/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.103.134 DCR_EP_PORT = 9836 [GRP_CSS] DCR_EP_NAME = CSS1 DCR_EP_HOST = 192.168.103.135 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_HOST = 192.168.103.134 DCR_EP_PORT = 5836 DCR_EP_ASM_LOAD_PATH = /dev_DSC DCR_EP_SHM_KEY = 42424 DCR_EP_SHM_SIZE = 200 [GRP_ASM] DCR_EP_NAME = ASM1 DCR_EP_HOST = 192.168.103.135 DCR_EP_PORT = 5837 DCR_EP_ASM_LOAD_PATH = /dev_DSC DCR_EP_SHM_KEY = 42425 DCR_EP_SHM_SIZE = 200 [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 = 5236 [GRP_DSC] DCR_EP_NAME = DSC02 DCR_EP_SEQNO = 1 DCR_EP_PORT = 5236

5.2 初始化磁盘组(只在节点1执行)

cd /home/dmdba/dmdbms/bin ./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 '[数据库密码]' init votedisk '/dev_DSC/VOTE' from '/home/dmdba/config/dmdcr_cfg.ini'

uyTKWHfKVLcJV8HUbnXrGU4AG5_BEHUkSfb99eSs.png

6 集群服务配置

6.1 配置MAL系统(双节点执行)

创建并编辑dmasvrmal.ini,配置ASM节点IP与端口

vi /home/dmdba/config/dmasvrmal.ini
[MAL_INST1] MAL_INST_NAME = ASM0 MAL_HOST = 192.168.103.134 MAL_PORT = 4836 [MAL_INST2] MAL_INST_NAME = ASM1 MAL_HOST = 192.168.103.135 MAL_PORT = 4837

6.2 配置DCR启动文件

节点1配置

su - dmdba vi /home/dmdba/config/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

节点2配置

su - dmdba mkdir /home/dmdba/config #dsc2还没新建,这里新建一下路径 vi /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

7 启动集群服务

7.1 启动DMCSS服务(双节点执行)

cd /home/dmdba/dmdbms/bin ./dmcss DCR_INI=/home/dmdba/config/dmdcr.ini

T9mUt04pgNQuy2PmnDt1ZMxpPG1bkaxFS8M8AjegUI.png

fh4dDwlE2i0P0c3zXrqKGEXHlehhVjPXs4tBmrLsjBs.png

7.2 启动DMASM服务(双节点)

警告:上一小节的终端窗口需要保留前台运行,此处新建两个新的终端窗口执行。

su - dmdba cd /home/dmdba/dmdbms/bin ./dmasmsvr DCR_INI=/home/dmdba/config/dmdcr.ini

💡提示:成功会显示"the ASM server is Ready"

vUCpi_sQMpO5bt8_sLKmWyUkZ0c95xd10Q05JkM3DSs.png

epftkNZOt4uWFR8B8vmqsBzFXfapinG1EC1FXqkktXA.png

7.3 创建ASM磁盘组(节点1执行)

su - dmdba cd /home/dmdba/dmdbms/bin ./dmasmtool DCR_INI=/home/dmdba/config/dmdcr.ini

同样在ASM中逐行执行指令

CREATE DISKGROUP DMDATA asmdisk '/dev_DSC/DMDATA' CREATE DISKGROUP DMLOG asmdisk '/dev_DSC/DMLOG'

i0Mgbg88Bg9CwGZ9Gr0f6_JaLzPD7XXQ87vW4e_dzk.png

8 数据库实例初始化与启动

8.1 创建初始化配置文件(节点1)

编辑dminit.ini,定义数据库名、路径、日志组、DCR 信息、两节点端口等。

su - dmdba vi /home/dmdba/config/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=[PASSWORD] SYSAUDITOR_PWD=[PASSWORD] [DSC01] CONFIG_PATH= /home/dmdba/config/DSC01_conf PORT_NUM = 5236 MAL_HOST= [DSC1_IP] MAL_PORT= 6536 LOG_PATH= +DMLOG/log/DSC01_log1.log LOG_PATH= +DMLOG/log/DSC01_log2.log [DSC02] CONFIG_PATH= /home/dmdba/config/DSC02_conf PORT_NUM = 5237 MAL_HOST= [DSC2_IP] MAL_PORT= 6537 LOG_PATH= +DMLOG/log/DSC02_log1.log LOG_PATH= +DMLOG/log/DSC02_log2.log

8.2 初始化数据库实例(节点1执行)

cd /home/dmdba/dmdbms/bin ./dminit control=/home/dmdba/config/dminit.ini

wKFOWBh8BHLl0AMDoYOlL4MbQ4m8_whqfXXJIVnPY.png

8F17F5ftOHt9caq_7Bjm3MngCGzbgTcOpFl0uT254K4.png

8.3 复制DSC02_conf 配置文件夹到节点2

直接复制或scp都可以

8.4 启动数据库实例(双节点)

节点1

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

节点2

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

bqaMz2NqIDm8w4VRvsUgXoPEud5l4dD12JlKdsG53ck.png

XnQVZctfyEJivJUXbNrNuqKeijJoJGbrDExtS_5DzI.png

9 集群监控配置

9.1 创建日志目录

mkdir -p /home/dmdba/dm/cssmlog

9.2 创建监视器配置文件

dmcssm.ini 定义OGUID、CSS 节点 IP、日志路径等。

vi /home/dmdba/config/dmcssm.ini

添加内容(OGUID 需要与dmdcr_cfg.ini 一致)

CSSM_OGUID = 63635 CSSM_CSS_IP = [DSC1_IP]:9836 CSSM_CSS_IP = [DSC2_IP]:9837 CSSM_LOG_PATH = /home/dmdba/dm/cssmlog CSSM_LOG_FILE_SIZE = 32 CSSM_LOG_SPACE_LIMIT = 0

9.3 启动监视器

cd /home/dmdba/dmdbms/bin ./dmcssm INI_PATH=/home/dmdba/config/dmcssm.ini

成功启动后可查看集群状态,包括各节点服务运行情况、磁盘组状态等

MGRJKhUG4DhxJrYLkSJyqOsgtoL_RsH_Ld1wzLFwrE.png

10 模拟某一个实例宕机

此时在监视器上看到服务都是正常的

H5RPqDK71kACFvjCNodsUJQKSORXGNlOWbeVerqypBo.png

然后我们通过ps来查找我们该节点上的数据库实例进程并强制kill掉来看看我们的dsc集群会进行什么操作

ps -ef |grep dmserver kill -s 11 数据库进程号

CV7rMiwWFDvy6lqBOTjNy1L5jngmkhug5YnYjoid60.png

上面的输出表示:

    节点运行中 --> 节点故障: DSC02被kill
    节点故障 --> 集群检测: CSS检测到节点宕机
    集群检测 --> 隔离故障节点: 标记DSC02为故障EP
    隔离故障节点 --> 终止进程: Kill故障节点进程
    终止进程 --> 启动恢复流程: 向DSC01发送EP_CRASH
    启动恢复流程 --> 清理状态: 发送CMD CLEAR
    清理状态 --> 恢复完成: 事务回滚&purge完成
    恢复完成 --> 允许重加入: 故障节点可重新加入

此时我们的节点1仍然可以正常的进行读写操作:

3WHYwyQ_RYVksVsan9wGXn5P4Gnh9elwTJhcBfLztc.png

然后我们再让节点2进行重新加入,模拟我们故障处理过后进行的节点恢复。

w74rnCItLWE47VljqlI_xphnRkynUigEuYIJqixYo.png

DT2HBcb168sKjsA6LMhs0RjkwZ2usJlQ8D9tPtD_b0.png

从上面我们可以看到这里我们在3.9秒内完成了节点的重进入,现在两个节点都可以进行正常访问数据库了。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服