注册
DM8 DSC 单机双实例部署报告
专栏/技术分享/ 文章详情 /

DM8 DSC 单机双实例部署报告

济楚 2026/07/24 81 1 0
摘要

1. 部署说明

本报告将原先通过 DEM 页面完成的 DSC 自动部署过程,还原为可在 Linux 命令行中手工完成的配置文件创建、裸盘初始化、服务注册、组件启动和功能验证流程。

本次环境为单台 CentOS 7 虚拟机上的双逻辑实例:

主机名:dujingying
DM 软件源目录:/dm8
DSC 部署目录:/opt/DMDeploy/dmdsc
内网地址:192.168.200.167
外网地址:192.168.201.73
数据库名:DAMENG
实例:DSC01、DSC02

本环境用于学习和功能验证,不具备真正的主机级高可用能力。

2. 部署规划

2.1 网络规划

CSS DCR、ASM DCR 通信地址:192.168.200.167
ASM MAL、数据库 MAL 和实例访问地址:192.168.201.73

2.2 共享磁盘规划

/dev/vdb  500 MB  DCR
/dev/vdc  500 MB  VOTE
/dev/vdd   20 GB  DMLOG
/dev/vde   50 GB  DMDATA

固定设备路径:

/dev/dm-dsc/dcr   -> /dev/vdb
/dev/dm-dsc/vote  -> /dev/vdc
/dev/dm-dsc/log   -> /dev/vdd
/dev/dm-dsc/data  -> /dev/vde

2.3 端口规划

组件                 DSC01    DSC02
数据库服务端口         7236     7237
数据库 MAL 端口        7336     7337
ASM MAL 端口           7636     7637
ASM DCR 端口           7736     7737
CSS DCR 端口           7836     7837

DSC 独立 DMAP 端口:4237

2.4 目录规划

/opt/DMDeploy/dmdsc/bin
/opt/DMDeploy/dmdsc/script
/opt/DMDeploy/dmdsc/data/DSC01
/opt/DMDeploy/dmdsc/data/DSC02
/opt/DMDeploy/dmdsc/CSSM01
/opt/DMDeploy/dmdsc/log

3. 部署前检查

3.1 检查主机资源

hostname hostname -I cat /etc/os-release uname -m nproc free -h lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT

3.2 检查 DSC 执行程序

ls -lh \ /dm8/bin/dmcss \ /dm8/bin/dmcssm \ /dm8/bin/dmasmsvr \ /dm8/bin/dmasmcmd \ /dm8/bin/dmasmtool \ /dm8/bin/dminit \ /dm8/bin/dmserver \ /dm8/bin/dmap

3.3 检查许可证

使用已运行的 DM8 实例查询许可证信息:

su - dmdba disql SYSDBA/'<数据库密码>'@127.0.0.1:5236
select * from v$license; exit;

确认当前授权支持 DSC 集群功能。本次环境检查结果为支持 DSC 的开发授权。

3.4 检查端口占用

for p in \ 4237 \ 7236 7237 \ 7336 7337 \ 7636 7637 \ 7736 7737 \ 7836 7837 do if ss -lntH | awk '{print $4}' | grep -qE ":${p}$"; then echo "端口 ${p}:已占用" else echo "端口 ${p}:可用" fi done

原 DMAP 已使用 4236,因此 DSC 环境单独使用 4237

3.5 检查裸设备

以下命令使用 root 执行:

wipefs -n /dev/vdb wipefs -n /dev/vdc wipefs -n /dev/vdd wipefs -n /dev/vde blkid /dev/vdb /dev/vdc /dev/vdd /dev/vde fdisk -l /dev/vdb fdisk -l /dev/vdc fdisk -l /dev/vdd fdisk -l /dev/vde findmnt -S /dev/vdb findmnt -S /dev/vdc findmnt -S /dev/vdd findmnt -S /dev/vde mount | grep -E '/dev/vdb|/dev/vdc|/dev/vdd|/dev/vde'

安装 fuser

yum install -y psmisc

检查设备占用:

fuser -v /dev/vdb /dev/vdc /dev/vdd /dev/vde pvs 2>/dev/null vgs 2>/dev/null lvs 2>/dev/null swapon --show dmsetup ls 2>/dev/null

四块磁盘必须满足:

无文件系统
无挂载点
无分区
不属于 LVM
不属于 swap
无进程占用

4. 配置固定裸设备路径

4.1 获取设备 ID_PATH

for disk in vdb vdc vdd vde do echo "================ /dev/${disk} ================" udevadm info --query=property --name=/dev/${disk} | grep -E '^(DEVNAME|DEVPATH|ID_SERIAL|ID_SERIAL_SHORT|ID_PATH|ID_WWN|MAJOR|MINOR)=' done

本次设备属性:

vdb:pci-0000:07:00.0
vdc:pci-0000:08:00.0
vdd:pci-0000:09:00.0
vde:pci-0000:0a:00.0

4.2 创建 udev 规则

RULE_FILE=/etc/udev/rules.d/99-dm-dsc.rules if [ -f "$RULE_FILE" ]; then cp -a "$RULE_FILE" "${RULE_FILE}.bak.$(date +%Y%m%d%H%M%S)" fi cat > "$RULE_FILE" <<'EOF' SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="pci-0000:07:00.0", SYMLINK+="dm-dsc/dcr", OWNER="dmdba", GROUP="dinstall", MODE="0660" SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="pci-0000:08:00.0", SYMLINK+="dm-dsc/vote", OWNER="dmdba", GROUP="dinstall", MODE="0660" SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="pci-0000:09:00.0", SYMLINK+="dm-dsc/log", OWNER="dmdba", GROUP="dinstall", MODE="0660" SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="pci-0000:0a:00.0", SYMLINK+="dm-dsc/data", OWNER="dmdba", GROUP="dinstall", MODE="0660" EOF

加载规则:

udevadm control --reload-rules udevadm trigger --action=change --sysname-match=vdb udevadm trigger --action=change --sysname-match=vdc udevadm trigger --action=change --sysname-match=vdd udevadm trigger --action=change --sysname-match=vde udevadm settle

验证:

ls -l /dev/dm-dsc for disk in dcr vote log data do printf '%-8s -> %s\n' \ "$disk" \ "$(readlink -f /dev/dm-dsc/$disk)" done ls -lL \ /dev/dm-dsc/dcr \ /dev/dm-dsc/vote \ /dev/dm-dsc/log \ /dev/dm-dsc/data

验证 dmdba 权限:

su - dmdba -c ' for disk in dcr vote log data do dev="/dev/dm-dsc/${disk}" if [ -b "$dev" ] && [ -r "$dev" ] && [ -w "$dev" ]; then echo "$dev:块设备存在,dmdba 具备读写权限" else echo "$dev:检查失败" fi done '

5. 准备 DSC 程序和目录

5.1 创建目录

mkdir -p \ /opt/DMDeploy/dmdsc/data/DSC01 \ /opt/DMDeploy/dmdsc/data/DSC02 \ /opt/DMDeploy/dmdsc/CSSM01 \ /opt/DMDeploy/dmdsc/log

5.2 复制执行程序和服务脚本

为了使注册后的服务调用 /opt/DMDeploy/dmdsc/bin 下的程序,复制 DM 的 binscript 目录:

cp -a /dm8/bin /opt/DMDeploy/dmdsc/ cp -a /dm8/script /opt/DMDeploy/dmdsc/ if [ -d /dm8/lib ]; then cp -a /dm8/lib /opt/DMDeploy/dmdsc/ fi

修正权限:

chown -R dmdba:dinstall /opt/DMDeploy/dmdsc chmod 755 /opt/DMDeploy/dmdsc/bin

检查:

ls -lh \ /opt/DMDeploy/dmdsc/bin/dmcss \ /opt/DMDeploy/dmdsc/bin/dmcssm \ /opt/DMDeploy/dmdsc/bin/dmasmsvr \ /opt/DMDeploy/dmdsc/bin/dmasmcmd \ /opt/DMDeploy/dmdsc/bin/dmasmtool \ /opt/DMDeploy/dmdsc/bin/dminit \ /opt/DMDeploy/dmdsc/bin/dmserver \ /opt/DMDeploy/dmdsc/bin/dmap

6. 创建并初始化 DCR、VOTE 和 ASM 磁盘

6.1 创建 dmdcr_cfg.ini

cat > /opt/DMDeploy/dmdsc/data/DSC01/dmdcr_cfg.ini <<'EOF' DCR_N_GRP= 3 DCR_VTD_PATH= /dev/dm-dsc/vote DCR_OGUID= 1482207627 [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= CSS01 DCR_EP_HOST= 192.168.200.167 DCR_EP_PORT= 7836 [GRP_CSS] DCR_EP_NAME= CSS02 DCR_EP_HOST= 192.168.200.167 DCR_EP_PORT= 7837 [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= ASM01 DCR_EP_SHM_KEY= 5136 DCR_EP_SHM_SIZE= 10 DCR_EP_HOST= 192.168.200.167 DCR_EP_PORT= 7736 DCR_EP_ASM_LOAD_PATH= /dev/dm-dsc [GRP_ASM] DCR_EP_NAME= ASM02 DCR_EP_SHM_KEY= 56044 DCR_EP_SHM_SIZE= 10 DCR_EP_HOST= 192.168.200.167 DCR_EP_PORT= 7737 DCR_EP_ASM_LOAD_PATH= /dev/dm-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= 7236 [GRP_DSC] DCR_EP_NAME= DSC02 DCR_EP_SEQNO= 1 DCR_EP_PORT= 7237 EOF

检查:

cat /opt/DMDeploy/dmdsc/data/DSC01/dmdcr_cfg.ini

注意:

DCR_VTD_PATH 指向 VOTE 磁盘。
DMDCR_PATH 在后续 dmdcr.ini 中指向 DCR 磁盘。
同一台主机上的两个 ASM 节点必须使用不同的 DCR_EP_SHM_KEY。

6.2 创建 DMASMCMD 脚本

发布文档中不记录真实密码:

DCR_PWD='<DCR/ASM密码>'

创建脚本:

cat > /opt/DMDeploy/dmdsc/data/DSC01/asmcmd_init.txt <<EOF #asm script file create dcrdisk '/dev/dm-dsc/dcr' 'dcr' create votedisk '/dev/dm-dsc/vote' 'vote' create asmdisk '/dev/dm-dsc/log' 'log0' create asmdisk '/dev/dm-dsc/data' 'data0' init dcrdisk '/dev/dm-dsc/dcr' from '/opt/DMDeploy/dmdsc/data/DSC01/dmdcr_cfg.ini' identified by '${DCR_PWD}' init votedisk '/dev/dm-dsc/vote' from '/opt/DMDeploy/dmdsc/data/DSC01/dmdcr_cfg.ini' EOF chown dmdba:dinstall \ /opt/DMDeploy/dmdsc/data/DSC01/asmcmd_init.txt chmod 600 \ /opt/DMDeploy/dmdsc/data/DSC01/asmcmd_init.txt

执行初始化:

su - dmdba -c " /opt/DMDeploy/dmdsc/bin/dmasmcmd \ SCRIPT_FILE=/opt/DMDeploy/dmdsc/data/DSC01/asmcmd_init.txt "

实际自动部署日志对应的底层操作为:

create dcrdisk:成功
create votedisk:成功
create asmdisk log0:成功
create asmdisk data0:成功
init dcrdisk:成功
init votedisk:成功

执行后删除含密码的临时脚本:

shred -u /opt/DMDeploy/dmdsc/data/DSC01/asmcmd_init.txt unset DCR_PWD

7. 配置 ASM MAL 和节点 DCR

7.1 创建 dmasvrmal.ini

cat > /opt/DMDeploy/dmdsc/data/DSC01/dmasvrmal.ini <<'EOF' MAL_CHECK_INTERVAL= 30 MAL_CONN_FAIL_INTERVAL= 10 MAL_LOGIN_TIMEOUT= 15 MAL_BUF_SIZE= 100 MAL_SYS_BUF_SIZE= 0 MAL_VPOOL_SIZE= 128 MAL_COMPRESS_LEVEL= 0 [MAL_INST1] MAL_INST_NAME= ASM01 MAL_HOST= 192.168.201.73 MAL_PORT= 7636 MAL_LINK_MAGIC= 0 [MAL_INST2] MAL_INST_NAME= ASM02 MAL_HOST= 192.168.201.73 MAL_PORT= 7637 MAL_LINK_MAGIC= 0 EOF cp -a \ /opt/DMDeploy/dmdsc/data/DSC01/dmasvrmal.ini \ /opt/DMDeploy/dmdsc/data/DSC02/dmasvrmal.ini

7.2 创建 DSC01 的 dmdcr.ini

cat > /opt/DMDeploy/dmdsc/data/DSC01/dmdcr.ini <<'EOF' DMDCR_PATH= /dev/dm-dsc/dcr DMDCR_SEQNO= 0 DMDCR_MAL_PATH= /opt/DMDeploy/dmdsc/data/DSC01/dmasvrmal.ini DMDCR_ASM_RESTART_INTERVAL= 0 DMDCR_ASM_STARTUP_CMD= systemctl start DmASMSvrService_DSC01 DMDCR_DB_RESTART_INTERVAL= 0 DMDCR_DB_STARTUP_CMD= systemctl start DmService_DSC01 DMDCR_MESSAGE_CHECK= 1 EOF

7.3 创建 DSC02 的 dmdcr.ini

cat > /opt/DMDeploy/dmdsc/data/DSC02/dmdcr.ini <<'EOF' DMDCR_PATH= /dev/dm-dsc/dcr DMDCR_SEQNO= 1 DMDCR_MAL_PATH= /opt/DMDeploy/dmdsc/data/DSC02/dmasvrmal.ini DMDCR_ASM_RESTART_INTERVAL= 0 DMDCR_ASM_STARTUP_CMD= systemctl start DmASMSvrService_DSC02 DMDCR_DB_RESTART_INTERVAL= 0 DMDCR_DB_STARTUP_CMD= systemctl start DmService_DSC02 DMDCR_MESSAGE_CHECK= 1 EOF

修正权限:

chown -R dmdba:dinstall /opt/DMDeploy/dmdsc/data chmod 640 \ /opt/DMDeploy/dmdsc/data/DSC01/dmdcr_cfg.ini \ /opt/DMDeploy/dmdsc/data/DSC01/dmasvrmal.ini \ /opt/DMDeploy/dmdsc/data/DSC01/dmdcr.ini \ /opt/DMDeploy/dmdsc/data/DSC02/dmasvrmal.ini \ /opt/DMDeploy/dmdsc/data/DSC02/dmdcr.ini

8. 配置 DMCSSM 和独立 DMAP

8.1 创建 dmcssm.ini

cat > /opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini <<'EOF' CSSM_OGUID= 1482207627 CSSM_LOG_FILE_SIZE= 64 CSSM_LOG_SPACE_LIMIT= 0 CSSM_CSS_IP= 192.168.200.167:7836 CSSM_CSS_IP= 192.168.200.167:7837 EOF chown dmdba:dinstall \ /opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini chmod 640 \ /opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini

CSSM_OGUID 必须与 dmdcr_cfg.ini 中的 DCR_OGUID 相同。

8.2 创建 dmap.ini

本机原有 DMAP 使用 4236,为 DSC 环境创建独立的 4237

cat > /opt/DMDeploy/dmdsc/data/dmap.ini <<'EOF' AP_PORT=4237 EOF chown dmdba:dinstall /opt/DMDeploy/dmdsc/data/dmap.ini chmod 640 /opt/DMDeploy/dmdsc/data/dmap.ini

DMAP 可通过以下命令前台验证:

su - dmdba -c " /opt/DMDeploy/dmdsc/bin/dmap \ dmap_ini=/opt/DMDeploy/dmdsc/data/dmap.ini "

确认出现 dmap is ready 后退出,后续改为系统服务运行。


9. 注册 CSS、ASM、CSSM 和 DMAP 服务

使用 root 执行。

9.1 注册两个 CSS 服务

cd /opt/DMDeploy/dmdsc/script/root ./dm_service_installer.sh \ -t dmcss \ -p _DSC01 \ -dcr_ini /opt/DMDeploy/dmdsc/data/DSC01/dmdcr.ini ./dm_service_installer.sh \ -t dmcss \ -p _DSC02 \ -dcr_ini /opt/DMDeploy/dmdsc/data/DSC02/dmdcr.ini

生成:

DmCSSService_DSC01
DmCSSService_DSC02

9.2 注册两个 ASM 服务

./dm_service_installer.sh \ -t dmasmsvr \ -p _DSC01 \ -dcr_ini /opt/DMDeploy/dmdsc/data/DSC01/dmdcr.ini \ -y DmCSSService_DSC01.service ./dm_service_installer.sh \ -t dmasmsvr \ -p _DSC02 \ -dcr_ini /opt/DMDeploy/dmdsc/data/DSC02/dmdcr.ini \ -y DmCSSService_DSC02.service

生成:

DmASMSvrService_DSC01
DmASMSvrService_DSC02

9.3 注册 DMCSSM 服务

./dm_service_installer.sh \ -t dmcssm \ -p _CSSM01 \ -cssm_ini /opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini

生成:

DmCSSMonitorService_CSSM01

9.4 创建并注册独立 DMAP 服务

标准 dmap 服务类型不使用 -p 后缀。为了保留原有 DmAPService 的 4236 端口,复制服务脚本并指定单独的 dmap.ini

cp -a \ /opt/DMDeploy/dmdsc/bin/DmAPService \ /opt/DMDeploy/dmdsc/bin/DmAPService_dmdsc sed -i \ 's#^[[:space:]]*DMAP_INI_PATH[[:space:]]*=.*#DMAP_INI_PATH=/opt/DMDeploy/dmdsc/data/dmap.ini#' \ /opt/DMDeploy/dmdsc/bin/DmAPService_dmdsc chmod 755 /opt/DMDeploy/dmdsc/bin/DmAPService_dmdsc chown dmdba:dinstall /opt/DMDeploy/dmdsc/bin/DmAPService_dmdsc ./dm_service_installer.sh \ -s /opt/DMDeploy/dmdsc/bin/DmAPService_dmdsc

生成:

DmAPService_dmdsc

重新加载 systemd:

systemctl daemon-reload

10. 启动 CSS、CSSM、DMAP 和 ASM

10.1 启动 DMAP 和 CSSM

systemctl start DmAPService_dmdsc systemctl start DmCSSMonitorService_CSSM01

10.2 启动两个 CSS 节点

systemctl start DmCSSService_DSC01 systemctl start DmCSSService_DSC02 sleep 10

检查:

systemctl is-active \ DmCSSService_DSC01 \ DmCSSService_DSC02 \ DmCSSMonitorService_CSSM01 \ DmAPService_dmdsc ss -lntp | grep -E ':(4237|7836|7837)\b'

10.3 启动两个 ASM 节点

systemctl start DmASMSvrService_DSC01 systemctl start DmASMSvrService_DSC02 sleep 10

检查:

systemctl is-active \ DmASMSvrService_DSC01 \ DmASMSvrService_DSC02 ss -lntp | grep -E ':(7636|7637|7736|7737)\b' ps -eo pid,user,args | grep -E '[d]mcss|[d]masmsvr|[d]mcssm|[d]map'

启动顺序必须保持:

CSS → ASM → 数据库实例

11. 创建 ASM 磁盘组

连接 ASM:

su - dmdba /opt/DMDeploy/dmdsc/bin/dmasmtool \ dcr_ini=/opt/DMDeploy/dmdsc/data/DSC01/dmdcr.ini

ASM> 提示符中执行:

CREATE DISKGROUP DMLOG ASMDISK '/dev/dm-dsc/log' CREATE DISKGROUP DMDATA ASMDISK '/dev/dm-dsc/data'

退出后再次检查:

/opt/DMDeploy/dmdsc/bin/dmasmtool \ dcr_ini=/opt/DMDeploy/dmdsc/data/DSC01/dmdcr.ini

ASM> 中执行:

ls
lsdsk

实际部署日志确认:

Create diskgroup DMLOG, with asmdisk /dev/dm-dsc/log
Create diskgroup DMDATA, with asmdisk /dev/dm-dsc/data

12. 初始化 DSC 数据库

12.1 创建 dminit.ini

纯命令行部署直接将两个实例的 CONFIG_PATH 写为最终目录。DEM 自动部署生成的原始 dminit.ini 曾使用 DSC01 下的临时目录,部署任务随后再移动到 DSC02 目录;手工部署无需保留这一中间步骤。

cat > /opt/DMDeploy/dmdsc/data/DSC01/dminit.ini <<'EOF' # 数据库初始化参数配置 DB_NAME= DAMENG EXTENT_SIZE= 16 PAGE_SIZE= 8 LOG_SIZE= 1024 TIME_ZONE= +08:00 CHARSET= 0 CASE_SENSITIVE= 1 BLANK_PAD_MODE= 0 USE_NEW_HASH= 1 # DSC 初始化参数配置 SYSTEM_PATH= +DMDATA/data SYSTEM= +DMDATA/data/DAMENG/system.dbf SYSTEM_SIZE= 128 ROLL= +DMDATA/data/DAMENG/roll.dbf ROLL_SIZE= 128 MAIN= +DMDATA/data/DAMENG/main.dbf MAIN_SIZE= 128 CTL_PATH= +DMDATA/data/DAMENG/dm.ctl CTL_SIZE= 8 DCR_PATH= /dev/dm-dsc/dcr DCR_SEQNO= 0 AUTO_OVERWRITE= 1 [DSC01] CONFIG_PATH= /opt/DMDeploy/dmdsc/data/DSC01/DSC01_conf PORT_NUM= 7236 MAL_HOST= 192.168.201.73 MAL_PORT= 7336 LOG_PATH= +DMLOG/log/DSC01_log1.log LOG_PATH= +DMLOG/log/DSC01_log2.log [DSC02] CONFIG_PATH= /opt/DMDeploy/dmdsc/data/DSC02/DSC02_conf PORT_NUM= 7237 MAL_HOST= 192.168.201.73 MAL_PORT= 7337 LOG_PATH= +DMLOG/log/DSC02_log1.log LOG_PATH= +DMLOG/log/DSC02_log2.log EOF chown dmdba:dinstall /opt/DMDeploy/dmdsc/data/DSC01/dminit.ini chmod 600 /opt/DMDeploy/dmdsc/data/DSC01/dminit.ini

AUTO_OVERWRITE=1 会允许初始化程序覆盖同名目标。执行前必须确认 DCR、ASM 磁盘组和目标数据库中不存在需要保留的数据。

12.2 执行初始化

发布文档中使用密码占位符:

SYSDBA_PWD='<SYSDBA密码>' SYSAUDITOR_PWD='<SYSAUDITOR密码>'

执行:

su - dmdba -c " /opt/DMDeploy/dmdsc/bin/dminit \ CONTROL=/opt/DMDeploy/dmdsc/data/DSC01/dminit.ini \ SYSDBA_PWD='${SYSDBA_PWD}' \ SYSAUDITOR_PWD='${SYSAUDITOR_PWD}' "

初始化成功时应出现:

create ini file /opt/DMDeploy/dmdsc/data/DSC01/DSC01_conf/dm.ini success
create ini file /opt/DMDeploy/dmdsc/data/DSC02/DSC02_conf/dm.ini success
create rlog file +DMLOG/log/DSC01_log1.log success
create rlog file +DMLOG/log/DSC01_log2.log success
create rlog file +DMLOG/log/DSC02_log1.log success
create rlog file +DMLOG/log/DSC02_log2.log success
create dm database success

清除 Shell 变量:

unset SYSDBA_PWD SYSAUDITOR_PWD

12.3 设置关键 dm.ini 参数

for ini in \ /opt/DMDeploy/dmdsc/data/DSC01/DSC01_conf/dm.ini \ /opt/DMDeploy/dmdsc/data/DSC02/DSC02_conf/dm.ini do sed -i \ 's/^[[:space:]]*EXTERNAL_AP_PORT[[:space:]]*=.*/EXTERNAL_AP_PORT = 4237/' \ "$ini" sed -i \ 's/^[[:space:]]*MAL_INI[[:space:]]*=.*/MAL_INI = 1/' \ "$ini" sed -i \ 's/^[[:space:]]*ARCH_INI[[:space:]]*=.*/ARCH_INI = 0/' \ "$ini" sed -i \ 's/^[[:space:]]*MPP_INI[[:space:]]*=.*/MPP_INI = 0/' \ "$ini" sed -i \ 's/^[[:space:]]*ALTER_MODE_STATUS[[:space:]]*=.*/ALTER_MODE_STATUS = 0/' \ "$ini" done

检查两个实例:

for ini in \ /opt/DMDeploy/dmdsc/data/DSC01/DSC01_conf/dm.ini \ /opt/DMDeploy/dmdsc/data/DSC02/DSC02_conf/dm.ini do echo "===== $ini =====" grep -nE \ '^[[:space:]]*(CONFIG_PATH|INSTANCE_NAME|PORT_NUM|EXTERNAL_AP_PORT|MAL_INI|ARCH_INI|MPP_INI|ALTER_MODE_STATUS)[[:space:]]*=' \ "$ini" done

应得到:

DSC01:INSTANCE_NAME=DSC01,PORT_NUM=7236
DSC02:INSTANCE_NAME=DSC02,PORT_NUM=7237
EXTERNAL_AP_PORT=4237
MAL_INI=1
ARCH_INI=0
MPP_INI=0
ALTER_MODE_STATUS=0

12.4 检查 dmmal.ini

cat /opt/DMDeploy/dmdsc/data/DSC01/DSC01_conf/dmmal.ini cat /opt/DMDeploy/dmdsc/data/DSC02/DSC02_conf/dmmal.ini

两个文件内容应一致,关键部分为:

[MAL_INST_DSC01] MAL_INST_NAME= DSC01 MAL_HOST= 192.168.201.73 MAL_PORT= 7336 MAL_INST_HOST= 192.168.201.73 MAL_INST_PORT= 7236 [MAL_INST_DSC02] MAL_INST_NAME= DSC02 MAL_HOST= 192.168.201.73 MAL_PORT= 7337 MAL_INST_HOST= 192.168.201.73 MAL_INST_PORT= 7237

修正权限:

chown -R dmdba:dinstall /opt/DMDeploy/dmdsc/data

13. 注册并启动数据库实例服务

使用 root 执行:

cd /opt/DMDeploy/dmdsc/script/root

注册 DSC01:

./dm_service_installer.sh \ -t dmserver \ -p _DSC01 \ -dm_ini /opt/DMDeploy/dmdsc/data/DSC01/DSC01_conf/dm.ini \ -dcr_ini /opt/DMDeploy/dmdsc/data/DSC01/dmdcr.ini \ -y DmASMSvrService_DSC01.service

注册 DSC02:

./dm_service_installer.sh \ -t dmserver \ -p _DSC02 \ -dm_ini /opt/DMDeploy/dmdsc/data/DSC02/DSC02_conf/dm.ini \ -dcr_ini /opt/DMDeploy/dmdsc/data/DSC02/dmdcr.ini \ -y DmASMSvrService_DSC02.service

生成:

DmService_DSC01
DmService_DSC02

重新加载并启动:

systemctl daemon-reload systemctl start DmService_DSC01 systemctl start DmService_DSC02 sleep 15

设置开机启动:

systemctl enable \ DmAPService_dmdsc \ DmCSSService_DSC01 \ DmCSSService_DSC02 \ DmASMSvrService_DSC01 \ DmASMSvrService_DSC02 \ DmService_DSC01 \ DmService_DSC02 \ DmCSSMonitorService_CSSM01

14. 部署后验证

14.1 检查服务

systemctl is-active \ DmCSSService_DSC01 \ DmCSSService_DSC02 \ DmASMSvrService_DSC01 \ DmASMSvrService_DSC02 \ DmService_DSC01 \ DmService_DSC02 \ DmCSSMonitorService_CSSM01 \ DmAPService_dmdsc

全部应返回:

active

14.2 检查进程

ps -eo pid,user,args | grep -E \ '[d]mcss|[d]masmsvr|[d]mserver|[d]mcssm|[d]map'

应包含:

2 个 dmcss
2 个 dmasmsvr
2 个 DSC dmserver
1 个 dmcssm
1 个 DSC dmap

14.3 检查端口

ss -lntp | grep -E \ ':(4237|7236|7237|7336|7337|7636|7637|7736|7737|7836|7837)\b'

14.4 登录两个数据库实例

su - dmdba disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7236
select instance_name,status$ from v$instance; select name,status$ from v$database; exit;

DSC01 结果:

INSTANCE_NAME:DSC01
STATUS$:OPEN
数据库名:DAMENG

登录 DSC02:

disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7237
select instance_name,status$ from v$instance; select name,status$ from v$database; exit;

DSC02 结果:

INSTANCE_NAME:DSC02
STATUS$:OPEN
数据库名:DAMENG

14.5 使用 DMCSSM 查看集群

su - dmdba -c " printf 'show\nexit\n' | timeout 20 /opt/DMDeploy/dmdsc/bin/dmcssm \ ini_path=/opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini "

正常状态:

CSS01、CSS02:OPEN / WORKING / OK / TRUE
ASM01、ASM02:OPEN / WORKING / OK / TRUE
DSC01、DSC02:OPEN / WORKING / OK / TRUE

15. 共享数据一致性测试

15.1 DSC01 写入数据

disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7236
select instance_name,status$ from v$instance; create table DSC_TEST ( ID int primary key, SOURCE_INST varchar(30), TEST_TIME datetime ); insert into DSC_TEST values (1,'WRITE_FROM_DSC01',sysdate); commit; select * from DSC_TEST; exit;

15.2 DSC02 查询并写入

disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7237
select instance_name,status$ from v$instance; select * from DSC_TEST; insert into DSC_TEST values (2,'WRITE_FROM_DSC02',sysdate); commit; select * from DSC_TEST order by ID; exit;

15.3 返回 DSC01 验证

disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7236
select * from DSC_TEST order by ID; exit;

实际测试结果:

1  WRITE_FROM_DSC01
2  WRITE_FROM_DSC02

说明两个实例访问同一套共享数据库文件,事务提交后数据能够被另一实例读取。


16. 单实例停止与恢复测试

16.1 停止 DSC02

使用 root:

systemctl stop DmService_DSC02 sleep 5 systemctl is-active DmService_DSC01 systemctl is-active DmService_DSC02

结果:

DmService_DSC01:active
DmService_DSC02:inactive

16.2 查看集群状态

su - dmdba -c " printf 'show\nexit\n' | timeout 20 /opt/DMDeploy/dmdsc/bin/dmcssm \ ini_path=/opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini "

实际状态:

DSC01:OPEN / WORKING / OK / TRUE
DSC02:SHUTDOWN / STOP / ERROR / FALSE

CSS 和 ASM 双节点保持正常。

16.3 验证 DSC01 继续提供服务

su - dmdba -c " /opt/DMDeploy/dmdsc/bin/disql \ SYSDBA/'<SYSDBA密码>'@192.168.201.73:7236 <<'SQL' select instance_name,status$ from v\$instance; select * from DSC_TEST order by ID; exit; SQL "

DSC01 能正常查询两条测试数据。

16.4 恢复 DSC02

systemctl start DmService_DSC02 sleep 15 systemctl is-active DmService_DSC02

再次检查:

su - dmdba -c " printf 'show\nexit\n' | timeout 20 /opt/DMDeploy/dmdsc/bin/dmcssm \ ini_path=/opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini "

恢复结果:

DSC01:OPEN / WORKING / OK / TRUE
DSC02:OPEN / WORKING / OK / TRUE

17. 常用启停命令

17.1 启动顺序

systemctl start DmAPService_dmdsc systemctl start DmCSSService_DSC01 systemctl start DmCSSService_DSC02 systemctl start DmCSSMonitorService_CSSM01 sleep 10 systemctl start DmASMSvrService_DSC01 systemctl start DmASMSvrService_DSC02 sleep 10 systemctl start DmService_DSC01 systemctl start DmService_DSC02

17.2 停止顺序

systemctl stop DmService_DSC02 systemctl stop DmService_DSC01 systemctl stop DmASMSvrService_DSC02 systemctl stop DmASMSvrService_DSC01 systemctl stop DmCSSMonitorService_CSSM01 systemctl stop DmCSSService_DSC02 systemctl stop DmCSSService_DSC01 systemctl stop DmAPService_dmdsc

停止顺序与启动顺序相反:

数据库实例 → ASM → CSSM/CSS → DMAP

18. 部署注意事项和问题记录

18.1 非 root 用户无法检查裸设备

现象:

wipefs: Permission denied
fdisk: Permission denied

处理:

su - whoami

裸设备检查、udev 配置和服务注册均使用 root。

18.2 系统没有 fuser

yum install -y psmisc

18.3 VirtIO 磁盘没有稳定的 by-id

本次磁盘没有可用序列号,因此通过 ID_PATH 创建 /dev/dm-dsc 固定链接。

18.4 DCR 和 VOTE 路径容易填反

正确对应:

DCR_VTD_PATH=/dev/dm-dsc/vote
DMDCR_PATH=/dev/dm-dsc/dcr

18.5 单机双实例端口不能重复

同一台主机上的 CSS、ASM、MAL 和数据库端口必须分别规划,不能沿用双机部署中两台主机使用相同端口的写法。

18.6 ASM 共享内存 Key 不能重复

本次配置:

ASM01:DCR_EP_SHM_KEY=5136
ASM02:DCR_EP_SHM_KEY=56044

18.7 DSC02 的 CONFIG_PATH

DEM 自动部署生成的原始 dminit.ini 曾将 DSC02 配置写入 DSC01 下的临时目录,随后由部署任务移动到最终目录。纯命令行部署时直接填写:

CONFIG_PATH=/opt/DMDeploy/dmdsc/data/DSC02/DSC02_conf

这样 dminit 会直接在最终目录生成 DSC02 的 dm.inidmmal.ini,不需要额外移动目录。

18.8 DMAP 默认端口冲突

原 DMAP 使用 4236,本次 DSC 使用 4237。必须同时保证:

dmap.ini:AP_PORT=4237
dm.ini:EXTERNAL_AP_PORT=4237

18.9 服务名后缀中的下划线

为了生成实际服务名:

DmCSSService_DSC01
DmASMSvrService_DSC01
DmService_DSC01

注册时后缀使用:

-p _DSC01

而不是 -p DSC01

18.10 启动顺序错误

数据库实例依赖 ASM,ASM 依赖 CSS。应按以下顺序启动:

CSS → ASM → 数据库实例

18.11 不要在现有集群上重复初始化裸盘

以下命令会改写磁盘头:

create dcrdisk
create votedisk
create asmdisk
init dcrdisk
init votedisk

仅在首次部署或明确重建环境时执行。


19. 部署结果

本次命令行流程对应的实际部署结果:

DMCSS 双节点正常
DMASM 双节点正常
DSC01、DSC02 均为 OPEN
DMLOG、DMDATA 磁盘组正常
两个实例访问同一套共享数据库
双实例共享数据读写测试通过
停止 DSC02 后 DSC01 继续提供服务
DSC02 重新启动后正常加入集群
DMCSSM 能正确显示节点停止和恢复状态

环境限制:

两个逻辑节点运行在同一台虚拟机上
只能验证实例级可用性
不能验证主机、存储和物理网络级容灾
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服