官方参考文档:
《DM8数据共享集群》
《DM8数据守护与读写分离集群》
准备2台虚拟机部署DMDSC集群,用来功能测试,具体规划如下:
1.虚拟机规划
| 虚拟机1 | 虚拟机2 | |
|---|---|---|
| 角色 | DSC01、监视器(这里我们把监视器部署到节点上,仅用来测试,生产建议单独一台服务器部署监视器) | DSC02 |
| 主机名 | DSC01 | DSC02 |
| 操作系统 | KylinV10SP3 | KylinV10SP3 |
| CPU | 2 | 2 |
| 内存 | 2 | 2 |
| 存储 | 30G | 30G |
| 业务地址 | 10.0.0.80 | 10.0.0.81 |
| 集群地址 | 10.0.0.80 | 10.0.0.81 |
2.共享磁盘规划
| 磁盘类型 | 测试容量 | 核心用途 | 存放内容 |
|---|---|---|---|
| DCR盘 | 1G | 集群注册表 | DMDCR 元数据,记录集群节点、端口、ASM 磁盘配置 |
| VOTE盘 | 1G | 仲裁心跳盘 | 节点心跳、脑裂仲裁,MAL 断网时判定保留哪个节点 |
| LOG 盘 | 5G | 联机日志磁盘组 | 所有实例 redo 联机日志,独立磁盘拆分 IO 压力 |
| DATA 盘 | 10G | 业务数据磁盘组 | 所有 dbf、控制文件、回滚段、系统表空间 |
3.集群端口规划
| 节点机器 | 实例名称 | IP | 实例端口 |
|---|---|---|---|
| DSC01 | CSS0 | 10.0.0.80 | 9836 |
| ASM0 | 5836 | ||
| ASM的MAL系统 | 4836 | ||
| dmserver | 5236 | ||
| 数据库的MAL系统 | 6537 | ||
| DSC02 | CSS1 | 10.0.0.81 | 9837 |
| ASM1 | 5837 | ||
| ASM的MAL系统 | 4837 | ||
| dmserver | 5236 | ||
| 数据库的MAL系统 | 6537 |
发放两台虚拟机,kylinV10SP3,规格参考’一、环境说明‘。
Vmvare原生共享vmdk,贴近真实的SAN,本例采用UDEV工具固定磁盘。
win+R打开cmd
C:\Users\lenovo>cd /d D:\xu ni ji\vmware
参数 /d 作用:跨盘符切换目录,你的程序在 D 盘,不加会切不动。
输入命令回车,能弹出一堆参数说明就成功
vmware-vdiskmanager.exe
# 1、DCR盘 1G
vmware-vdiskmanager.exe -c -s 1G -a lsilogic -t 2 "D:\VM_SHARE\dcr.vmdk"
# 2、VOTE盘 1G
vmware-vdiskmanager.exe -c -s 1G -a lsilogic -t 2 "D:\VM_SHARE\vote.vmdk"
# 3、LOG盘 5G
vmware-vdiskmanager.exe -c -s 5G -a lsilogic -t 2 "D:\VM_SHARE\log.vmdk"
# 4、DATA盘 10G
vmware-vdiskmanager.exe -c -s 10G -a lsilogic -t 2 "D:\VM_SHARE\data.vmdk"
1.添加硬盘
2.选择对应的vmdk
3.规划磁盘序号
给 4 块盘分配不同编号,避免冲突,统一规则:
DCR 盘:SCSI 1:0 VOTE 盘:SCSI 1:1 LOG 盘:SCSI 1:2 DATA 盘:SCSI 1:3
共享盘全部挂在同一个 SCSI 控制器SCSI 1下面,只是后面的序号 0/1/2/3 区分
剩下的盘按照上述操作执行,两台虚拟机都需要按照上述操作。
4.修改两台虚拟机的.vmx配置文件
在末尾添加
disk.locking = "FALSE"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
scsi1.sharedBus = "VIRTUAL"
启动虚拟机
# groupadd dinstall
# useradd -g dinstall dmdba
# passwd dmdba
更改用户 dmdba 的密码 。
新的密码:
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
绑定设备的UUID。创建 uuid.sh 文件,使用脚本生成配置文件。
#vi uuid.sh
[root@DSC01 ~]# cat uuid.sh
#!/bin/bash
# 清空规则文件
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in b c d e; do
# 获取SCSI ID并显示
SCSI_ID=$(/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i 2>/dev/null)
if [ -n "$SCSI_ID" ]; then
echo "/dev/sd$i $SCSI_ID"
# 生成udev规则(修正了--device参数,去掉了空格)
echo "KERNEL==\"sd?\", SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"$SCSI_ID\", SYMLINK+=\"dm/asm-disk$i\", OWNER=\"dmdba\", GROUP=\"dinstall\", MODE=\"0660\"" >> $curr/88-dm-asmdevices.rules
else
echo "警告: /dev/sd$i 无法获取SCSI ID"
fi
done
echo "规则文件已生成: $curr/88-dm-asmdevices.rules"
执行uuid.sh脚本,当前目录会生成绑定配置生成 88-dm-asmdevices.rules 文件
[root@DSC01 ~]# chmod 775 uuid.sh
[root@DSC01 ~]# ./uuid.sh
/dev/sdb 36000c29d7688ea8916611fb0ac2f8a00
/dev/sdc 36000c296159e6d8846329fef8bb765e5
/dev/sdd 36000c292f71a963210757c4dd8824a5b
/dev/sde 36000c2993018c22384c0121aa86081d9
[root@DSC01 ~]# cat 88-dm-asmdevices.rules
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c293e9b7a77a4d5adc2ac2b634c9", SYMLINK+="asmdisk/dsc_dcr", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c293942336e15a20cb54f2c6e9cb", SYMLINK+="asmdisk/dsc_vote", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29e25aaec9218440d02d331e991", SYMLINK+="asmdisk/dsc_log", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c296e52e160453f07dc9922f1867", SYMLINK+="asmdisk/dsc_data", OWNER="dmdba", GROUP="dinstall", MODE="0660"
[root@DSC01 ~]#
编辑 88-dm-asmdevices.rules文件,修改SYMLINK参数指定别名
[root@DSC01 ~]# cat 88-dm-asmdevices.rules
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29202430f1d7419d860fbe63342", SYMLINK+="asmdisk/dsc_dcr", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c290c9ad73c03a434ee4651043ce", SYMLINK+="asmdisk/dsc_vote", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29200ca0624777114fb9d00591c", SYMLINK+="asmdisk/dsc_log", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29915c6af1043e392b189ee2c17", SYMLINK+="asmdisk/dsc_data", OWNER="dmdba", GROUP="dinstall", MODE="0660"
[root@DSC01 ~]#
复制文件至 /etc/udev/rules.d/路径下
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules
重新加载udev服务
/sbin/udevadm control --reload-rules
/sbin/udevadm trigger --action=add
/sbin/udevadm trigger --type=devices --action=change
修改权限并开机自启生效
[root@DSC01 rules.d]# chown -R dmdba:dinstall /dev/asm*
[root@DSC01 rules.d]#
[root@DSC01 rules.d]# ll /dev/asmdisk/*
lrwxrwxrwx 1 dmdba dinstall 6 8月 19 21:58 /dev/asmdisk/dsc_data -> ../sde
lrwxrwxrwx 1 dmdba dinstall 6 8月 19 21:58 /dev/asmdisk/dsc_dcr -> ../sdb
lrwxrwxrwx 1 dmdba dinstall 6 8月 19 21:58 /dev/asmdisk/dsc_log -> ../sdd
lrwxrwxrwx 1 dmdba dinstall 6 8月 19 21:58 /dev/asmdisk/dsc_vote -> ../sdc
[root@node11 rules.d]# echo "chown -R dmdba:dinstall /dev/asm*" >>/etc/rc.local
[root@DSC01 ~]# chmod +x /etc/rc.local
[root@DSC01 ~]# systemctl daemon-reload
[root@DSC01 ~]# systemctl enable --now rc-local
[root@DSC01 rules.d]# systemctl status rc-local
● rc-local.service - /etc/rc.d/rc.local Compatibility
Loaded: loaded (/usr/lib/systemd/system/rc-local.service; enabled-runtime; vendor preset>
Active: active (exited) since Wed 2026-08-19 21:57:57 CST; 10min ago
Docs: man:systemd-rc-local-generator(8)
Process: 1280 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS)
Tasks: 0
Memory: 0B
CGroup: /system.slice/rc-local.service
8月 19 21:57:57 DSC01 systemd[1]: Starting /etc/rc.d/rc.local Compatibility...
8月 19 21:57:57 DSC01 systemd[1]: Started /etc/rc.d/rc.local Compatibility.
看到 active (exited) 就说明开机自启配置成功。
DSC02也重复上述配置。
至此,磁盘共享磁盘操作执行完毕,可以进入DMDSC搭建步骤。
关机,拍快照,准备安装!!!
在两台虚拟机上分别安装数据库软件,只安装软件即可,不需要初始化实例!!!
具体安装步骤请参考我的上一篇文章:
https://eco.dameng.com/community/training/4ebb36b038939b5607304c57ccf4fbdd
两台机器都要做。
使用 dmdba 用户创建用于 DSC 环境搭建的目录:/home/dmdba/dmdsc。
DM 执行码和工具存放于目录:/home/dmdba/dmdsc/bin。
配置文件存放于目录:
DSC01机器/home/dmdba/dmdsc/data/DSC01
DSC02机器/home/dmdba/dmdsc/data/DSC02。
DCS01
[dmdba@DSC01 ~]$ mkdir dmdsc [dmdba@DSC01 ~]$ mkdir dmdsc/bin [dmdba@DSC01 ~]$ mkdir -p dmdsc/data/DSC01 [dmdba@DSC01 ~]$
DCS02
[dmdba@DSC02 ~]$ mkdir dmdsc [dmdba@DSC02 ~]$ mkdir dmdsc/bin [dmdba@DSC02 ~]$ mkdir -p dmdsc/data/DSC02 [dmdba@DSC02 ~]$
搭建的配置文件分别存放于 DSC01 机器的/home/dmdba/dmdsc/data/DSC01 和
DSC02 机器的/home/dmdba/dmdsc/data/DSC02 下
DSC01
[dmdba@DSC01 DSC01]$ cat DMDCR_CFG.INI
#全局设置
DCR_N_GRP = 3 # 定义组的数量(表示有三个组需要配置:CSS, ASM 和 DB)
DCR_VTD_PATH = /dev/asmdisk/dsc_vote # 投票磁盘路径(存储集群成员状态、心跳信息和控制指
令)
DCR_OGUID = 63635 # 集群对象的全局唯一标识符
#CSS组(集群同步服务)负责实例间心跳检测和状态同步,每个节点都有自己的名称、IP 地址和端口号
[GRP]
DCR_GRP_TYPE = CSS # 组类型为CSS
DCR_GRP_NAME = GRP_CSS # 组名称
DCR_GRP_N_EP = 2 # 组内节点数量(就是配置的节点有几个)
DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数(若某节点在 DCR_GRP_DSKCHK_CNT(默认60秒)内未
更新心跳,DMCSS标记其为故障节点,触发故障转移)
[GRP_CSS]
DCR_EP_NAME = CSS0 ## 节点1名称
DCR_EP_HOST = 10.0.0.80 # 节点IP地址(心跳地址)
DCR_EP_PORT = 9836 # 节点端口号
[GRP_CSS]
DCR_EP_NAME = CSS1 # 节点2名称
DCR_EP_HOST = 10.0.0.81
DCR_EP_PORT = 9837
#ASM组(存储管理组)管理共享存储设备,DCR_EP_SHM_KEY两个节点不能一样,DCR_EP_PORT不同节点可
以用一样的
[GRP]
DCR_GRP_TYPE = ASM # 组类型为ASM
DCR_GRP_NAME = GRP_ASM # 组名称
DCR_GRP_N_EP = 2 # 组内节点数量
DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数
[GRP_ASM]
DCR_EP_NAME = ASM0 # 节点名称(跟dmasvrmal.ini配置的实例名称一定要相同)
DCR_EP_SHM_KEY = 64735 # 节点间共享内存通信的系统标识符
DCR_EP_SHM_SIZE = 10 # 共享内存大小(MB)
DCR_EP_HOST = 10.0.0.80 # 节点IP地址(心跳ip)
DCR_EP_PORT = 5836 # 节点端口号
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk # ASM加载路径,规划的磁盘目录
[GRP_ASM]
DCR_EP_NAME = ASM1 #第二个节点
DCR_EP_SHM_KEY = 54736
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 10.0.0.81
DCR_EP_PORT = 5837
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk
#DB (Database Instance) 数据库实例组
[GRP]
DCR_GRP_TYPE = DB ## 组类型为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 # 节点端口号(这里是数据库实例组,所以端口号就是数据库的)
#DCR_CHECK_PORT = 9741 # 检查端口
[GRP_DSC]
DCR_EP_NAME = DSC02 #第二个节点
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
#DCR_CHECK_PORT = 9741
[dmdba@DSC01 DSC01]$
DSC02
[dmdba@DSC02 DSC02]$ cat DMDCR_CFG.INI
#全局设置
DCR_N_GRP = 3 # 定义组的数量(表示有三个组需要配置:CSS, ASM 和 DB)
DCR_VTD_PATH = /dev/asmdisk/dsc_vote # 投票磁盘路径(存储集群成员状态、心跳信息和控制指
令)
DCR_OGUID = 63635 # 集群对象的全局唯一标识符
#CSS组(集群同步服务)负责实例间心跳检测和状态同步,每个节点都有自己的名称、IP 地址和端口号
[GRP]
DCR_GRP_TYPE = CSS # 组类型为CSS
DCR_GRP_NAME = GRP_CSS # 组名称
DCR_GRP_N_EP = 2 # 组内节点数量(就是配置的节点有几个)
DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数(若某节点在 DCR_GRP_DSKCHK_CNT(默认60秒)内未
更新心跳,DMCSS标记其为故障节点,触发故障转移)
[GRP_CSS]
DCR_EP_NAME = CSS0 ## 节点1名称
DCR_EP_HOST = 10.0.0.80 # 节点IP地址(心跳地址)
DCR_EP_PORT = 9836 # 节点端口号
[GRP_CSS]
DCR_EP_NAME = CSS1 # 节点2名称
DCR_EP_HOST = 10.0.0.81
DCR_EP_PORT = 9837
#ASM组(存储管理组)管理共享存储设备,DCR_EP_SHM_KEY两个节点不能一样,DCR_EP_PORT不同节点可
以用一样的
[GRP]
DCR_GRP_TYPE = ASM # 组类型为ASM
DCR_GRP_NAME = GRP_ASM # 组名称
DCR_GRP_N_EP = 2 # 组内节点数量
DCR_GRP_DSKCHK_CNT = 60 # 磁盘检查计数
[GRP_ASM]
DCR_EP_NAME = ASM0 # 节点名称(跟dmasvrmal.ini配置的实例名称一定要相同)
DCR_EP_SHM_KEY = 64735 # 节点间共享内存通信的系统标识符
DCR_EP_SHM_SIZE = 10 # 共享内存大小(MB)
DCR_EP_HOST = 10.0.0.80 # 节点IP地址(心跳ip)
DCR_EP_PORT = 5836 # 节点端口号
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk # ASM加载路径,规划的磁盘目录
[GRP_ASM]
DCR_EP_NAME = ASM1 #第二个节点
DCR_EP_SHM_KEY = 54736
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 10.0.0.81
DCR_EP_PORT = 5837
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk
#DB (Database Instance) 数据库实例组
[GRP]
DCR_GRP_TYPE = DB ## 组类型为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 # 节点端口号(这里是数据库实例组,所以端口号就是数据库的)
#DCR_CHECK_PORT = 9741 # 检查端口
[GRP_DSC]
DCR_EP_NAME = DSC02 #第二个节点
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
#DCR_CHECK_PORT = 9741
[dmdba@DSC02 DSC02]$
只需在DSC01节点初始化所有盘
[dmdba@DSC01 bin]$ ./dmasmcmd
dmasmcmd V8
ASM>create dcrdisk '/dev/asmdisk/dsc_dcr' 'dcr'
[INFO]The ASM initialize dcrdisk /dev/asmdisk/dsc_dcr to name DMASMdcr
Used time: 40.280(ms).
ASM>create votedisk '/dev/asmdisk/dsc_vote' 'vote'
[INFO]The ASM initialize votedisk /dev/asmdisk/dsc_vote to name DMASMvote
Used time: 39.859(ms).
ASM>create asmdisk '/dev/asmdisk/dsc_log' 'log'
[INFO]The ASM initialize asmdisk /dev/asmdisk/dsc_log to name DMASMlog
Used time: 46.246(ms).
ASM>create asmdisk '/dev/asmdisk/dsc_data' 'data'
[INFO]The ASM initialize asmdisk /dev/asmdisk/dsc_data to name DMASMdata
Used time: 41.566(ms).
#将 dcr 磁盘格式化为集群注册表磁盘,使用 dmdcr_cfg.ini 文件中的配置初始化
#注意配置文件的路径/home/dmdba/config/dmdcr_cfg.ini,密码要有大小写和特殊符号且>=8位
SM>init dcrdisk '/dev/asmdisk/dsc_dcr' from '/home/dmdba/dmdsc/data/DSC01/DMDCR_CFG.INI' identified by 'Dameng@8888'
[INFO]DG 126 alloc extent for inode (0, 0, 1)
[INFO]DG 126 alloc 4 extents for 0xfe000002 (0, 0, 2)->(0, 0, 5)
Used time: 269.609(ms).
#将投票磁盘初始化,用于集群心跳仲裁;
ASM>init votedisk '/dev/asmdisk/dsc_vote' from '/home/dmdba/dmdsc/data/DSC01/DMDCR_CFG.INI'
[INFO]DG 125 alloc extent for inode (0, 0, 1)
[INFO]DG 125 alloc 4 extents for 0xfd000002 (0, 0, 2)->(0, 0, 5)
Used time: 75.222(ms).
两个节点都去检查验证是否设置成功
ASM>listdisks /dev/asmdisk [/dev/asmdisk/dsc_data]: Unused ASM disk, name:[DMASMdata], size:[10207M], UUID:[UNKNOWN] [/dev/asmdisk/dsc_vote]: Used ASM disk, name:[DMASMvote], size:[1024M], group_id:[125], disk_id:[0], UUID:[UNKNOWN] [/dev/asmdisk/dsc_dcr]: Used ASM disk, name:[DMASMdcr], size:[1024M], group_id:[126], disk_id:[0], UUID:[UNKNOWN] [/dev/asmdisk/dsc_log]: Unused ASM disk, name:[DMASMlog], size:[5087M], UUID:[UNKNOWN] Used time: 10.010(ms). ASM>
1.准 备 DMASM 的 MAL 配置文件 DMASVRMAL.INI ,保存到 DSC01 的/home/dmdba/dmdsc/data/DSC01 下(两个节点都需要配置,并且内容完全相同),用于dmasm节点之间通信
DSC01
[dmdba@DSC01 DSC01]$ pwd
/home/dmdba/dmdsc/data/DSC01
[dmdba@DSC01 DSC01]$ cat DMASVRMAL.INI
[MAL_INST1]
MAL_INST_NAME= ASM0
MAL_HOST= 10.0.0.80
MAL_PORT= 4836
[MAL_INST2]
MAL_INST_NAME= ASM1
MAL_HOST= 10.0.0.81
MAL_PORT= 4837
2.为 DSC02 配置 DMASVRMAL.INI,和 DSC01 的 DMASVRMAL.INI 内容完全一样。
保存到DSC02 的/home/dmdba/dmdsc/data/DSC02 下
DSC02
[dmdba@DSC02 DSC02]$ pwd
/home/dmdba/dmdsc/data/DSC02
[dmdba@DSC02 DSC02]$ cat DMASVRMAL.INI
[MAL_INST1]
MAL_INST_NAME= ASM0
MAL_HOST= 10.0.0.80
MAL_PORT= 4836
[MAL_INST2]
MAL_INST_NAME= ASM1
MAL_HOST= 10.0.0.81
MAL_PORT= 4837
[dmdba@DSC01 DSC01]$ cat DMDCR.INI
DMDCR_PATH = /dev/asmdisk/dsc_dcr #DCR 磁盘的路径,用于存储集群的元数据信息
DMDCR_MAL_PATH = /home/dmdba/dmdsc/data/DSC01/DMASVRMAL.INI #指定 MAL配置文件的路径
DMDCR_SEQNO = 0 #当前节点在集群中的序列号,每个节点唯一
DMDCR_ASM_RESTART_INTERVAL = 0 #ASM 服务故障后自动重启的间隔,0表示不重启
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr
dcr_ini=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI #启动 ASM 服务
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0 #数据库实例故障后自动重启的间隔,0为不重启
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
path=/home/dmdba/dmdsc/data/DSC01/DSC01_conf/dm.ini
dcr_ini=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI
[dmdba@DSC01 DSC01]$ pwd
/home/dmdba/dmdsc/data/DSC01
[dmdba@DSC01 DSC01]$
[dmdba@DSC02 DSC02]$ pwd
/home/dmdba/dmdsc/data/DSC02
[dmdba@DSC02 DSC02]$ cat DMDCR.INI
DMDCR_PATH = /dev/asmdisk/dsc_dcr #DCR 磁盘的路径,用于存储集群的元数据信息
DMDCR_MAL_PATH = /home/dmdba/dmdsc/data/DSC02/DMASVRMAL.INI #指定 MAL配置文件的路径
DMDCR_SEQNO = 1 #当前节点在集群中的序列号,每个节点唯一
DMDCR_ASM_RESTART_INTERVAL = 0 #ASM 服务故障后自动重启的间隔,0表示不重启
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr
dcr_ini=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI #启动 ASM 服务
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0 #数据库实例故障后自动重启的间隔,0为不重启
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
path=/home/dmdba/dmdsc/data/DSC02/DSC02_conf/dm.ini
dcr_ini=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI
1.启动DMCSS
DSC01
[dmdba@DSC01 bin]$ ./dmcss DCR_INI=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI DMCSS V8 DMCSS IS READY
DSC02
[dmdba@DSC02 bin]$ ./dmcss DCR_INI=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI DMCSS V8 DMCSS IS READY
2.启动DMASM
DSC01
[dmdba@DSC01 bin]$ ./dmasmsvr DCR_INI=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI ASM SELF EPNO:0 DMASMSVR V8 dmasmsvr task worker thread startup the ASM server is Ready. check css cmd: START NOTIFY, cmd_seq: 46, code: 0 check css cmd: EP START, cmd_seq: 47, code: 0 ASM Control Node EPNO:0 [WARNING]Decode asmdisk device fail, sig:1751483255, disk_id:65535, group_id:65535. [WARNING]Decode asmdisk device fail, sig:1751483255, disk_id:65535, group_id:65535. check css cmd: EP OPEN, cmd_seq: 52, code: 0 check css cmd: EP REAL OPEN, cmd_seq: 55, code: 0
DSC02
[dmdba@DSC02 bin]$ ./dmasmsvr DCR_INI=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI
ASM SELF EPNO:1
DMASMSVR V8
dmasmsvr task worker thread startup
the ASM server is Ready.
invalid command.
check css cmd: EP START, cmd_seq: 49, code: 0
ASM Control Node EPNO:0
[WARNING]Decode asmdisk device fail, sig:1751483255, disk_id:65535, group_id:65535.
[WARNING]Decode asmdisk device fail, sig:1751483255, disk_id:65535, group_id:65535.
只在集群的主节点DSC01,打开新的终端使用 dmasmtool 工具创建 DMASM 磁盘组
[dmdba@DSC01 ~]$ cd $DM_HOME/bin
[dmdba@DSC01 bin]$ ./dmasmtool DCR_INI=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI
dmasmtool V8
ASM>create diskgroup 'dmdata' asmdisk '/dev/asmdisk/dsc_data'
Used time: 55.108(ms).
ASM>create diskgroup 'dmlog' asmdisk '/dev/asmdisk/dsc_log'
Used time: 54.008(ms).
ASM>
在2节点DSC02上验证
[dmdba@DSC02 bin]$ ./dmasmtool DCR_INI=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI dmasmtool V8 ASM>ls + disk groups total [4]...... NO.1 name: dmdata NO.2 name: dmlog NO.3 name: VOTE NO.4 name: DCR Used time: 4.493(ms). ASM>
在 DSC01主节点机 器 上 准 备 DMINIT.INI 配 置 文 件 , 保 存 到
/home/dmdba/dmdsc/data/DSC01 目录下
[dmdba@DSC01 DSC01]$ cat DMINIT.INI
DB_NAME = dsc #初始化数据库名称
SYSTEM_PATH = +dmdata/data #初始化数据库存储的路径,asm磁盘
SYSTEM = +dmdata/data/dsc/system.dbf #SYSTEM表空间路径
SYSTEM_SIZE = 128 #system表空间大小
ROLL = dmdata/data/dsc/roll.dbf #roll表空间路径
ROLL_SIZE = 128 #大小
MAIN = +dmdata/data/dsc/main.dbf #main表空间
MAIN_SIZE = 128
CTL_PATH = +dmdata/data/dsc/dm.ctl #控制文件
LOG_SIZE = 256
DCR_PATH = /dev/asmdisk/dsc_dcr #dcr磁盘路径
DCR_SEQNO = 0
AUTO_OVERWRITE = 2
PAGE_SIZE = 16 #页大小
EXTENT_SIZE = 16 #簇大小
CASE_SENSITIVE = 0 #大小写敏感
CHARSET = 1 #字符集:0是18030;1是UTF8
SYSDBA_PWD = Dameng@8888 #密码
SYSAUDITOR_PWD = Dameng@8888
[DSC01] #名字跟dmcr_cfg.in的DB组中的DCR_EP_NAME名字保持一致
CONFIG_PATH = /home/dmdba/dmdsc/data/DSC01/DSC01_conf
PORT_NUM = 5236
MAL_HOST = 10.0.0.80
MAL_PORT = 6537 #给数据库实例使用,不要和DMASVRMAL.INI的MAL一样
LOG_PATH = +dmlog/log/DSC01_log1.log #日志文件路径
LOG_PATH = +dmlog/log/DSC01_log2.log
[DSC02]
CONFIG_PATH = /home/dmdba/dmdsc/data/DSC02/DSC02_conf
PORT_NUM = 5236
MAL_HOST = 10.0.0.81
MAL_PORT = 6537
LOG_PATH = +dmlog/log/DSC02_log1.log
LOG_PATH = +dmlog/log/DSC02_log2.log
[dmdba@DSC01 DSC01]$
配置完成后,就在该节点(node01)上初始化实例:
[dmdba@DSC01 bin]$ ./dminit control=/home/dmdba/dmdsc/data/DSC01/DMINIT.INI dminit V8 db version: 0x7000d file dm.key not found, use default license! License will expire on 2027-07-07 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL ...... create dm database success.
验证
[dmdba@DSC01 bin]$ ./dmasmtool DCR_INI=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI dmasmtool V8 ASM>ls +dmdata/data/dsc dir : bak file : dm.ctl dir : ctl_bak file : system.dbf file : dm_service.prikey dir : prikey_bak file : main.dbf file : roll.dbf dir : HMAIN total count 9. Used time: 56.452(ms)
初始化完成后会在 init 控制文件配置的目录(config_path参数配置的目录)下生成 2 个实例的配置文件
DSC01
需要手动把DSC02的conf文件拷贝到DSC02
[dmdba@DSC01 DSC02]$ scp -r /home/dmdba/dmdsc/data/DSC02/DSC02_conf/* 10.0.0.81:/home/dmdba/dmdsc/data/DSC02/DSC02_conf/
一、启动数据库
DSC01
[dmdba@DSC01 bin]$ ./dmserver /home/dmdba/dmdsc/data/DSC01/DSC01_conf/dm.ini dcr_ini=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI
DSC02
[dmdba@DSC02 bin]$ ./dmserver /home/dmdba/dmdsc/data/DSC02/DSC02_conf/dm.ini dcr_ini=/home/dmdba/dmdsc/data/DSC02/DMDCR.INI
当数据库提示“SYSTEM IS READY"时,表明数据库已经open了。
二、验证集群信息
[dmdba@DSC01 ~]$ cd $DM_HOME/bin
[dmdba@DSC01 bin]$ ./disql
disql V8
用户名:SYSDBA
密码:
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 34.598(ms)
SQL> select user;
行号 USER
---------- ------
1 SYSDBA
已用时间: 0.909(毫秒). 执行号:601.
SQL> select * from v$dsc_ep_info;
行号 EP_NAME EP_SEQNO EP_GUID EP_TIMESTAMP EP_MODE
---------- ------- ----------- -------------------- -------------------- ------------
EP_STATUS
---------
1 DSC01 0 2461615 2461651 Control Node
OK
2 DSC02 1 2001668 2001697 Normal Node
OK
三、启动数据库中遇到的错误
问题1:
启动过程中DSC02提示【BUFFER]参数不一致
parameter[BUFFER] is not same between DSC instances in memory, local ep[1] value[2000], remote ep[0] value[4000]!
hpc_ini_info_check, local ep's ini value is not same with remote ep[0] in memory, need to modify local dm.ini manually and restart local ep!
解决:
1.DSC01和DSC02的dm.ini文件中BUFFER确实不一样,确认是否一样。
2.采用虚拟机测试,虚拟机cpu、内存都很低,可以适当降低两台节点dm.ini的某些参数
参考如下:
MEMORY_TARGET=384 BUFFER=192 CACHE_POOL_SIZE=16 HUGE_BUFFER=0
问题2:
roll.dbf缺失
解答:
1.roll.dbf缺失,可能是DMDCR.INI文件中roll文件的路径拼写有误,此例中参考
2.roll.dbf缺失可能是初始化数据库的时候中间失败,需要清理环境后重新初始化数据库,步骤如下。
清理环境
1.清空数据库目录(DSC01执行)
cd /dmdbms/bin
./dmasmtool DCR_INI=/home/dmdba/dmdsc/data/DSC01/DMDCR.INI
# 递归删除整个数据库目录(包含里面所有子目录、文件)
rm -r +dmdata/data/dsc
# 确认删除完毕
ls +dmdata/data
2.清空两台节点本地的CONF配置文件
#DSC01
rm -rf /home/dmdba/dmdsc/data/DSC01/DSC01_conf/*
#DSC02
rm -rf /home/dmdba/dmdsc/data/DSC02/DSC02_conf/*
重新初始化dminit库(DSC01节点执行)
./dminit control=/home/dmdba/dmdsc/data/DSC01/DMINIT.INI
如果操作后还是不行,是DMDCR集群元数据缓存异常,需要删除共享磁盘,重建整套ASM磁盘(虚拟机测试场景,推荐)
现在我们搭建监视器,配置 DMCSSM.INI 文件。
DMCSSM 在任何机器上均可以启动,只要该台机器和 DMDSC 的真实机器网络是相通的,就可以监控 DMDSC 集群信息。
这里我们选择在 DSC01机器上搭建监视器。/home/dmdba/dmdsc/data 目录中DMCSSM.INI 详细内容如下:
[dmdba@DSC01 data]$ cat DMCSSM.INI
#和 DMDCR_CFG.INI 中的 DCR_OGUID 保持一致
CSSM_OGUID = 63635
#配置所有 CSS 的连接信息,
#与 DMDCR_CFG.INI 中 CSS 配置项的 DCR_EP_HOST 和 DCR_EP_PORT 保持一致
CSSM_CSS_IP = 10.0.0.80:9836
CSSM_CSS_IP = 10.0.0.81:9837
CSSM_LOG_PATH = /home/dmdba/dmdsc/data/cssm_log #监视器日志文件存放路径
CSSM_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
CSSM_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
启动监视器
[dmdba@DSC01 bin]$ ./dmcssm ini_path=/home/dmdba/dmdsc/data/DMCSSM.INI [monitor] [2026-08-19 22:13:02.688] CSS MONITOR V8 [monitor] [2026-08-19 22:13:03.962] CSS MONITOR SYSTEM IS READY. [monitor] [2026-08-19 22:13:03.967] Wait CSS Control Node choosed... [monitor] [2026-08-19 22:13:05.071] Wait CSS Control Node choosed succeed.
show查看
show
至此,基于 DMASM 的 DMDSC 已经搭建完成!!!
文章
阅读量
获赞
