注册
dm8DSC双节点集群搭建
技术分享/ 文章详情 /

dm8DSC双节点集群搭建

。。 2025/11/07 111 0 0

一、环境准备

1.1 实验环境

  • 操作系统: CentOS7(glibc2.17+)
  • 存储空间: 2GB以上剩余空间

1.2 磁盘划分

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

1.3 目录规划

数据库安装目录 目录
数据库安装目录 /home/dmdba/dmdbms
归档目录 /home/dmdba/dmarch
SQL日志目录 /home/dmdba/sqllog
备份目录 /home/dmdba/dmbak
NMON目录 /home/dmdba/nmon
配置文件目录 /home/dmdba/dsc_config
数据文件 +DMDATA
归档目录 +DMARCH
REDO日志 +DMLOG
DCR、VOTE信息 +DCR、+VOTE

1.4 共享磁盘配置

vmware安装目录下打开cmd,通过VMware自带工具vmware-vdiskmanager创建共享磁盘

# 数据磁盘(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"

1.5 配置虚拟机vmx文件

在关闭虚拟机后在虚拟机存放目录编辑两台虚拟机的配置文件(.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 = "G:\\Virtual Machines\\CentOS 7 Minimal\\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 = "G:\\Virtual Machines\\CentOS 7 Minimal\\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 = "G:\\Virtual Machines\\CentOS 7 Minimal\\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 = "G:\\Virtual Machines\\CentOS 7 Minimal\\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 = "G:\\Virtual Machines\\CentOS 7 Minimal\\sharedisk\\share-arch0.vmdk"
scsi1:4.redo = ""

二、dm8安装

2.1 配置用户及用户组

创建dmdba用户,主组群为dinstall

groupadd dinstall #创建主组群
useradd  -g dinstall -m -d /home/dmdba -s /bin/bash  dmdba #创建用户
passwd dmdba #设置密码

2.2 资源限制

/etc/security/limits.conf添加上以下内容

dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc  65536
dmdba hard nproc  65536
dmdba soft stack  65536
dmdba hard stack  65536

在/etc/systemd/system.conf进行修改

DefaultLimitNOFILE=65535

2.3 安装并修改环境变量(参考安装手册即可)

mount dm8_20250912_x86_rh7_64.iso /mnt/cdrom
cd /mnt/cdrom
su dmdba
./DMInstall.bin -i #静默安装,跟着选项按照自己的需求安装即可
/dm/dmdbms/script/root/root_installer.sh # root用户执行脚本

dm8安装路径目前为/home/dmdba/dmdbms,环境变量配置/home/dmdba/.bash_profile修改如下

export DM_HOME=/home/dmdma/dmdbms    -- 根据安装目录修改
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DM_HOME/bin"

三、磁盘准备(UDEV方式)

3.1 获取磁盘scsi_id

[root@localhost ~]# for i in `cat /proc/partitions | awk '{print $4}' |grep sd | grep [b-z]$`; do echo "### $i: `/usr/lib/udev/scsi_id -g -u -d /dev/$i`"; done
### sdb: 36000c29b83b60c0ae1260d7084af6060  # 数据磁盘
### sdd: 36000c29718ab0f9ea2134211def4284b  # vote磁盘
### sdc: 36000c29f8d4be16e8cd4450f1e9f34fe  # DCR磁盘
### sdf: 36000c29f12f883c5a85b5753c10795c0  # 归档日志磁盘
### sde: 36000c296c3e418cca6f2c1e6aa1dd19e  # redo日志磁盘

或者每一块分别查询(得出来的结果相同)

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

3.2 创建udev规则文件

这里采用脚本创建,也可以通过vi /etc/udev/rules.d/88-dm-asmdevices.rules命令手动创建。脚本内容如下:

#!/bin/bash

# 获取脚本所在目录
curr=$(cd "$(dirname "$0")"; pwd)
# 定义规则文件名
rules_file="$curr/88-dm-asmdevices.rules"

# 删除旧规则文件
rm -f "$rules_file"

# 定义磁盘设备与描述的对应关系(关键映射表,确保与实际一致)
# 格式:设备名  描述  符号链接名
declare -A disk_mapping=(
    ["sdb"]="数据磁盘 DMDATA"
    ["sdc"]="DCR磁盘 DCR"
    ["sdd"]="vote磁盘 VOTE"
    ["sde"]="redo日志磁盘 DMLOG"
    ["sdf"]="归档日志磁盘 DMARCH"
)

# 循环处理每个磁盘设备
for dev in "${!disk_mapping[@]}"; do
    # 解析描述和符号链接名
    desc=$(echo "${disk_mapping[$dev]}" | awk '{print $1}')
    symlink=$(echo "${disk_mapping[$dev]}" | awk '{print $2}')
    
    # 获取当前磁盘的scsi_id
    scsi_id=$(/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device="/dev/$dev")
    if [ -z "$scsi_id" ]; then
        echo "警告:无法获取设备 /dev/$dev 的scsi_id,跳过该设备"
        continue
    fi
    
    # 生成RUN命令(根据磁盘类型区分逻辑)
    if [ "$symlink" = "DCR" ]; then
        # DCR磁盘需要创建/dev_DSC目录
        run_cmd="RUN+=\"/bin/sh -c 'chown dmdba:dinstall /dev/\$name; mkdir -p /dev_DSC; ln -s /dev/$symlink /dev_DSC/$symlink'\""
    elif [ "$symlink" = "DMLOG" ]; then
        # redo日志磁盘需要额外设置目录权限
        run_cmd="RUN+=\"/bin/sh -c 'chown dmdba:dinstall /dev/\$name; ln -s /dev/$symlink /dev_DSC/$symlink; chown -R dmdba:dinstall /dev_DSC'\""
    else
        # 其他磁盘仅创建链接
        run_cmd="RUN+=\"/bin/sh -c 'chown dmdba:dinstall /dev/\$name; ln -s /dev/$symlink /dev_DSC/$symlink'\""
    fi
    
    # 写入规则到文件
    echo "# $desc" >> "$rules_file"
    echo "KERNEL==\"sd*\", SUBSYSTEM==\"block\"," \
         "PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\"," \
         "RESULT==\"$scsi_id\"," \
         "SYMLINK+=\"$symlink\"," \
         "OWNER=\"dmdba\"," \
         "GROUP=\"dinstall\"," \
         "MODE=\"0660\"," \
         "$run_cmd" >> "$rules_file"
    echo "" >> "$rules_file"  # 空行分隔
done

echo "已生成udev规则文件: $rules_file"

udev规则文件创建完成后需要把88-dm-asmdevices.rules配置文件cp到DSC的每个节点上

cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules 

然后验证

#生效udev规则
udevadm control --reload-rules && udevadm trigger

# 验证磁盘链接
ls -lth /dev_DSC

四、DCR初始化和配置

4.1 配置文件

需要运行su dmdba切换用户后在dsc_config目录下新建配置文件dmdcr_cfg.ini

DCR_N_GRP             = 3   ##集群环境有多少个 GROUP,范围:1~16
DCR_VTD_PATH          = /dev_DSC/VOTE   ##规划为 vote 的磁盘
DCR_OGUID             = 63635    ## 消息标识,一个组里面只有一个。

[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          = 192.168.4.20         ##心跳地址
DCR_EP_PORT          = 9836                 ##CSS 端口

[GRP_CSS]
DCR_EP_NAME          = CSS1
DCR_EP_HOST          = 192.168.4.21
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                 ##ASM 节点名,和 dmasvrmal 的 MAL_INST_NAME 一致
DCR_EP_HOST          = 192.168.4.20         ##心跳地址
DCR_EP_PORT          = 5836                 ##ASM 端口
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.4.21
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                 ##实例名,和 dm.ini 的 INSTANCE_NAME 一致
DCR_EP_SEQNO        = 0                     ##组内序号,不能重复
DCR_EP_PORT         = 5236                  ##实例端口,和 dm.ini 的 PORT_NUM 一致

[GRP_DSC]
DCR_EP_NAME         = DSC02
DCR_EP_SEQNO        = 1
DCR_EP_PORT         = 5236

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

cd /home/dmdba/dmdbms/bin
./dmasmcmd

在交互界面执行以下指令

ASM>create dcrdisk '/dev_DSC/DCR' 'DCR'
[TRACE]The ASM initialize dcrdisk /dev_DSC/DCR to name DMASMDCR
Used time: 23.102(ms).
ASM>create votedisk '/dev_DSC/VOTE' 'VOTE'
[TRACE]The ASM initialize votedisk /dev_DSC/VOTE to name DMASMVOTE
Used time: 20.061(ms).
ASM>create asmdisk '/dev_DSC/DMDATA' 'DMDATA'
[TRACE]The ASM initialize asmdisk /dev_DSC/DMDATA to name DMASMDMDATA
Used time: 19.806(ms).
ASM>create asmdisk '/dev_DSC/DMLOG' 'DMLOG'
[TRACE]The ASM initialize asmdisk /dev_DSC/DMLOG to name DMASMDMLOG
Used time: 17.575(ms).
<!-- ASM>create asmdisk '/dev_DSC/DMARCH' 'DMARCH'
[TRACE]The ASM initialize asmdisk /dev_DSC/DMARCH to name DMASMDMARCH
Used time: 26.024(ms). -->
ASM>init dcrdisk '/dev_DSC/DCR' from '/home/dmdba/dsc_config/dmdcr_cfg.ini' identified by '[数据库密码]'
[TRACE]DG 126 alloc extent for inode (0, 0, 1)
[TRACE]DG 126 alloc 4 extents for 0xfe000002 (0, 0, 2)->(0, 0, 5)
Used time: 88.358(ms).
ASM>init votedisk '/dev_DSC/VOTE' from '/home/dmdba/dsc_config/dmdcr_cfg.ini'
[TRACE]DG 125 alloc extent for inode (0, 0, 1)
[TRACE]DG 125 alloc 4 extents for 0xfd000002 (0, 0, 2)->(0, 0, 5)
Used time: 39.780(ms).

五、集群服务配置

5.1 配置mal配置文件

vi /home/dmdba/dsc_config/dmasvrmal.ini

[MAL_INST1]
MAL_INST_NAME= ASM0
MAL_HOST= 192.168.4.20
MAL_PORT= 4836  #MAL 监听端口

[MAL_INST2]
MAL_INST_NAME= ASM1
MAL_HOST= 192.168.4.21
MAL_PORT= 4837

5.2 配置DCR启动文件

节点1

su dmdba
vi /home/dmdba/dsc_config/dmdcr.ini

DMDCR_PATH = /dev_DSC/DCR
DMDCR_MAL_PATH = /home/dmdba/dsc_config/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_ASM_RESTART_INTERVAL = 0  #CSS 认定 ASM 故障重启的时间
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/dsc_config/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 0   ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dsc_config/DSC01_conf/dm.ini dcr_ini=/home/dmdba/dsc_config/dmdcr.ini

节点2

su dmdba
vi /home/dmdba/dsc_config/dmdcr.ini

DMDCR_PATH = /dev_DSC/DCR
DMDCR_MAL_PATH = /home/dmdba/dsc_config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/dsc_config/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dsc_config/DSC02_conf/dm.ini dcr_ini=/home/dmdba/dsc_config/dmdcr.ini

六、启动集群服务

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

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

6.2 启动DMASM服务(双节点执行)

启动新终端并切换至dmdba用户

cd /home/dmdba/dmdbms/bin
./dmasmsvr DCR_INI=/home/dmdba/dsc_config/dmdcr.ini

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

启动新终端并切换至dmdba用户

cd /home/dmdba/dmdbms/bin
./dmasmtool DCR_INI=/home/dmdba/dsc_config/dmdcr.ini

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

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

7.1 创建初始化配置文件

编辑dminit.ini

vi /home/dmdba/dsc_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=Dmglydmm@2025
SYSAUDITOR_PWD=Dmglydmm@2025

[DSC01]
CONFIG_PATH= /home/dmdba/dsc_config/DSC01_conf
PORT_NUM = 5236
MAL_HOST= 192.168.4.20
MAL_PORT= 6536
LOG_PATH= +DMLOG/log/DSC01_log1.log
LOG_PATH= +DMLOG/log/DSC01_log2.log

[DSC02]
CONFIG_PATH= /home/dmdba/dsc_config/DSC02_conf
PORT_NUM = 5237
MAL_HOST= 192.168.4.21
MAL_PORT= 6537
LOG_PATH= +DMLOG/log/DSC02_log1.log
LOG_PATH= +DMLOG/log/DSC02_log2.log

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

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

7.3 将生成的配置文件DSC02_conf复制到节点2

scp -r /home/dmdba/dsc_config/DSC02_conf dmdba@192.168.4.21:/home/dmdba/dsc_config/

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

节点1

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

节点2

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

八、集群监控配置

8.1 创建日志目录

mkdir -p /home/dmdba/dm/cssmlog

8.2 创建配置文件

vi /home/dmdba/dsc_config/dmcssm.ini

# dmcssm.ini定义 OGUID、CSS 节点 IP、日志路径等
# OGUID需与dmdcr_cfg.ini一致
CSSM_OGUID = 63635
CSSM_CSS_IP = 192.168.4.20:9836
CSSM_CSS_IP = 192.168.4.21:9837
CSSM_LOG_PATH = /home/dmdba/dm/cssmlog
CSSM_LOG_FILE_SIZE = 32
CSSM_LOG_SPACE_LIMIT = 0

8.3 启动监视器

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

九、检验搭建是否成功

9.1 使用DMASMTOOL登录到ASM文件系统,通过ls命令查看磁盘组信息是否正确(如果为DMASM镜像搭建的DSC集群则改用DMASMTOOLM工具)

./dmasmtool DCR_INI=/home/dmdba/dsc_config/dmdcr.ini
ASM>ls 

9.2 通过lsdsk命令查看磁盘详细信息是否正确

ASM>lsdsk

9.3 使用DIsql工具,以SYSDBA身份登录服务器查看V$ASMDISK视图中的信息是否正确

./disql SYSDBA/'"Dmglydmm@2025"'@127.0.0.1:5236
SQL> SELECT GROUP_ID,DISK_ID,DISK_NAME,DISK_PATH,SIZE,FREE_MB,STATUS FROM V$ASMDISK;

九、DSC集群的启停

启动DMDSC集群之前,必须先启动集群同步服务DMCSS,如果使用了DMASM文件系统,则DMASMSVR服务也必须先启动,最后启动DMSERVER
完整退出DMDSC集群的正确步骤为:依次退出DMSERVERDMASMSVRDMCSS,未按照该顺序进行将导致节点异常退出。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服