注册
基于 VMware + CentOS7 搭建达梦 DMDSC 双机共享存储集群
专栏/技术分享/ 文章详情 /

基于 VMware + CentOS7 搭建达梦 DMDSC 双机共享存储集群

LyC_Dd 2025/08/22 92 0 0
摘要

基于 VMware + CentOS7 搭建达梦 DMDSC 双机共享存储集群

本文记录了基于VMware+CentOS7在windows笔记本上搭建达梦DMDSC共享存储集群的全流程,并附上注释,便于读者理解与复现。本文中IP、密码等敏感信息已用[内容]代替,请仔细阅读。


一、环境准备

1.1 系统与软件版本

  • 虚拟机操作系统:CentOS-7-x86_64-Minimal-2207-02
  • 数据库版本:dm8_20250506_x86_rh7_64
  • 虚拟化平台:VMware Workstation 17 pro (17.6.4 build-24832109)

1.2 创建虚拟机

💡提示:推荐创建SCSI类型磁盘,如下图。

20250814100836imagepng20250814100844imagepng


二、磁盘规划

裸设备名 容量 用途 对应共享磁盘文件
/dev/sdb 10G 数据磁盘(/dev/asmdata0) share-data0.vmdk
/dev/sdc 5G DCR 磁盘(/dev/asmdcr) share-dcr.vmdk
/dev/sdd 5G Vote 磁盘(/dev/asmvote) share-vote.vmdk
/dev/sde 10G Redo 日志磁盘(/dev/asmlog0) share-log0.vmdk
/dev/sdf 10G 归档日志磁盘(/dev/asmarch0) share-arch0.vmdk

三、共享磁盘配置

3.1 创建共享磁盘存放目录(物理机操作)

在物理机存放vm虚拟机的路径下找到dsc1存放路径,并在下面新建目录sharedisk

#根据自身实际修改路径 mkdir -p D:\VMwareVM\dsc1\sharedisk

💡提示:直接在资源管理器新建文件夹也可以,目录名也可自拟

注意:需右键VMware目录→属性→安全→编辑,添加"Everyone"并赋予完全控制权限,否则会出现"文件未找到"错误

20250815143354imagepng

3.2 创建共享磁盘文件(物理机操作)

在VMware安装路径下打开cmd

20250815143713imagepng

使用VMware自带工具vmware-vdiskmanager创建共享磁盘(预分配厚置备类型,厚置备和薄置备:有何区别? – techsyncer):

# 数据磁盘(10G) .\vmware-vdiskmanager.exe -c -s 10g -a lsilogic -t 2 "D:\VMwareVM\dsc1\sharedisk\share-data0.vmdk" # DCR磁盘(5G) .\vmware-vdiskmanager.exe -c -s 5g -a lsilogic -t 2 "D:\VMwareVM\dsc1\sharedisk\share-dcr.vmdk" # vote磁盘(5G) .\vmware-vdiskmanager.exe -c -s 5g -a lsilogic -t 2 "D:\VMwareVM\dsc1\sharedisk\share-vote.vmdk" # redo日志磁盘(10G) .\vmware-vdiskmanager.exe -c -s 10g -a lsilogic -t 2 "D:\VMwareVM\dsc1\sharedisk\share-log0.vmdk" # 归档日志磁盘(10G) .\vmware-vdiskmanager.exe -c -s 10g -a lsilogic -t 2 "D:\VMwareVM\dsc1\sharedisk\share-arch0.vmdk"
  • .\vmware-vdiskmanager.exe:执行程序(VMware 虚拟磁盘管理工具)。

  • -c创建新虚拟磁盘(create)。

  • -s 10g:指定磁盘大小为 10 GB(可用 k/m/g 单位)。

  • -a lsilogic:指定虚拟磁盘连接的控制器类型(此处为 LSI Logic SCSI)。

  • -t 2:指定磁盘格式/分配方式2(预分配/单文件 thick,立即占用全部空间)。

  • "D:\...\share-data0.vmdk":输出的 vmdk 描述文件路径(有空格时需引号);实际数据通常在同目录生成 *-flat.vmdk

20250814105803imagepng20250815144309imagepng

3.3 配置虚拟机vmx文件

关闭dsc1和dsc2两台虚拟机。确认为关闭状态,否则修改可能不生效。

20250815144447imagepng

编辑两台虚拟机的配置文件(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:\\VMwareVM\\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:\\VMwareVM\\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:\\VMwareVM\\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:\\VMwareVM\\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:\\VMwareVM\\dsc1\\sharedisk\\share-arch0.vmdk" scsi1:4.redo = ""

20250814110453imagepng

3.4 验证配置

3.4.1 虚拟机层面验证

启动虚拟机后,通过"编辑虚拟机设置"确认新增5块共享磁盘

20250814110541imagepng

3.4.2 Linux系统层面验证

双节点执行以下命令,确认磁盘识别为/dev/sdb至/dev/sdf

20250814110705imagepng

20250814110715imagepng


四、安装dm8

dsc1dsc2两台机器上分别安装dm8。

4.1 调整最大打开文件数

ulimit -n 65536

4.2 创建数据库用户

useradd dmdba passwd dmdba

4.3 挂载安装镜像并安装

mount -o loop /home/dm8_20250506_x86_rh7_64.iso /mnt su - dmdba cd /mnt ./DMInstall.bin -i

4.4 安装后执行 root 安装脚本拉起服务

/home/dmdba/dmdbms/script/root/root_installer.sh

默认安装路径 /home/dmdba/dmdbms

参考安装流程:安装前准备 | 达梦技术文档


五、磁盘绑定(udev规则配置)

5.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 # 归档日志磁盘

20250814142438imagepng

20250814142449imagepng

# 数据磁盘 36000c292a46f68fa3b77b8f0c19251ef # DCR磁盘 36000c2943fca00d21f0ab2f2ba3ec09f # vote磁盘 36000c294fb42df2d83bc3c581bcc16c4 # redo日志磁盘 36000c29e3f41d3f64f764ce892daec61 # 归档日志磁盘 36000c291061ba82232b510008694ea14

5.2 创建udev规则文件

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

为每块磁盘添加匹配规则,绑定别名并赋予 dmdba 权限。

# DCR磁盘 KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2943fca00d21f0ab2f2ba3ec09f",SYMLINK+="DCR", OWNER="dmdba", GROUP="dmdba", MODE="0660", RUN+="/bin/sh -c 'chown dmdba:dmdba /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=="36000c294fb42df2d83bc3c581bcc16c4",SYMLINK+="VOTE", OWNER="dmdba", GROUP="dmdba", MODE="0660", RUN+="/bin/sh -c 'chown dmdba:dmdba /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=="36000c292a46f68fa3b77b8f0c19251ef",SYMLINK+="DMDATA", OWNER="dmdba", GROUP="dmdba", MODE="0660", RUN+="/bin/sh -c 'chown dmdba:dmdba /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=="36000c29e3f41d3f64f764ce892daec61",SYMLINK+="DMLOG", OWNER="dmdba", GROUP="dmdba", MODE="0660", RUN+="/bin/sh -c 'chown dmdba:dmdba /dev/$name; ln -s /dev/DMLOG /dev_DSC/DMLOG ; chown -R dmdba:dmdba /dev_DSC '"

警告:需要将RESULT替换为自己的实际ID。

规则解释

  • PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name"
    在匹配前运行外部程序并取得其输出作为后续匹配依据。常用来获取设备的 WWID/唯一 ID。$name 会被替换为设备名(如 sdb)。

  • RESULT=="36000c29..."
    PROGRAM 的输出比较;当程序输出等于此值时条件成立。通常是设备的 WWID/唯一标识,用于精确识别具体物理/虚拟磁盘。

  • SYMLINK+="DCR"
    /dev 下创建一个符号链接 /dev/DCR 指向匹配的设备节点(不会删除已有节点)。+= 表示追加。

  • OWNER="dmdba" / GROUP="dmdba"
    设置该设备节点的属主与属组(chown)。等效于 chown dmdba:dmdba /dev/XXX

  • MODE="0660"
    设备节点的权限,八进制表示(这里是 rw-rw----),对安全和访问控制很重要。

  • RUN+="/bin/sh -c '...'"
    触发时执行一段命令(外壳命令)。注意:

    • RUN 中的命令会由 udev 执行,不能是长期阻塞任务(会阻塞 udev 处理);复杂任务建议由 systemd 服务或后台脚本处理。

    • 常用于做额外的 chown、创建目录、建立额外软链等操作。

    • RUN+="..." 会追加命令;命令写法需注意转义与引号。

补充说明 / 注意事项:

  • PROGRAM 返回值通常会包含换行,RESULT 必须精确匹配 PROGRAM 的输出(或其一部分,视写法而定),否则规则不触发。

  • RESULT 常用的是 SCSI WWID(例如 3600...),比设备名稳定(设备名会随插拔变化)。

  • 修改规则后需运行 udevadm control --reload-rules 并触发设备(udevadm trigger 或重插设备)使其生效。

  • 避免在 RUN 中执行耗时/交互性命令;若需要复杂后处理,建议使用 TAG + systemd .service 配合 SYSTEMD_WANTS/ENV{EMD_WANTS}

5.3 生效规则并验证

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

成功状态会显示DCR、VOTE、DMDATA、DMLOG的符号链接20250814143527imagepng


六、 DCR配置与初始化

6.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 = [DSC1_IP] DCR_EP_PORT = 9836 [GRP_CSS] DCR_EP_NAME = CSS1 DCR_EP_HOST = [DSC2_IP] 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 = [DSC1_IP] 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 = [DSC2_IP] 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

警告:需要注意修改为自己的实际环境,如IP,以及确保各个端口号未占用。

6.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'

警告:需要修改自己的数据库密码,符合达梦安全性要求。

20250814145327imagepng


七、集群服务配置

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

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

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

7.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

💡提示:上面两个配置仅DMDCR_SEQNO有区别,0、1。


八、启动集群服务

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

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

20250814150155imagepng

20250814150217imagepng

8.2 启动DMASM服务(双节点)

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

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

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

20250814150615imagepng

20250814150629imagepng

8.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'

20250814150839imagepng


九、数据库实例初始化与启动

9.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

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

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

20250814151146imagepng

查看节点1下生成的配置文件

20250814151233imagepng

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

终端直接复制即可,scp也可以。

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

节点1

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

节点2

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

20250814155122imagepng

20250814155145imagepng


十、集群监控配置

10.2 创建日志目录

mkdir -p /home/dmdba/dm/cssmlog

10.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

10.3 启动监视器

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

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

20250814155652imagepng


参考文档汇总

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服