1. 部署说明
本报告将原先通过 DEM 页面完成的 DSC 自动部署过程,还原为可在 Linux 命令行中手工完成的配置文件创建、裸盘初始化、服务注册、组件启动和功能验证流程。
本次环境为单台 CentOS 7 虚拟机上的双逻辑实例:
text
主机名:dujingying
DM 软件源目录:/dm8
DSC 部署目录:/opt/DMDeploy/dmdsc
内网地址:192.168.200.167
外网地址:192.168.201.73
数据库名:DAMENG
实例:DSC01、DSC02
本环境用于学习和功能验证,不具备真正的主机级高可用能力。
2. 部署规划
2.1 网络规划
text
CSS DCR、ASM DCR 通信地址:192.168.200.167
ASM MAL、数据库 MAL 和实例访问地址:192.168.201.73
2.2 共享磁盘规划
text
/dev/vdb 500 MB DCR
/dev/vdc 500 MB VOTE
/dev/vdd 20 GB DMLOG
/dev/vde 50 GB DMDATA
固定设备路径:
text
/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 端口规划
text
组件 DSC01 DSC02
数据库服务端口 7236 7237
数据库 MAL 端口 7336 7337
ASM MAL 端口 7636 7637
ASM DCR 端口 7736 7737
CSS DCR 端口 7836 7837
DSC 独立 DMAP 端口:4237
2.4 目录规划
text
/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 检查主机资源
bash
hostname
hostname -I
cat /etc/os-release
uname -m
nproc
free -h
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
3.2 检查 DSC 执行程序
bash
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 实例查询许可证信息:
bash
su - dmdba
disql SYSDBA/'<数据库密码>'@127.0.0.1:5236
sql
select * from v$license;
exit;
确认当前授权支持 DSC 集群功能。本次环境检查结果为支持 DSC 的开发授权。
3.4 检查端口占用
bash
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 执行:
bash
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:
bash
yum install -y psmisc
检查设备占用:
bash
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
四块磁盘必须满足:
text
无文件系统
无挂载点
无分区
不属于 LVM
不属于 swap
无进程占用
4. 配置固定裸设备路径
4.1 获取设备 ID_PATH
bash
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
本次设备属性:
text
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 规则
bash
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
加载规则:
bash
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
验证:
bash
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 权限:
bash
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 创建目录
bash
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 的 bin 和 script 目录:
bash
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
修正权限:
bash
chown -R dmdba:dinstall /opt/DMDeploy/dmdsc
chmod 755 /opt/DMDeploy/dmdsc/bin
检查:
bash
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
bash
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
检查:
bash
cat /opt/DMDeploy/dmdsc/data/DSC01/dmdcr_cfg.ini
注意:
text
DCR_VTD_PATH 指向 VOTE 磁盘。
DMDCR_PATH 在后续 dmdcr.ini 中指向 DCR 磁盘。
同一台主机上的两个 ASM 节点必须使用不同的 DCR_EP_SHM_KEY。
6.2 创建 DMASMCMD 脚本
发布文档中不记录真实密码:
bash
DCR_PWD='<DCR/ASM密码>'
创建脚本:
bash
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
执行初始化:
bash
su - dmdba -c "
/opt/DMDeploy/dmdsc/bin/dmasmcmd \
SCRIPT_FILE=/opt/DMDeploy/dmdsc/data/DSC01/asmcmd_init.txt
"
实际自动部署日志对应的底层操作为:
text
create dcrdisk:成功
create votedisk:成功
create asmdisk log0:成功
create asmdisk data0:成功
init dcrdisk:成功
init votedisk:成功
执行后删除含密码的临时脚本:
bash
shred -u /opt/DMDeploy/dmdsc/data/DSC01/asmcmd_init.txt
unset DCR_PWD
7. 配置 ASM MAL 和节点 DCR
7.1 创建 dmasvrmal.ini
bash
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
bash
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
bash
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
修正权限:
bash
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
bash
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:
bash
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 可通过以下命令前台验证:
bash
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 服务
bash
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
生成:
text
DmCSSService_DSC01
DmCSSService_DSC02
9.2 注册两个 ASM 服务
bash
./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
生成:
text
DmASMSvrService_DSC01
DmASMSvrService_DSC02
9.3 注册 DMCSSM 服务
bash
./dm_service_installer.sh \
-t dmcssm \
-p _CSSM01 \
-cssm_ini /opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini
生成:
text
DmCSSMonitorService_CSSM01
9.4 创建并注册独立 DMAP 服务
标准 dmap 服务类型不使用 -p 后缀。为了保留原有 DmAPService 的 4236 端口,复制服务脚本并指定单独的 dmap.ini:
bash
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
生成:
text
DmAPService_dmdsc
重新加载 systemd:
bash
systemctl daemon-reload
10. 启动 CSS、CSSM、DMAP 和 ASM
10.1 启动 DMAP 和 CSSM
bash
systemctl start DmAPService_dmdsc
systemctl start DmCSSMonitorService_CSSM01
10.2 启动两个 CSS 节点
bash
systemctl start DmCSSService_DSC01
systemctl start DmCSSService_DSC02
sleep 10
检查:
bash
systemctl is-active \
DmCSSService_DSC01 \
DmCSSService_DSC02 \
DmCSSMonitorService_CSSM01 \
DmAPService_dmdsc
ss -lntp | grep -E ':(4237|7836|7837)\b'
10.3 启动两个 ASM 节点
bash
systemctl start DmASMSvrService_DSC01
systemctl start DmASMSvrService_DSC02
sleep 10
检查:
bash
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'
启动顺序必须保持:
text
CSS → ASM → 数据库实例
11. 创建 ASM 磁盘组
连接 ASM:
bash
su - dmdba
/opt/DMDeploy/dmdsc/bin/dmasmtool \
dcr_ini=/opt/DMDeploy/dmdsc/data/DSC01/dmdcr.ini
在 ASM> 提示符中执行:
sql
CREATE DISKGROUP DMLOG ASMDISK '/dev/dm-dsc/log'
CREATE DISKGROUP DMDATA ASMDISK '/dev/dm-dsc/data'
退出后再次检查:
bash
/opt/DMDeploy/dmdsc/bin/dmasmtool \
dcr_ini=/opt/DMDeploy/dmdsc/data/DSC01/dmdcr.ini
在 ASM> 中执行:
text
ls
lsdsk
实际部署日志确认:
text
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 目录;手工部署无需保留这一中间步骤。
bash
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 执行初始化
发布文档中使用密码占位符:
bash
SYSDBA_PWD='<SYSDBA密码>'
SYSAUDITOR_PWD='<SYSAUDITOR密码>'
执行:
bash
su - dmdba -c "
/opt/DMDeploy/dmdsc/bin/dminit \
CONTROL=/opt/DMDeploy/dmdsc/data/DSC01/dminit.ini \
SYSDBA_PWD='${SYSDBA_PWD}' \
SYSAUDITOR_PWD='${SYSAUDITOR_PWD}'
"
初始化成功时应出现:
text
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 变量:
bash
unset SYSDBA_PWD SYSAUDITOR_PWD
12.3 设置关键 dm.ini 参数
bash
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
检查两个实例:
bash
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
应得到:
text
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
bash
cat /opt/DMDeploy/dmdsc/data/DSC01/DSC01_conf/dmmal.ini
cat /opt/DMDeploy/dmdsc/data/DSC02/DSC02_conf/dmmal.ini
两个文件内容应一致,关键部分为:
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
修正权限:
bash
chown -R dmdba:dinstall /opt/DMDeploy/dmdsc/data
13. 注册并启动数据库实例服务
使用 root 执行:
bash
cd /opt/DMDeploy/dmdsc/script/root
注册 DSC01:
bash
./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:
bash
./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
生成:
text
DmService_DSC01
DmService_DSC02
重新加载并启动:
bash
systemctl daemon-reload
systemctl start DmService_DSC01
systemctl start DmService_DSC02
sleep 15
设置开机启动:
bash
systemctl enable \
DmAPService_dmdsc \
DmCSSService_DSC01 \
DmCSSService_DSC02 \
DmASMSvrService_DSC01 \
DmASMSvrService_DSC02 \
DmService_DSC01 \
DmService_DSC02 \
DmCSSMonitorService_CSSM01
14. 部署后验证
14.1 检查服务
bash
systemctl is-active \
DmCSSService_DSC01 \
DmCSSService_DSC02 \
DmASMSvrService_DSC01 \
DmASMSvrService_DSC02 \
DmService_DSC01 \
DmService_DSC02 \
DmCSSMonitorService_CSSM01 \
DmAPService_dmdsc
全部应返回:
text
active
14.2 检查进程
bash
ps -eo pid,user,args | grep -E \
'[d]mcss|[d]masmsvr|[d]mserver|[d]mcssm|[d]map'
应包含:
text
2 个 dmcss
2 个 dmasmsvr
2 个 DSC dmserver
1 个 dmcssm
1 个 DSC dmap
14.3 检查端口
bash
ss -lntp | grep -E \
':(4237|7236|7237|7336|7337|7636|7637|7736|7737|7836|7837)\b'
14.4 登录两个数据库实例
bash
su - dmdba
disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7236
sql
select instance_name,status$ from v$instance;
select name,status$ from v$database;
exit;
DSC01 结果:
text
INSTANCE_NAME:DSC01
STATUS$:OPEN
数据库名:DAMENG
登录 DSC02:
bash
disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7237
sql
select instance_name,status$ from v$instance;
select name,status$ from v$database;
exit;
DSC02 结果:
text
INSTANCE_NAME:DSC02
STATUS$:OPEN
数据库名:DAMENG
14.5 使用 DMCSSM 查看集群
bash
su - dmdba -c "
printf 'show\nexit\n' |
timeout 20 /opt/DMDeploy/dmdsc/bin/dmcssm \
ini_path=/opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini
"
正常状态:
text
CSS01、CSS02:OPEN / WORKING / OK / TRUE
ASM01、ASM02:OPEN / WORKING / OK / TRUE
DSC01、DSC02:OPEN / WORKING / OK / TRUE
15. 共享数据一致性测试
15.1 DSC01 写入数据
bash
disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7236
sql
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 查询并写入
bash
disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7237
sql
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 验证
bash
disql SYSDBA/'<SYSDBA密码>'@192.168.201.73:7236
sql
select * from DSC_TEST order by ID;
exit;
实际测试结果:
text
1 WRITE_FROM_DSC01
2 WRITE_FROM_DSC02
说明两个实例访问同一套共享数据库文件,事务提交后数据能够被另一实例读取。
16. 单实例停止与恢复测试
16.1 停止 DSC02
使用 root:
bash
systemctl stop DmService_DSC02
sleep 5
systemctl is-active DmService_DSC01
systemctl is-active DmService_DSC02
结果:
text
DmService_DSC01:active
DmService_DSC02:inactive
16.2 查看集群状态
bash
su - dmdba -c "
printf 'show\nexit\n' |
timeout 20 /opt/DMDeploy/dmdsc/bin/dmcssm \
ini_path=/opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini
"
实际状态:
text
DSC01:OPEN / WORKING / OK / TRUE
DSC02:SHUTDOWN / STOP / ERROR / FALSE
CSS 和 ASM 双节点保持正常。
16.3 验证 DSC01 继续提供服务
bash
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
bash
systemctl start DmService_DSC02
sleep 15
systemctl is-active DmService_DSC02
再次检查:
bash
su - dmdba -c "
printf 'show\nexit\n' |
timeout 20 /opt/DMDeploy/dmdsc/bin/dmcssm \
ini_path=/opt/DMDeploy/dmdsc/CSSM01/dmcssm.ini
"
恢复结果:
text
DSC01:OPEN / WORKING / OK / TRUE
DSC02:OPEN / WORKING / OK / TRUE
17. 常用启停命令
17.1 启动顺序
bash
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 停止顺序
bash
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
停止顺序与启动顺序相反:
text
数据库实例 → ASM → CSSM/CSS → DMAP
18. 部署注意事项和问题记录
18.1 非 root 用户无法检查裸设备
现象:
text
wipefs: Permission denied
fdisk: Permission denied
处理:
bash
su -
whoami
裸设备检查、udev 配置和服务注册均使用 root。
18.2 系统没有 fuser
bash
yum install -y psmisc
18.3 VirtIO 磁盘没有稳定的 by-id
本次磁盘没有可用序列号,因此通过 ID_PATH 创建 /dev/dm-dsc 固定链接。
18.4 DCR 和 VOTE 路径容易填反
正确对应:
text
DCR_VTD_PATH=/dev/dm-dsc/vote
DMDCR_PATH=/dev/dm-dsc/dcr
18.5 单机双实例端口不能重复
同一台主机上的 CSS、ASM、MAL 和数据库端口必须分别规划,不能沿用双机部署中两台主机使用相同端口的写法。
18.6 ASM 共享内存 Key 不能重复
本次配置:
text
ASM01:DCR_EP_SHM_KEY=5136
ASM02:DCR_EP_SHM_KEY=56044
18.7 DSC02 的 CONFIG_PATH
DEM 自动部署生成的原始 dminit.ini 曾将 DSC02 配置写入 DSC01 下的临时目录,随后由部署任务移动到最终目录。纯命令行部署时直接填写:
text
CONFIG_PATH=/opt/DMDeploy/dmdsc/data/DSC02/DSC02_conf
这样 dminit 会直接在最终目录生成 DSC02 的 dm.ini 和 dmmal.ini,不需要额外移动目录。
18.8 DMAP 默认端口冲突
原 DMAP 使用 4236,本次 DSC 使用 4237。必须同时保证:
text
dmap.ini:AP_PORT=4237
dm.ini:EXTERNAL_AP_PORT=4237
18.9 服务名后缀中的下划线
为了生成实际服务名:
text
DmCSSService_DSC01
DmASMSvrService_DSC01
DmService_DSC01
注册时后缀使用:
text
-p _DSC01
而不是 -p DSC01。
18.10 启动顺序错误
数据库实例依赖 ASM,ASM 依赖 CSS。应按以下顺序启动:
text
CSS → ASM → 数据库实例
18.11 不要在现有集群上重复初始化裸盘
以下命令会改写磁盘头:
text
create dcrdisk
create votedisk
create asmdisk
init dcrdisk
init votedisk
仅在首次部署或明确重建环境时执行。
19. 部署结果
本次命令行流程对应的实际部署结果:
text
DMCSS 双节点正常
DMASM 双节点正常
DSC01、DSC02 均为 OPEN
DMLOG、DMDATA 磁盘组正常
两个实例访问同一套共享数据库
双实例共享数据读写测试通过
停止 DSC02 后 DSC01 继续提供服务
DSC02 重新启动后正常加入集群
DMCSSM 能正确显示节点停止和恢复状态
环境限制:
text
两个逻辑节点运行在同一台虚拟机上
只能验证实例级可用性
不能验证主机、存储和物理网络级容灾