在数据库高可用方案中,达梦数据共享集群(DMDSC)是一种常见的选择,它通过共享存储实现多个数据库实例对同一组数据的访问,提供了高可用性和负载均衡能力。本文将详细介绍如何在 VMware 环境下搭建 DMDSC 集群,包括环境准备、磁盘配置、数据库安装、集群部署及功能验证等全过程。
在开始搭建集群之前,首先需要确保 VMware 相关文件夹的权限设置正确,避免后续操作中频繁出现权限问题。
E:\VMware
为例),右键点击文件夹选择「属性」Everyone
、SYSTEM
和管理员组Everyone
赋予「读取和执行」「列出文件夹内容」「读取」等基础权限(根据实际需求可调整)注意
提前配置好权限可以避免在创建共享磁盘、编辑虚拟机配置文件时出现「拒绝访问」的错误,减少后续操作的麻烦。
DMDSC 集群需要共享存储来存放数据文件、日志文件等,这里我们通过 VMware 配置共享磁盘来模拟共享存储。
根据集群需求,我们需要规划以下共享磁盘,用途分别如下:
裸设备名 | 容量 | 用途 | 对应共享磁盘文件 |
---|---|---|---|
/dev/sdb | 10G | 数据磁盘(/dev/asmdata0) | share-data0.vmdk |
/dev/sdc | 5G | DCR 磁盘(/dev/asmdcr) | share-dcr.vmdk |
/dev/sdd | 5G | 投票磁盘(/dev/asmvote) | share-vote.vmdk |
/dev/sde | 10G | 重做日志磁盘(/dev/asmlog0) | share-log0.vmdk |
/dev/sdf | 10G | 归档日志磁盘(/dev/asmarch0) | share-arch0.vmdk |
说明
DCR(Disk Configuration Repository)磁盘用于存储集群配置信息,投票磁盘(Vote Disk)用于集群节点间的投票选举,数据磁盘和日志磁盘分别用于存储数据库数据和事务日志。
使用 VMware 提供的 vmware-vdiskmanager.exe
工具创建共享磁盘,该工具位于 VMware 安装目录下。
mkdir -p E:\VMtools\dsc1\sharedisk
# 创建数据磁盘(10G)
.\vmware-vdiskmanager.exe -c -s 10g -a lsilogic -t 2 "E:\VMtools\dsc1\sharedisk\share-data0.vmdk"
# 创建DCR磁盘(5G)
.\vmware-vdiskmanager.exe -c -s 5g -a lsilogic -t 2 "E:\VMtools\dsc1\sharedisk\share-dcr.vmdk"
# 创建投票磁盘(5G)
.\vmware-vdiskmanager.exe -c -s 5g -a lsilogic -t 2 "E:\VMtools\dsc1\sharedisk\share-vote.vmdk"
# 创建日志磁盘(10G)
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 "E:\VMtools\dsc1\sharedisk\share-log0.vmdk"
# 创建归档日志磁盘(10G)
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 "E:\VMtools\dsc1\sharedisk\share-arch0.vmdk"
-c
:创建新磁盘
-s
:指定磁盘大小(支持 g/G 或 gb/GB 单位)
-a
:指定适配器类型(lsilogic
为 SCSI 适配器,兼容性较好)
-t 2
:指定磁盘类型为「预分配的厚磁盘」,这种类型的磁盘性能较好,适合数据库场景
执行成功后,会显示 “Virtual disk creation successful.” 的提示信息。
创建好共享磁盘后,需要将其添加到集群的两个节点(虚拟机)中,并通过编辑虚拟机配置文件(.vmx)来启用共享设置。
E:\VMtools\dsc1\DSC1.vmx
和 E:\VMtools\dsc2\DSC2.vmx
)# 共享磁盘配置
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" # 指定SCSI适配器类型
# 数据磁盘(share-data0.vmdk)
scsi1:0.mode = "independent-persistent"
scsi1:0.deviceType = "disk"
scsi1:0.present = "TRUE"
scsi1:0.fileName = "E:\VMtools\dsc1\sharedisk\share-data0.vmdk"
scsi1:0.redo = ""
# DCR磁盘(share-dcr.vmdk)
scsi1:1.mode = "independent-persistent"
scsi1:1.deviceType = "disk"
scsi1:1.present = "TRUE"
scsi1:1.fileName = "E:\VMtools\dsc1\sharedisk\share-dcr.vmdk"
scsi1:1.redo = ""
# 投票磁盘(share-vote.vmdk)
scsi1:2.mode = "independent-persistent"
scsi1:2.deviceType = "disk"
scsi1:2.present = "TRUE"
scsi1:2.fileName = "E:\VMtools\dsc1\sharedisk\share-vote.vmdk"
scsi1:2.redo = ""
# 日志磁盘(share-log0.vmdk)
scsi1:3.mode = "independent-persistent"
scsi1:3.deviceType = "disk"
scsi1:3.present = "TRUE"
scsi1:3.fileName = "E:\VMtools\dsc1\sharedisk\share-log0.vmdk"
scsi1:3.redo = ""
# 归档日志磁盘(share-arch0.vmdk)
scsi1:4.mode = "independent-persistent"
scsi1:4.deviceType = "disk"
scsi1:4.present = "TRUE"
scsi1:4.fileName = "E:\VMtools\dsc1\sharedisk\share-arch0.vmdk"
scsi1:4.redo = ""
保存配置文件后,启动虚拟机,通过「编辑虚拟机设置」可以看到已添加的 5 块共享磁盘。
在配置好共享存储后,需要在两个节点上分别安装达梦数据库软件(无需初始化实例,实例将在集群部署时统一创建)。
dm8_20230808_x86_rh6_64.iso
)到虚拟机mount /dev/cdrom /mnt
/mnt/DMInstall.bin
/home/dmdba/dmdbms
为例)dmdba
并设置权限:groupadd dinstall
useradd -g dinstall dmdba
chown -R dmdba:dinstall /home/dmdba/dmdbms
详细步骤参考另一篇文档Linux全程命令行部署达梦数据库
使用 scsi_id
工具获取共享磁盘的唯一标识符(WWID),用于后续的磁盘映射。在两个节点上分别执行以下命令:
/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 # 投票磁盘
/usr/lib/udev/scsi_id -g -u /dev/sde # 日志磁盘
执行结果示例(节点 1):
36000c2907dfb78cd9a0a560d1ddf7a7a # /dev/sdb的WWID
36000c29461ab9c70a04f03f9d6de9ad7 # /dev/sdc的WWID
36000c2921da76547029c22794d6ac6fb # /dev/sdd的WWID
36000c2904952a3526c3e23bfdc3e8857 # /dev/sde的WWID
注意
两个节点上对应磁盘的 WWID 必须一致,否则说明共享磁盘配置有误。
为了统一磁盘访问路径并设置权限,需要通过 udev 规则创建磁盘软链接。
vi /etc/udev/rules.d/99-dm-asmdevices.rules
# DCR磁盘配置
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29461ab9c70a04f03f9d6de9ad7",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=="36000c2921da76547029c22794d6ac6fb",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=="36000c2907dfb78cd9a0a560d1ddf7a7a",SYMLINK+="DMDATA", OWNER="dmdba", GROUP="dmdba", MODE="0660", RUN+="/bin/sh -c 'chown dmdba:dmdba /dev/$name; ln -s /dev/DMDATA /dev_DSC/DMDATA'"
# 日志磁盘配置
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2904952a3526c3e23bfdc3e8857",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 '"
systemctl restart systemd-udev-trigger
注意:部分系统可能不允许直接重启systemd-udev-trigger服务。因为该服务被设计为仅通过依赖触发,不允许手动重新重启,这是系统为了保证 udev 规则加载等流程稳定性的一种限制。
可以改为使用以下命令:
sudo udevadm control --reload-rules && sudo udevadm trigger
ls -l /dev_DSC
查看是否创建了软链接,确保所有者为 dmdba
。#[root@localhost ~]# chown dmdba:dinstall /dev/VOTE /dev/DMLOG /dev/DMDATA /dev/DCR
#[root@localhost ~]# chmod 660 /dev/VOTE /dev/DMLOG /dev/DMDATA /dev/DCR
为什么需要软链接?
DMDSC 启动时会扫描指定目录下的所有磁盘,如果目录中存在无关磁盘可能导致启动失败。通过软链接将需要的共享磁盘统一放到 /dev_DSC
目录,便于管理和访问。
DCR(Disk Configuration Repository)是集群的配置仓库,用于存储集群节点信息、磁盘信息等关键配置。需要在两个节点上创建相同的 DCR 配置文件。
dmdba
用户,创建配置文件目录:su - dmdba
mkdir -p /home/dmdba/config
dmdcr_cfg.ini
文件: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.112.141
DCR_EP_PORT = 9836
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.112.142
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.112.141
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.112.142
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 = 5236
[GRP_DSC]
DCR_EP_NAME = DSC02
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
另一个节点同上
通过 `dmasmcmd` 工具初始化 DCR 磁盘、vote磁盘和 ASM 磁盘,将磁盘与 DCR 配置关联。
su - dmdba
cd /home/dmdba/dmdbms/bin
dmasmcmd
工具:./dmasmcmd
\-- 创建 DCR 磁盘标识
create dcrdisk '/dev_DSC/DCR' 'DCR'
\-- 创建投票磁盘标识
create votedisk '/dev_DSC/VOTE' 'VOTE'
\-- 创建数据磁盘标识
create asmdisk '/dev_DSC/DMDATA' 'DMDATA'
\-- 创建日志磁盘标识
create asmdisk '/dev_DSC/DMLOG' 'DMLOG'
\-- 从配置文件初始化 DCR 磁盘(密码自定义)
init dcrdisk '/dev_DSC/DCR' from '/home/dmdba/config/dmdcr_cfg.ini' identified by 'A1234a1234'
\-- 从配置文件初始化投票磁盘
init votedisk '/dev_DSC/VOTE' from '/home/dmdba/config/dmdcr_cfg.ini'
执行成功后,工具会返回类似 [TRACE] The ASM initialize dcrdisk ...
的提示信息。
MAL(Management Access Layer)是集群内部节点通信的基础,需要配置 MAL 信息确保节点间正常通信。
dmasvrmal.ini
文件:vi /home/dmdba/config/dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME = ASM0 # 节点1的ASM实例名
MAL_HOST = 192.168.112.141 # 节点1IP
MAL_PORT = 4836 # MAL通信端口(自定义,不冲突即可)
[MAL_INST2]
MAL_INST_NAME = ASM1 # 节点2的ASM实例名
MAL_HOST = 192.168.112.142 # 节点2IP
MAL_PORT = 4837 # 与节点1端口不同
dmdcr.ini
是 DCR 服务的启动配置文件,用于指定 DCR 磁盘路径、MAL 配置路径等信息,两个节点的配置略有差异(主要是节点序号)。
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
vi /home/dmdba/config/dmdcr.ini
添加内容(仅 DMDCR_SEQNO
和数据库路径不同):
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
DMCSS(Cluster Synchronization Service)是集群同步服务,DMASM(Automatic Storage Management)是自动存储管理服务,需在两个节点分别启动。
在两个节点的 bin
目录下执行以下命令(dmdba
用户):
./dmcss DCR_INI=/home/dmdba/config/dmdcr.ini
启动成功后,节点 1 会显示类似以下信息(可输入 show
命令查看集群状态):
注意
若启动失败提示 “打开文件失败等提示”,需检查磁盘权限在dmdba的dinstall,下面为切换用户组命令:
chown dmdba:dinstall /dev/VOTE /dev/DMLOG /dev/DMDATA /dev/DCR
chmod 660 /dev/VOTE /dev/DMLOG /dev/DMDATA /dev/DCR
在两个节点的 bin
目录下执行以下命令(dmdba
用户):
./dmasmsvr DCR_INI=/home/dmdba/config/dmdcr.ini
启动成功后,会显示 the ASM server is Ready.
的提示信息。
节点二同。
ASM 磁盘组用于管理共享存储中的数据和日志,需创建 DMDATA
(数据)和 DMLOG
(日志)两个磁盘组。
bin
目录下启动 dmasmtool
工具:./dmasmtool DCR_INI=/home/dmdba/config/dmdcr.ini
\-- 创建数据磁盘组
CREATE DISKGROUP DMDATA asmdisk '/dev_DSC/DMDATA'
\-- 创建日志磁盘组
CREATE DISKGROUP DMLOG asmdisk '/dev_DSC/DMLOG'
通过 dminit
工具初始化数据库实例,生成两个节点的配置文件和数据文件。
dminit.ini
配置文件: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=A123a123
SYSAUDITOR_PWD=A123a123
[DSC01]
CONFIG_PATH= /home/dmdba/config/DSC01_conf
PORT_NUM = 5236
MAL_HOST= 192.168.112.141
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= 192.168.112.142
MAL_PORT= 6537
LOG_PATH= +DMLOG/log/DSC02_log1.log
LOG_PATH= +DMLOG/log/DSC02_log2.log
dmdba
用户,在 bin
目录,节点1):./dminit control=/home/dmdba/config/dminit.ini
DMINIT 执行完成后,会在 config_path 目录下生成配置文件 DM.INI 和 DMMAL.INI
scp -r /home/dmdba/config/DSC02_conf dmdba@192.168.112.142:/home/dmdba/config/
输入节点 2 的 dmdba
用户密码完成复制。
在两个节点分别启动数据库实例,加入集群。
./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
启动成功的标志是控制台显示 SYSTEM IS READY
。
DMCSSM 是集群监视器,用于监控集群状态、节点健康情况等,可以在任意节点配置并启动,此处在节点1配置。
mkdir -p /home/dmdba/dm/cssmlog
dmcssm.ini
:vi /home/dmdba/config/dmcssm.ini
#和 dmdcr_cfg.ini 中的 DCR_OGUID 保持一致
CSSM_OGUID = 63635 #配置所有 CSS 的连接信息,
#和 dmdcr_cfg.ini 中 CSS 配置项的 DCR_EP_HOST 和 DCR_EP_PORT 保持一致
CSSM_CSS_IP = 192.168.112.141:9836
CSSM_CSS_IP = 192.168.112.142:9837
CSSM_LOG_PATH = /home/dmdba/dm/cssmlog #监视器日志文件存放路径
CSSM_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB
CSSM_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
bin
目录):./dmcssm /home/dmdba/config/dmcssm.ini
show
命令查看集群状态,确认所有节点均为 WORKING
状态。集群搭建完成后,需验证数据同步、故障切换等核心功能是否正常。
disql
工具连接数据库:./disql SYSDBA/A123a123@192.168.112.141:5236
create table test_table(id int, data varchar(50));
insert into test_table values(1, 'test data 1');
insert into test_table values(2, 'test data 2');
commit;
./disql SYSDBA/A123a123@192.168.112.142:5237
select * from test_table;
若能查询到节点 1 插入的数据,说明数据同步正常。
ps -ef | grep dmserver # 查找进程ID
kill <进程ID>
也可将设备断网
show
命令,观察节点 2 状态变为 SYSHALT
。create table test_table2(id int, data varchar(50));
insert into test_table2 values(3, 'test data 3');
commit;
./dmserver dcr_ini=/home/dmdba/config/dmdcr.ini /home/dmdba/config/DSC02_conf/dm.ini
监视器显示正常
select * from test_table2;
查询正常,说明集群故障恢复功能正常。
本文详细介绍了 DMDSC 集群的搭建过程,从 VMware 共享磁盘配置到集群功能验证,覆盖了环境准备、磁盘管理、服务启动等关键步骤。实际操作中需注意以下几点:
共享磁盘权限配置需确保 dmdba
用户有读写权限
配置文件中的 IP、端口、路径等需根据实际环境修改
启动服务的顺序:先启动 DMCSS,再启动 DMASM,最后启动数据库服务
通过搭建 DMDSC 集群,可显著提高数据库的可用性和可靠性,适合对业务连续性要求较高的场景。
达梦技术社区
文章
阅读量
获赞