注册
DM8 DSC 双节点集群本地环境模拟部署:iSCSI 共享存储 + DSC
专栏/技术分享/ 文章详情 /

DM8 DSC 双节点集群本地环境模拟部署:iSCSI 共享存储 + DSC

wwhhdd 2026/09/04 68 0 0
摘要

DM8 DSC 双节点集群本地环境模拟部署:iSCSI 共享存储 + DSC

本文基于两台 CentOS 7 虚拟机和一台 iSCSI 共享存储服务虚拟机,记录 DM8 DSC 双节点集群的部署过程。内容覆盖共享盘配置、DCR/VOTE 初始化、DMASM 磁盘组创建、数据库实例初始化和服务化启动。

适用范围:DM8、CentOS 7、本地学习环境。

1. 架构与规划

1.1 主机规划

角色 IP 地址 说明
DSC0 192.168.64.2 数据库节点 0
DSC1 192.168.64.3 数据库节点 1
iSCSI Target 192.168.64.5 向两个节点提供共享 LUN

实验中将 192.168.64.* 同时作为业务和集群通信网络。生产环境中,CSS/ASM/MAL 心跳应使用独立网络,且建议冗余。

1.2 共享盘规划

LUN iSCSI Backstore 容量 用途 节点别名
0 dsc_dcr 1G DCR 配置盘 /dev/dm/asm-dmdcr
1 dsc_vote 1G VOTE 表决盘 /dev/dm/asm-dmvote
2 dsc_log 4G Redo 日志盘 /dev/dm/asm-dmlog
3 dsc_arch 4G 归档盘 /dev/dm/asm-dmarch
4 dsc_data 5G 数据盘 /dev/dm/asm-dmdata

所有共享盘均作为整盘裸设备使用:不分区、不执行 mkfs、不写入 /etc/fstab、不挂载为文件系统。Redo 日志盘测试环境至少保留 4G。

1.3 端口规划

组件 端口
iSCSI Target 3260
CSS 11286
ASM 11276
ASM MAL 11266
数据库 MAL 11246
数据库服务 5236

2. iSCSI 共享存储配置

2.1 在 Target 节点确认 5 块磁盘

192.168.64.5 使用 root 执行:

lsblk

本文假定新增磁盘为 /dev/vda/dev/vde,不要误操作系统盘 /dev/sda

2.2 创建 iSCSI Target

192.168.64.5 使用 root 执行:

yum install -y targetcli systemctl enable --now target targetcli

进入 targetcli 后依次执行:

/backstores/block create name=dsc_dcr dev=/dev/vda
/backstores/block create name=dsc_vote dev=/dev/vdb
/backstores/block create name=dsc_log dev=/dev/vdc
/backstores/block create name=dsc_arch dev=/dev/vdd
/backstores/block create name=dsc_data dev=/dev/vde

/iscsi create iqn.2026-08.local.dsc:storage
/iscsi/iqn.2026-08.local.dsc:storage/tpg1/luns create /backstores/block/dsc_dcr lun=0
/iscsi/iqn.2026-08.local.dsc:storage/tpg1/luns create /backstores/block/dsc_vote lun=1
/iscsi/iqn.2026-08.local.dsc:storage/tpg1/luns create /backstores/block/dsc_log lun=2
/iscsi/iqn.2026-08.local.dsc:storage/tpg1/luns create /backstores/block/dsc_arch lun=3
/iscsi/iqn.2026-08.local.dsc:storage/tpg1/luns create /backstores/block/dsc_data lun=4

/iscsi/iqn.2026-08.local.dsc:storage/tpg1/acls create iqn.2026-08.local.dsc:dsc0
/iscsi/iqn.2026-08.local.dsc:storage/tpg1/acls create iqn.2026-08.local.dsc:dsc1
saveconfig
exit

检查 3260 端口:

ss -lntp | grep 3260 targetcli ls

若启用了防火墙,请放通 TCP 3260;学习环境可以临时停用 firewalld,但不要在生产环境直接关闭防火墙。

2.3 在两个 DSC 节点登录 Target

192.168.64.2 使用 root 执行:

yum install -y iscsi-initiator-utils cp /etc/iscsi/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi.bak echo 'InitiatorName=iqn.2026-08.local.dsc:dsc0' > /etc/iscsi/initiatorname.iscsi systemctl enable --now iscsid iscsiadm -m discovery -t sendtargets -p 192.168.64.5:3260 iscsiadm -m node -T iqn.2026-08.local.dsc:storage -p 192.168.64.5:3260 --login iscsiadm -m node -T iqn.2026-08.local.dsc:storage -p 192.168.64.5:3260 --op update -n node.startup -v automatic systemctl enable iscsi

192.168.64.3 执行相同命令,仅将 Initiator 改为:

echo 'InitiatorName=iqn.2026-08.local.dsc:dsc1' > /etc/iscsi/initiatorname.iscsi

两个节点分别验证:

iscsiadm -m session -P 3 ls -l /dev/disk/by-path/ | grep '192.168.64.5.*iqn.2026-08.local.dsc:storage.*lun-'

应看到 LUN 0 至 LUN 4。/dev/sdX 名称可能在重启后变化,后续不能直接依赖它。

3. 共享盘持久化绑定

3.1 获取每个 LUN 的 SCSI 唯一标识

先在 192.168.64.2 使用 root 执行:

for lun in 0 1 2 3 4; do dev=$(readlink -f "/dev/disk/by-path/ip-192.168.64.5:3260-iscsi-iqn.2026-08.local.dsc:storage-lun-${lun}") printf 'LUN%s: %s\n' "$lun" "$dev" /usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device="$dev" done

记录 LUN 0 至 LUN 4 对应的 5 个唯一标识。再到 192.168.64.3 执行相同命令,确认同一 LUN 的标识完全一致。

3.2 创建 udev 规则

192.168.64.2 创建规则:

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

将下列 RESULT 替换为上一节实际取得的值:

KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="<LUN0唯一标识>", SYMLINK+="dm/asm-dmdcr", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="<LUN1唯一标识>", SYMLINK+="dm/asm-dmvote", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="<LUN2唯一标识>", SYMLINK+="dm/asm-dmlog", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="<LUN3唯一标识>", SYMLINK+="dm/asm-dmarch", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="<LUN4唯一标识>", SYMLINK+="dm/asm-dmdata", OWNER="dmdba", GROUP="dinstall", MODE="0660"

复制到 DSC1 并在两个节点加载规则:

scp /etc/udev/rules.d/88-dm-asmdevices.rules root@192.168.64.3:/etc/udev/rules.d/ mkdir -p /dev/dm udevadm control --reload-rules udevadm trigger --type=devices --action=change udevadm settle ls -l /dev/dm/asm-*

两个节点应出现相同的 5 个别名:

for disk in /dev/dm/asm-dmdcr /dev/dm/asm-dmvote /dev/dm/asm-dmlog /dev/dm/asm-dmarch /dev/dm/asm-dmdata; do echo "$disk -> $(readlink -f "$disk")" blockdev --getsize64 "$disk" done

4. 数据库软件与 DSC 核心配置

4.1 安装数据库软件

在 DSC0、DSC1 分别安装相同版本、相同补丁级别的 DM8。以安装镜像为例,先使用 root 挂载,再用 dmdba 执行安装程序:

mount -o loop /实际路径/dm8_xxx_x86_rh6_64.iso /mnt su - dmdba /mnt/DMInstall.bin -i

交互安装时,两个节点必须使用相同的安装用户和安装路径;本例安装到:

/home/dmdba/dmdbms

此阶段仅安装软件,不要初始化单机数据库,也不要注册单机数据库服务

安装完成后,在两个节点创建配置目录:

mkdir -p /home/dmdba/dmdbms/dsc_config chown -R dmdba:dinstall /home/dmdba/dmdbms/dsc_config

4.2 配置 dmdcr_cfg.ini

在两个节点创建相同文件:

vim /home/dmdba/dmdbms/dsc_config/dmdcr_cfg.ini
DCR_N_GRP = 3 DCR_VTD_PATH = /dev/dm/asm-dmvote DCR_OGUID = 210715 [GRP] DCR_GRP_TYPE = CSS DCR_GRP_NAME = GRP_CSS DCR_GRP_N_EP = 2 DCR_GRP_DSKCHK_CNT = 65 [GRP_CSS] DCR_EP_NAME = CSS0 DCR_EP_HOST = 192.168.64.2 DCR_EP_PORT = 11286 [GRP_CSS] DCR_EP_NAME = CSS1 DCR_EP_HOST = 192.168.64.3 DCR_EP_PORT = 11286 [GRP] DCR_GRP_TYPE = ASM DCR_GRP_NAME = GRP_ASM DCR_GRP_N_EP = 2 DCR_GRP_DSKCHK_CNT = 61 [GRP_ASM] DCR_EP_NAME = ASM0 DCR_EP_SHM_KEY = 42424 DCR_EP_SHM_SIZE = 256 DCR_EP_HOST = 192.168.64.2 DCR_EP_PORT = 11276 DCR_EP_ASM_LOAD_PATH = /dev/dm [GRP_ASM] DCR_EP_NAME = ASM1 DCR_EP_SHM_KEY = 42425 DCR_EP_SHM_SIZE = 256 DCR_EP_HOST = 192.168.64.3 DCR_EP_PORT = 11276 DCR_EP_ASM_LOAD_PATH = /dev/dm [GRP] DCR_GRP_TYPE = DB DCR_GRP_NAME = GRP_DSC DCR_GRP_N_EP = 2 DCR_GRP_DSKCHK_CNT = 57 [GRP_DSC] DCR_EP_NAME = DSC0 DCR_EP_SEQNO = 0 DCR_EP_PORT = 5236 [GRP_DSC] DCR_EP_NAME = DSC1 DCR_EP_SEQNO = 1 DCR_EP_PORT = 5236

DCR_OGUID 必须在配置文件和后面的监视器配置中保持一致。DCR_EP_SHM_SIZE=256 仅适合小内存实验虚拟机;生产按官方建议和实际内存设置。

4.3 初始化 DCR、VOTE 与 ASM 磁盘

只在 DSC0(192.168.64.2)执行一次。以下操作会写入共享盘盘头,DSC1 不能重复执行。

/home/dmdba/dmdbms/bin/dmasmcmd

进入 ASM> 后执行,将 DSC密码 替换为实际密码:

create dcrdisk '/dev/dm/asm-dmdcr' 'dcr'
create votedisk '/dev/dm/asm-dmvote' 'vote'
init dcrdisk '/dev/dm/asm-dmdcr' from '/home/dmdba/dmdbms/dsc_config/dmdcr_cfg.ini' identified by 'DSC密码'
init votedisk '/dev/dm/asm-dmvote' from '/home/dmdba/dmdbms/dsc_config/dmdcr_cfg.ini'
create asmdisk '/dev/dm/asm-dmlog' 'LOG0'
create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
create asmdisk '/dev/dm/asm-dmarch' 'ARCH0'
listdisks '/dev/dm/'
exit

在 DSC1 以 root 执行后,再用 dmdba 查看共享盘:

for disk in /dev/dm/asm-dmdcr /dev/dm/asm-dmvote /dev/dm/asm-dmlog /dev/dm/asm-dmdata /dev/dm/asm-dmarch; do blockdev --flushbufs "$disk" done su - dmdba /home/dmdba/dmdbms/bin/dmasmcmd
listdisks '/dev/dm/'
exit

4.4 配置 dmasvrmal.ini 和 dmdcr.ini

在两个节点创建相同的 dmasvrmal.ini

[MAL_INST0] MAL_INST_NAME = ASM0 MAL_HOST = 192.168.64.2 MAL_PORT = 11266 [MAL_INST1] MAL_INST_NAME = ASM1 MAL_HOST = 192.168.64.3 MAL_PORT = 11266

文件路径:/home/dmdba/dmdbms/dsc_config/dmasvrmal.ini

DSC0 的 /home/dmdba/dmdbms/dsc_config/dmdcr.ini

DMDCR_PATH = /dev/dm/asm-dmdcr DMDCR_MAL_PATH = /home/dmdba/dmdbms/dsc_config/dmasvrmal.ini DMDCR_SEQNO = 0 DMDCR_AUTO_OPEN_CHECK = 111 DMDCR_ASM_TRACE_LEVEL = 2

DSC1 的内容相同,仅修改:

DMDCR_SEQNO = 1

5. CSS、ASM 与实例初始化

5.1 手动启动 CSS 与 ASM

两个节点均以 dmdba 用户分别打开两个终端:

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

两个节点的 ASM 日志均出现 the ASM server is Ready,表示 ASM 已完成启动。

5.2 创建 ASM 磁盘组

只在 DSC0 执行:

/home/dmdba/dmdbms/bin/dmasmtool DCR_INI=/home/dmdba/dmdbms/dsc_config/dmdcr.ini
create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-dmlog'
create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata'
create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-dmarch'
exit

5.3 初始化 DSC 实例

只在 DSC0 创建 /home/dmdba/dmdbms/dsc_config/dminit.ini。系统密码请替换为实际值:

DB_NAME = DSC SYSDBA_PWD = <SYSDBA密码> SYSAUDITOR_PWD = <SYSAUDITOR密码> SYSTEM_PATH = +DMDATA/data SYSTEM = +DMDATA/data/SYSTEM.dbf SYSTEM_SIZE = 512 ROLL = +DMDATA/data/ROLL.dbf ROLL_SIZE = 512 MAIN = +DMDATA/data/MAIN.dbf MAIN_SIZE = 512 CTL_PATH = +DMDATA/data/dm.ctl CTL_SIZE = 8 LOG_SIZE = 512 DCR_PATH = /dev/dm/asm-dmdcr DCR_SEQNO = 0 AUTO_OVERWRITE = 1 PAGE_SIZE = 32 EXTENT_SIZE = 16 BLANK_PAD_MODE = 1 [DSC0] CONFIG_PATH = /home/dmdba/dmdbms/dsc_config/DSC0 PORT_NUM = 5236 MAL_HOST = 192.168.64.2 MAL_PORT = 11246 LOG_PATH = +DMLOG/DSC0_LOG01.log LOG_PATH = +DMLOG/DSC0_LOG02.log [DSC1] CONFIG_PATH = /home/dmdba/dmdbms/dsc_config/DSC1 PORT_NUM = 5236 MAL_HOST = 192.168.64.3 MAL_PORT = 11246 LOG_PATH = +DMLOG/DSC1_LOG01.log LOG_PATH = +DMLOG/DSC1_LOG02.log

初始化并复制 DSC1 本地配置:

mkdir -p /home/dmdba/dmdbms/dsc_config/DSC0 /home/dmdba/dmdbms/dsc_config/DSC1 /home/dmdba/dmdbms/bin/dminit CONTROL=/home/dmdba/dmdbms/dsc_config/dminit.ini scp -r /home/dmdba/dmdbms/dsc_config/DSC1 dmdba@192.168.64.3:/home/dmdba/dmdbms/dsc_config/

6. 配置归档并启动数据库

DSC0 的 dm.ini 设置 ARCH_INI = 1,并创建 DSC0/dmarch.ini

ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = +DMARCH/ARCH/DSC0/arch ARCH_FILE_SIZE = 256 ARCH_SPACE_LIMIT = 1536 [ARCHIVE_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DSC1 ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC1/arch ARCH_FILE_SIZE = 256 ARCH_SPACE_LIMIT = 1536

DSC1 的配置相同,但将 DSC0DSC1 对调。

确认 CSS 与 ASM 仍正常运行后,分别启动两个数据库实例:

# DSC0:192.168.64.2 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/dsc_config/DSC0/dm.ini DCR_INI=/home/dmdba/dmdbms/dsc_config/dmdcr.ini # DSC1:192.168.64.3 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/dsc_config/DSC1/dm.ini DCR_INI=/home/dmdba/dmdbms/dsc_config/dmdcr.ini

7. 集群验证与服务化启动

7.1 使用监视器确认集群状态

在 DSC0 创建 /home/dmdba/dmdbms/dsc_config/dmcssm.ini

CSSM_OGUID = 210715 CSSM_CSS_IP = 192.168.64.2:11286 CSSM_CSS_IP = 192.168.64.3:11286 CSSM_LOG_PATH = /home/dmdba/dmdbms/log CSSM_LOG_FILE_SIZE = 512 CSSM_LOG_SPACE_LIMIT = 2048

启动监视器并输入 show

/home/dmdba/dmdbms/bin/dmcssm INI_PATH=/home/dmdba/dmdbms/dsc_config/dmcssm.ini

正常情况下,可看到 CSS、ASM、DB 三个组,以及 DSC0DSC1 两个数据库实例。

7.2 注册后台服务

手工启动验证无误后,在两个节点以 root 注册服务。DSC0:

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /home/dmdba/dmdbms/dsc_config/dmdcr.ini -p CSS /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /home/dmdba/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/dsc_config/DSC0/dm.ini -dcr_ini /home/dmdba/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC

DSC1 的前两条相同,第三条改为:

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/dsc_config/DSC1/dm.ini -dcr_ini /home/dmdba/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC

停止前台进程后,按 CSS → ASM → DMSERVER 的顺序启动服务;停止时顺序相反。

systemctl start DmCSSServiceCSS systemctl start DmASMSvrServiceASM systemctl start DmServiceDSC

在两个节点以 root 为 dmserverdmasmsvr 授予网络能力:

setcap cap_net_raw,cap_net_admin=eip /home/dmdba/dmdbms/bin/dmserver setcap cap_net_raw,cap_net_admin=eip /home/dmdba/dmdbms/bin/dmasmsvr getcap /home/dmdba/dmdbms/bin/dmserver getcap /home/dmdba/dmdbms/bin/dmasmsvr

服务安装脚本输出的实际服务名优先级最高;如果名称与本文示例不同,以脚本输出为准替换 systemctl 命令。

最后检查:

iscsiadm -m session ls -l /dev/dm/asm-* ps -ef | grep -E '[d]mcss|[d]masmsvr|[d]mserver' ss -lntp | grep -E '5236|11246|11266|11276|11286'

8. 常见故障排查

现象 优先检查
重启后找不到 /dev/dm/asm-* iscsiadm -m session、udev 规则、SCSI 标识是否一致
CSS/ASM 无法启动 两节点网络与端口、dmdcr.ini 序号、DCR/VOTE 是否只初始化一次
DMASM 未 Ready DCR、VOTE、ASM 裸盘权限和别名,dmasvrmal.ini 中 IP/端口
数据库无法启动 CSS、ASM 是否已启动,DCR_INIdm.ini、归档路径和磁盘组名称
集群状态异常 先通过 dmcssmshow 确认故障组,再看对应 CSS/ASM/数据库日志

参考资料

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服