达梦数据库DM8 DSC共享存储集群搭建实战指南2026
达梦数据库DM8 DSC共享存储集群搭建实战指南2026
-
- 1. 环境说明
- 2. 主机名配置
- 3. 共享存储配置
- 4. 共享磁盘绑定
- 5. 配置文件准备
- 6. 数据库部署
- 7. 后续优化建议
- 8. 总结
1. 环境说明
1.1 硬件与操作系统配置
- CPU架构: x86
- 操作系统: Kylin v10
- 达梦数据库版本: DM8 - 03134284552-20260414-322369-20221
1.2 IP地址规划
| 服务器角色 | IP地址 | 主机名 | 说明 |
|---|---|---|---|
| 存储服务器 | 192.168.100.181 | - | iSCSI共享存储服务端 |
| DSC节点0 | 192.168.100.182 | dsc0 | 数据库集群节点1 |
| DSC节点1 | 192.168.100.183 | dsc1 | 数据库集群节点2 |
1.3 端口规划
| 端口号 | 服务/组件 | 用途说明 | 配置位置 |
|---|---|---|---|
| 3260 | iSCSI Target | iSCSI共享存储服务端口,用于存储服务器与DSC节点之间的磁盘共享通信 | 3.1.1节存储服务器配置脚本 |
| 9341 | DMCSS | 集群同步服务端口,用于DMCSS实例间的通信和集群状态同步 | 5.3节dmdcr_cfg.ini配置文件 |
| 9351 | DMASM | 自动存储管理服务端口,用于ASM实例间的通信 | 5.3节dmdcr_cfg.ini配置文件 |
| 5236 | DMDSC数据库实例 | 数据库服务监听端口,客户端连接数据库的标准端口 | 5.3节dmdcr_cfg.ini配置文件、5.6节dminit.ini配置文件 |
| 5246 | ASM MAL | ASM消息异步传输端口,用于ASM实例间的数据同步通信 | 5.5节dmasvrmal.ini配置文件 |
| 5256 | 数据库MAL | 数据库消息异步传输端口,用于DSC实例间的数据同步通信 | 5.6节dminit.ini配置文件 |
端口使用说明:
-
iSCSI端口(3260):存储服务器必须开放此端口,两个DSC节点需要通过此端口访问共享磁盘。
-
集群内部通信端口(9341, 9351):
- 9341端口用于DMCSS服务,确保集群节点状态同步
- 9351端口用于DMASM服务,管理共享存储的自动存储管理
-
数据库服务端口(5236):
- 两个DSC节点使用相同的端口号5236
- 客户端可以通过任意节点的5236端口访问数据库集群
-
MAL通信端口(5246, 5256):
- 5246端口用于ASM实例间的通信
- 5256端口用于数据库实例间的通信
- 这两个端口确保集群节点间的数据同步和故障切换
防火墙配置建议:
- 在所有节点间开放上述所有端口
- 建议配置防火墙规则,仅允许集群内部IP访问这些端口
- 生产环境中应考虑使用更安全的网络隔离策略
端口冲突检查:
在部署前,请确保这些端口在各自节点上未被其他服务占用:
# 检查端口占用情况
netstat -tlnp | grep -E "3260|9341|9351|5236|5246|5256"
2. 主机名配置
2.1 dsc0节点配置
hostnamectl set-hostname dsc0
2.2 dsc1节点配置
hostnamectl set-hostname dsc1
配置完成后,建议重启服务器或重新登录使主机名生效。
3. 共享存储配置
3.1 存储服务器配置(192.168.100.181)
在存储服务器上配置iSCSI Target服务,将本地磁盘共享给两个DSC节点。
3.1.1 编辑共享存储配置脚本
在存储服务器(192.168.100.181)上创建并编辑iSCSI Target配置脚本:
vi targetcli_clearconfig.sh
脚本内容如下:
#!/bin/bash
set -euo pipefail
# 设置域名和时间
YEAR=$(date +%Y)
MONTH=$(date +%m)
DOMAIN="example.com" # 推荐使用你自己的域名
# 根据目标端数量增删行数 5-1
TGT_NAME="iqn.${YEAR}-${MONTH}.${DOMAIN}:shared"
CLIENT_IQN1="iqn.${YEAR}-${MONTH}.${DOMAIN}:client1"
CLIENT_IQN2="iqn.${YEAR}-${MONTH}.${DOMAIN}:client2"
# 1. 清除现有配置
targetcli clearconfig confirm=True
# 2. 使用 here-document 配置 target
targetcli <<EOF
# 根据实际盘符数量增删行数 5-2
/backstores/block create disk0 /dev/sdb
/backstores/block create disk1 /dev/sdc
/backstores/block create disk2 /dev/sdd
/backstores/block create disk3 /dev/sde
/backstores/block create disk4 /dev/sdf
/backstores/block create disk5 /dev/sdg
/iscsi create $TGT_NAME
# 根据实际盘符数量增删行数 5-3
/iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk0 0
/iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk1 1
/iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk2 2
/iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk3 3
/iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk4 4
/iscsi/$TGT_NAME/tpg1/luns create /backstores/block/disk5 5
# 根据目标端数量增删行数 5-4
/iscsi/$TGT_NAME/tpg1/acls create $CLIENT_IQN1
/iscsi/$TGT_NAME/tpg1/acls create $CLIENT_IQN2
saveconfig
exit
EOF
# 3. 启服务并设为开机自启
# 重启服务
systemctl enable --now target
systemctl restart target
# 4. 检查端口
ss -ltnp | grep 3260
# 4. 建 ACL(允许客户端 IQN)
# 根据目标端数量增删行数 5-5
targetcli /iscsi/$TGT_NAME/tpg1/acls create $CLIENT_IQN1 || true
targetcli /iscsi/$TGT_NAME/tpg1/acls create $CLIENT_IQN2 || true
# 5. 防火墙放行 3260/tcp
if systemctl is-active firewalld &>/dev/null; then
firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload
elif command -v ufw &>/dev/null; then
ufw allow 3260/tcp
fi
# 6. 打印结果
echo "====== Target 配置完成 ======"
3.1.2 执行配置脚本
# 对存储脚本添加执行权限
chmod +x targetcli_clearconfig.sh
# 执行脚本
./targetcli_clearconfig.sh
3.1.3 配置说明
-
脚本参数说明:
TGT_NAME:iSCSI Target的名称,格式为iqn.年-月.域名:标识CLIENT_IQN1/CLIENT_IQN2:两个DSC节点的客户端IQN,必须与客户端配置一致/dev/sdb到/dev/sdg:共享的磁盘设备,请根据实际磁盘设备调整
-
磁盘数量调整:
- 如果磁盘数量不是6块,需要相应调整脚本中的磁盘创建行数
- 注释中标注的"根据实际盘符数量增删行数 5-2"和"5-3"处需要同步修改
-
客户端数量调整:
- 如果DSC节点数量变化,需要相应调整ACL配置行数
- 注释中标注的"根据目标端数量增删行数 5-1"、"5-4"和"5-5"处需要同步修改
-
防火墙配置:
- 脚本会自动检测并配置firewalld或ufw防火墙
- 确保3260端口在存储服务器和DSC节点之间可访问
-
验证配置:
- 执行脚本后,使用
targetcli ls查看配置状态 - 使用
ss -ltnp | grep 3260确认服务端口已监听 - 在两个DSC节点上执行发现命令验证连接:
iscsiadm -m discovery -t st -p 192.168.100.181
- 执行脚本后,使用
3.2 DSC节点配置(192.168.100.182/183)
在两个DSC节点上配置iSCSI Initiator,连接存储服务器的共享磁盘。
3.2.1 dsc0节点配置(192.168.100.182)
在dsc0节点上创建并编辑iSCSI客户端配置脚本:
vi /root/initiator_mount.sh
脚本内容如下:
#!/bin/bash
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 文件名: iscsi-client-connect.sh
# 功能: 自动安装 iSCSI 客户端,设置唯一 IQN,并连接共享磁盘
# 作者: 用户
# 日期: $(date +%Y-%m-%d)
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
set -euo pipefail
# ============= 可配置参数 =============
TARGET_IP="192.168.100.181" # iSCSI 服务端 IP
TARGET_IQN="iqn.2026-05.example.com:shared" # 目标 IQN
PORT="3260" # 默认端口
DOMAIN="example.com" # 域名(用于 IQN)
YEAR=$(date +%Y)
MONTH=$(date +%m)
# 每台客户端必须手动设置或传参指定唯一编号,例如:
CLIENT_ID="client1" # ⚠️ 注意:每台机器必须不同!推荐:client1, client2, ...
# ======================================
echo "====== 开始配置 iSCSI 客户端 ======"
# 1. 检查是否为 root
if [[ $EUID -ne 0 ]]; then
echo "错误: 请以 root 用户或 sudo 权限运行此脚本" >&2
exit 1
fi
# 2. 设置唯一的 InitiatorName
INITIATOR_IQN="iqn.${YEAR}-${MONTH}.${DOMAIN}:${CLIENT_ID}"
INITIATOR_FILE="/etc/iscsi/initiatorname.iscsi"
echo "→ 设置客户端 IQN: $INITIATOR_IQN"
echo "InitiatorName=$INITIATOR_IQN" > "$INITIATOR_FILE"
# 重启 iscsi 服务以应用新 IQN(可选)
systemctl try-restart iscsid >/dev/null 2>&1 || true
# 3. 显示当前客户端 IQN
echo
echo "📌 当前客户端 IQN 已设置为:"
cat "$INITIATOR_FILE"
echo
# 提示用户确认服务端已授权该 IQN
echo "💡 请确保服务端已将 '$INITIATOR_IQN' 添加到 ACL 白名单中!"
echo " 否则登录会因 'authorization failure' 失败。"
echo
# 4. 安装 iSCSI 客户端工具
echo "→ 安装 iscsi-initiator-utils..."
yum -q -y install iscsi-initiator-utils || {
echo "安装失败,请检查网络或 yum 源"
exit 1
}
# 5. 启动 iscsid 守护进程
echo "→ 启动 iscsid 服务..."
systemctl enable iscsi iscsid >/dev/null 2>&1 || true
systemctl start iscsid
# 等待服务启动
sleep 2
# 检查 iscsid 是否运行
if ! pgrep iscsid >/dev/null; then
echo "❌ iscsid 进程未启动,请检查日志: journalctl -u iscsid"
exit 1
else
echo "✔ iscsid 已运行"
fi
# 6. 发现目标
echo "→ 发现 iSCSI 目标: $TARGET_IP..."
iscsiadm -m discovery -t st -p "$TARGET_IP" --op update || true
iscsiadm -m discovery -t sendtargets -p "$TARGET_IP"
# 7. 查看发现的节点
echo "→ 已发现的目标:"
iscsiadm -m node
# 8. 登录目标
echo "→ 登录到目标: $TARGET_IQN ..."
if iscsiadm -m node -T "$TARGET_IQN" -p "$TARGET_IP:$PORT" -l; then
echo "✔ 成功登录 iSCSI 目标"
else
echo "❌ 登录失败,请检查服务端是否允许此客户端 IQN"
exit 1
fi
# 9. 验证连接:列出磁盘
sleep 1
echo
echo "====== 发现的磁盘 (lsblk) ======"
lsblk -o NAME,MAJ:MIN,SIZE,TYPE,TRAN
echo
echo "✅ iSCSI 客户端配置完成!"
echo "提示: 新磁盘可能需要格式化和挂载才能使用。"
echo "请勿在多台客户端同时挂载同一文件系统(需集群文件系统支持)。"
给脚本添加执行权限并执行:
chmod +x /root/initiator_mount.sh
/root/initiator_mount.sh
3.2.2 dsc1节点配置(192.168.100.183)
在dsc1节点上创建相同的脚本,但需要修改CLIENT_ID参数:
vi /root/initiator_mount.sh
脚本内容与dsc0节点基本相同,只需修改CLIENT_ID:
#!/bin/bash
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 文件名: iscsi-client-connect.sh
# 功能: 自动安装 iSCSI 客户端,设置唯一 IQN,并连接共享磁盘
# 作者: 用户
# 日期: $(date +%Y-%m-%d)
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
set -euo pipefail
# ============= 可配置参数 =============
TARGET_IP="192.168.100.181" # iSCSI 服务端 IP
TARGET_IQN="iqn.2026-05.example.com:shared" # 目标 IQN
PORT="3260" # 默认端口
DOMAIN="example.com" # 域名(用于 IQN)
YEAR=$(date +%Y)
MONTH=$(date +%m)
# ⚠️ 重要:这里修改为 client2,确保与dsc0不同
CLIENT_ID="client2" # ⚠️ 注意:每台机器必须不同!推荐:client1, client2, ...
# ======================================
echo "====== 开始配置 iSCSI 客户端 ======"
# 1. 检查是否为 root
if [[ $EUID -ne 0 ]]; then
echo "错误: 请以 root 用户或 sudo 权限运行此脚本" >&2
exit 1
fi
# 2. 设置唯一的 InitiatorName
INITIATOR_IQN="iqn.${YEAR}-${MONTH}.${DOMAIN}:${CLIENT_ID}"
INITIATOR_FILE="/etc/iscsi/initiatorname.iscsi"
echo "→ 设置客户端 IQN: $INITIATOR_IQN"
echo "InitiatorName=$INITIATOR_IQN" > "$INITIATOR_FILE"
# 重启 iscsi 服务以应用新 IQN(可选)
systemctl try-restart iscsid >/dev/null 2>&1 || true
# 3. 显示当前客户端 IQN
echo
echo "📌 当前客户端 IQN 已设置为:"
cat "$INITIATOR_FILE"
echo
# 提示用户确认服务端已授权该 IQN
echo "💡 请确保服务端已将 '$INITIATOR_IQN' 添加到 ACL 白名单中!"
echo " 否则登录会因 'authorization failure' 失败。"
echo
# 4. 安装 iSCSI 客户端工具
echo "→ 安装 iscsi-initiator-utils..."
yum -q -y install iscsi-initiator-utils || {
echo "安装失败,请检查网络或 yum 源"
exit 1
}
# 5. 启动 iscsid 守护进程
echo "→ 启动 iscsid 服务..."
systemctl enable iscsi iscsid >/dev/null 2>&1 || true
systemctl start iscsid
# 等待服务启动
sleep 2
# 检查 iscsid 是否运行
if ! pgrep iscsid >/dev/null; then
echo "❌ iscsid 进程未启动,请检查日志: journalctl -u iscsid"
exit 1
else
echo "✔ iscsid 已运行"
fi
# 6. 发现目标
echo "→ 发现 iSCSI 目标: $TARGET_IP..."
iscsiadm -m discovery -t st -p "$TARGET_IP" --op update || true
iscsiadm -m discovery -t sendtargets -p "$TARGET_IP"
# 7. 查看发现的节点
echo "→ 已发现的目标:"
iscsiadm -m node
# 8. 登录目标
echo "→ 登录到目标: $TARGET_IQN ..."
if iscsiadm -m node -T "$TARGET_IQN" -p "$TARGET_IP:$PORT" -l; then
echo "✔ 成功登录 iSCSI 目标"
else
echo "❌ 登录失败,请检查服务端是否允许此客户端 IQN"
exit 1
fi
# 9. 验证连接:列出磁盘
sleep 1
echo
echo "====== 发现的磁盘 (lsblk) ======"
lsblk -o NAME,MAJ:MIN,SIZE,TYPE,TRAN
echo
echo "✅ iSCSI 客户端配置完成!"
echo "提示: 新磁盘可能需要格式化和挂载才能使用。"
echo "请勿在多台客户端同时挂载同一文件系统(需集群文件系统支持)。"
给脚本添加执行权限并执行:
chmod +x /root/initiator_mount.sh
/root/initiator_mount.sh
3.2.3 配置说明
-
脚本参数说明:
TARGET_IP:iSCSI存储服务器的IP地址(192.168.100.181)TARGET_IQN:存储服务器上配置的Target IQN,必须与3.1节中的TGT_NAME一致CLIENT_ID:客户端唯一标识符,两个节点必须不同(dsc0用client1,dsc1用client2)DOMAIN:域名,建议使用实际域名或example.com
-
关键步骤说明:
- IQN设置:每个DSC节点必须有唯一的Initiator IQN,存储服务器需要将这两个IQN添加到ACL白名单
- 服务安装:自动安装iscsi-initiator-utils包
- 目标发现:发现存储服务器上的iSCSI目标
- 目标登录:登录到指定的iSCSI目标
- 磁盘验证:使用
lsblk命令验证磁盘连接状态
-
验证配置:
- 执行脚本后,使用
lsblk查看是否识别到新的磁盘设备(通常为sdb-sdg) - 使用
iscsiadm -m session查看iSCSI会话状态 - 使用
iscsiadm -m node查看已发现的目标节点
- 执行脚本后,使用
-
注意事项:
- 确保存储服务器的防火墙已开放3260端口
- 确保存储服务器已正确配置ACL,允许两个客户端的IQN访问
- 两个节点的CLIENT_ID必须不同,否则会导致IQN冲突
- 如果脚本执行失败,检查网络连通性和服务端配置
-
故障排查:
- 如果发现目标失败,检查网络连通性:
ping 192.168.100.181 - 如果登录失败,检查服务端ACL配置:
targetcli ls - 查看详细日志:
journalctl -u iscsid -f
- 如果发现目标失败,检查网络连通性:
4. 共享磁盘绑定
4.1 查看磁盘UUID
在两个DSC节点上执行:
ls -l /dev/disk/by-uuid/
4.2 绑定共享磁盘
绑定共享磁盘是DSC集群搭建的关键步骤,需要为每块共享磁盘创建udev规则,确保磁盘在系统重启后仍能正确挂载。以下是详细步骤:
4.2.1 查看磁盘SCSI UUID
在两个DSC节点上分别执行以下命令,获取每块共享磁盘的SCSI UUID:
/usr/lib/udev/scsi_id -g -u /dev/sdb
/usr/lib/udev/scsi_id -g -u /dev/sdc
/usr/lib/udev/scsi_id -g -u /dev/sdd
/usr/lib/udev/scsi_id -g -u /dev/sde
/usr/lib/udev/scsi_id -g -u /dev/sdf
/usr/lib/udev/scsi_id -g -u /dev/sdg
记录每块磁盘对应的UUID,后续配置会用到。
4.2.2 编辑UUID脚本
创建自动生成udev规则的脚本uuid.sh:
vi uuid.sh
脚本内容如下:
#!/bin/bash
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
# 遍历 sdb 到 sdg
for i in b c d e f g;
do
# 使用 -g -u 参数获取 UUID
uuid=$(/usr/lib/udev/scsi_id -g -u /dev/sd$i)
# 增加判断,如果获取到了 UUID 再写入文件,避免写入空值
if [ -n "$uuid" ]; then
echo "KERNEL==\"sd?\",SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id -g -u /dev/\$name\",RESULT==\"$uuid\", SYMLINK+=\"dm/asm-disk$i\",OWNER=\"dmdba\", GROUP=\"dinstall\",MODE=\"0660\"" >> $curr/88-dm-asmdevices.rules
echo "成功生成 /dev/sd$i 的规则,UUID: $uuid"
else
echo "警告:无法获取 /dev/sd$i 的 UUID,已跳过。"
fi
done
4.2.3 执行脚本生成配置文件
chmod +x uuid.sh
./uuid.sh
执行后会生成88-dm-asmdevices.rules文件,包含所有磁盘的udev规则。
4.2.4 修改配置文件
编辑生成的规则文件,调整SYMLINK名称以符合DMASM的命名规范:
vi 88-dm-asmdevices.rules
修改后的内容示例(请根据实际UUID调整):
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u /dev/$name",RESULT=="36001405adcc260c6afa4914a6274fd6b", SYMLINK+="dm/asm-dmdcr",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u /dev/$name",RESULT=="360014059f59c01e1f584463b8cd73d70", SYMLINK+="dm/asm-dmdata02",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u /dev/$name",RESULT=="36001405fd2a23c405db4b848cd4b7c38", SYMLINK+="dm/asm-dmdata01",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u /dev/$name",RESULT=="3600140524ba85e75077448aa4fc5684b", SYMLINK+="dm/asm-dmlog",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u /dev/$name",RESULT=="360014059708f6e0072e45f4a267ef004", SYMLINK+="dm/asm-dmarch",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u /dev/$name",RESULT=="360014054044040f67c04aada548a9977", SYMLINK+="dm/asm-dmvote",OWNER="dmdba", GROUP="dinstall",MODE="0660"
注意:SYMLINK名称对应关系:
asm-dmdcr:DCR磁盘asm-dmvote:投票磁盘asm-dmlog:日志磁盘asm-dmarch:归档磁盘asm-dmdata01、asm-dmdata02:数据磁盘
4.2.5 应用udev规则
步骤1:在本地节点应用规则
# 复制规则文件到udev目录
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules
# 重新加载udev规则
udevadm control --reload-rules
udevadm trigger --type=devices --action=change
步骤2:复制到另一个DSC节点
# 将规则文件复制到另一个节点
scp 88-dm-asmdevices.rules root@192.168.100.183:/etc/udev/rules.d/
# 在另一个节点上重新加载udev规则(通过SSH执行)
ssh root@192.168.100.183 "udevadm control --reload-rules && udevadm trigger --type=devices --action=change"
4.2.6 验证绑定结果
在两个节点上分别验证绑定是否成功:
# 查看映射是否创建成功
ll /dev/dm/
# 检查每块磁盘的字节数(确认绑定生效)
blockdev --getsize64 /dev/dm/asm-dmvote
blockdev --getsize64 /dev/dm/asm-dmdcr
blockdev --getsize64 /dev/dm/asm-dmlog
blockdev --getsize64 /dev/dm/asm-dmarch
blockdev --getsize64 /dev/dm/asm-dmdata01
blockdev --getsize64 /dev/dm/asm-dmdata02
注意事项:
- 如果映射不成功,可以尝试重启服务器
- 确保所有磁盘都显示正确的字节数
- 权限应为
dmdba:dinstall,模式为0660 - 两个节点的绑定结果应该完
182、183目标服务器配置成功

5. 配置文件准备
在DSC集群搭建过程中,需要准备多个关键的配置文件。这些配置文件将分别放置在 /data/dmdba/tool 目录下。
5.1 创建配置文件目录
mkdir -p /data/dmdba/tool
5.2 设置目录权限
chown -R dmdba:dinstall /data
5.3 创建dmdcr_cfg.ini配置文件
在 /data/dmdba/tool 目录下创建 dmdcr_cfg.ini 文件,内容如下:
dmdcr_cfg.ini
DCR_N_GRP=3
DCR_VTD_PATH=/dev/dm/asm-dmvote
DCR_OGUID=88888888
[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=CSS0
DCR_EP_HOST=192.168.100.182
DCR_EP_PORT=9341
[GRP_CSS]
DCR_EP_NAME=CSS1
DCR_EP_HOST=192.168.100.183
DCR_EP_PORT=9341
[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
DCR_EP_SHM_KEY=42424
DCR_EP_SHM_SIZE=1024
DCR_EP_HOST=192.168.100.182
DCR_EP_PORT=9351
DCR_EP_ASM_LOAD_PATH=/dev/dm
[GRP_ASM]
DCR_EP_NAME=ASM1
DCR_EP_SHM_KEY=42425
DCR_EP_SHM_SIZE=1024
DCR_EP_HOST=192.168.100.183
DCR_EP_PORT=9351
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=60
[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
5.4 创建dmdcr.ini配置文件
在 /data/dmdba/tool 目录下创建 dmdcr.ini 文件,内容如下:
dmdcr.ini
DMDCR_PATH=/dev/dm/asm-dmdcr
DMDCR_MAL_PATH=/data/dmdba/tool/dmasvrmal.ini
DMDCR_SEQNO=0 # dsc0节点配置0,dsc1节点配置1
DMDCR_ASM_RESTART_INTERVAL=0
DMDCR_ASM_STARTUP_CMD=/data/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/data/dmdba/tool/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL=0
DMDCR_DB_STARTUP_CMD=/data/dmdba/dmdbms/bin/dmserver path=/data/dmdba/dmdata/dsc0_config/dm.ini dcr_ini=/data/dmdba/tool/dmdcr.ini
注意:在dsc1节点上,需要将 DMDCR_SEQNO 修改为 1。
5.5 创建dmasvrmal.ini配置文件
在 /data/dmdba/tool 目录下创建 dmasvrmal.ini 文件,内容如下:
dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME=ASM0
MAL_HOST=192.168.100.182
MAL_PORT=5246
[MAL_INST2]
MAL_INST_NAME=ASM1
MAL_HOST=192.168.100.183
MAL_PORT=5246
5.6 创建dminit.ini配置文件
在 /data/dmdba/tool 目录下创建 dminit.ini 文件,内容如下:
dminit.ini
db_name=dsc
system_path=+DMDATA/data
system=+DMDATA/data/dsc/system.dbf
system_size=128
roll=+DMDATA/data/dsc/roll.dbf
roll_size=128
main=+DMDATA/data/dsc/main.dbf
main_size=128
ctl_path=+DMDATA/data/dsc/dm.ctl
ctl_size=8
log_size=2048
dcr_path=/dev/dm/asm-dmdcr # dcr磁盘路径,目前不支持asm,只能是裸设备
dcr_seqno=0
auto_overwrite=1
RLOG_POSTFIX_NAME=dbf
PAGE_SIZE=32
EXTENT_SIZE=32
SYSDBA_PWD=Dameng@123
SYSAUDITOR_PWD=Dameng@123
CASE_SENSITIVE=N # 大小写是否敏感 N/0 不敏感 Y/1 敏感
CHARSET=1 # 字符集 0 GBK 1 UTF-8
[DSC0] # inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应
config_path=/data/dmdba/dmdata/dsc0_config
port_num=5236
mal_host=192.168.100.182
mal_port=5256
log_path=+DMLOG/log/dsc0_log01.dbf
log_path=+DMLOG/log/dsc0_log02.dbf
[DSC1] # inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应
config_path=/data/dmdba/dmdata/dsc1_config
port_num=5236
mal_host=192.168.100.183
mal_port=5256
log_path=+DMLOG/log/dsc1_log01.dbf
log_path=+DMLOG/log/dsc1_log02.dbf
5.7 创建dmcssm.ini配置文件
在 /data/dmdba/tool 目录下创建 dmcssm.ini 文件,内容如下:
dmcssm.ini
CSSM_OGUID=88888888
CSSM_CSS_IP=192.168.100.182:9341
CSSM_CSS_IP=192.168.100.183:9341
CSSM_LOG_PATH=../log
CSSM_LOG_FILE_SIZE=32
CSSM_LOG_SPACE_LIMIT=0
5.8 配置文件说明
-
dmdcr_cfg.ini:DCR(达梦集群注册)配置文件,定义了集群的组、节点和参数
DCR_N_GRP=3:定义3个组(CSS、ASM、DB)DCR_OGUID=88888888:集群唯一标识,所有节点必须一致- 每个组定义了对应的节点信息
-
dmdcr.ini:DCR服务配置文件
DMDCR_SEQNO:节点序列号,dsc0配置0,dsc1配置1- 定义了ASM和DB服务的启动命令
-
dmasvrmal.ini:ASM服务的MAL(消息异步传输)配置文件
- 定义了ASM实例之间的通信信息
-
dminit.ini:数据库初始化配置文件
- 定义了数据库名称、路径、大小等参数
- 包含两个DSC实例的配置段
-
dmcssm.ini:集群监视器配置文件
- 定义了CSS监视器的连接信息和日志配置
5.9 配置文件分发
将上述配置文件复制到两个DSC节点的相同位置:
# 在dsc0节点创建所有配置文件
# 然后将配置文件复制到dsc1节点
scp /data/dmdba/tool/*.ini dmdba@192.168.100.183:/data/dmdba/tool/
注意:复制完成后,需要根据节点修改 dmdcr.ini 中的 DMDCR_SEQNO 参数:
- dsc0节点:
DMDCR_SEQNO=0 - dsc1节点:
DMDCR_SEQNO=1
``
6. 数据库部署
6.1 配置操作系统资源限制
在两个DSC节点上修改/etc/security/limits.conf文件:
cat >> /etc/security/limits.conf << 'EOF'
* soft nproc 10240
* hard nproc 10240
dmdba soft nproc 10240
dmdba hard nproc 10240
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba hard data unlimited
dmdba soft data unlimited
dmdba hard fsize unlimited
dmdba soft fsize unlimited
dmdba soft core unlimited
dmdba hard core unlimited
EOF
6.2 创建数据库目录
在两个DSC节点上执行:
mkdir -p /data/dmdba/dmdata/bak
mkdir -p /data/dmdba/tool
mkdir -p /data/dmdba/dmdata/dmarch0
mkdir -p /data/dmdba/dmdata/dmarch1
chown -R dmdba:dinstall /data
6.3 安装数据库软件
在两个DSC节点上执行:
# 切换到dmdba用户
su - dmdba
# 挂载安装镜像
mount -o loop dm8_20260428_x86_kylin10_sp3_64.iso /mnt
# 执行安装程序
/mnt/DMInstall.bin -i
安装过程中按提示选择:
- 安装语言:1(中文)
- Key文件路径:n(不输入)
- 时区设置:y(是)
- 时区选择:21(Asia/Shanghai)
- 安装类型:1(典型安装)
- 安装目录:/data/dmdba/dmdbms
- 确认安装路径:y
- 确认安装:y
安装完成后切换回root用户执行root脚本:
exit
/data/dmdba/dmdbms/script/root/root_installer.sh
6.4 DMASMCMD初始化磁盘(在一个节点执行)
# 进入dmasmcmd工具
/data/dmdba/dmdbms/bin/dmasmcmd
# 逐行执行以下命令
create dcrdisk '/dev/dm/asm-dmdcr' 'dcr'
create votedisk '/dev/dm/asm-dmvote' 'vote'
create asmdisk '/dev/dm/asm-dmlog' 'LOG0'
create asmdisk '/dev/dm/asm-dmarch' 'ARCH0'
create asmdisk '/dev/dm/asm-dmdata01' 'DATA01'
create asmdisk '/dev/dm/asm-dmdata02' 'DATA02'
# 初始化磁盘
init dcrdisk '/dev/dm/asm-dmdcr' from '/data/dmdba/tool/dmdcr_cfg.ini' identified by 'Dameng@123'
init votedisk '/dev/dm/asm-dmvote' from '/data/dmdba/tool/dmdcr_cfg.ini'
# 退出
exit


6.5 启动dmcss服务
在两个DSC节点上分别执行:
su - dmdba
cd /data/dmdba/dmdbms/bin
./dmcss dcr_ini=/data/dmdba/tool/dmdcr.ini

回车显示命令说明
6.6 启动dmasm服务
在两个DSC节点上分别执行(需要新开终端):
su - dmdba
cd /data/dmdba/dmdbms/bin
./dmasmsvr dcr_ini=/data/dmdba/tool/dmdcr.ini

6.7 创建DMASM磁盘组
在一个节点上执行:
su - dmdba
cd /data/dmdba/dmdbms/bin
./dmasmtool dcr_ini=/data/dmdba/tool/dmdcr.ini
在dmasmtool中执行:
-- 创建redo日志磁盘组
create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-dmlog'
-- 创建归档日志磁盘组
create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-dmarch'
-- 创建数据磁盘组
create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata01'
-- 退出
exit
6.7.1 磁盘组添加磁盘
ALTER DISKGROUP 'DMDATA' ADD ASMDISK '/dev/dm/asm-dmdata02'
6.7.2 磁盘组删除磁盘
ALTER DISKGROUP 'DMDATA' DROP ASMDISK '/dev/dm/asm-dmdata02'
6.8 初始化数据库
在dsc0节点执行:
./dminit control=/data/dmdba/tool/dminit.ini

6.9 配置归档
dsc0节点归档配置
编辑/data/dmdba/dmdata/dsc0_config/dmarch.ini:
[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=/data/dmdba/dmdata/dmarch0
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=102400
[ARCHIVE_LOCAL2]
ARCH_TYPE=LOCAL
ARCH_DEST=+DMARCH/dmarch0
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=102400
[ARCH_REMOTE1]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC1
ARCH_INCOMING_PATH=+DMARCH/dmarch1
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=102400
dsc1节点归档配置
编辑/data/dmdba/dmdata/dsc1_config/dmarch.ini:
[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=/data/dmdba/dmdata/dmarch1
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=102400
[ARCHIVE_LOCAL2]
ARCH_TYPE=LOCAL
ARCH_DEST=+DMARCH/dmarch1
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=102400
[ARCH_REMOTE1]
ARCH_TYPE=REMOTE
ARCH_DEST=DSC0
ARCH_INCOMING_PATH=+DMARCH/dmarch0
ARCH_FILE_SIZE=2048
ARCH_SPACE_LIMIT=102400
修改dm.ini配置
在两个节点上分别修改:
vi /data/dmdba/dmdata/dsc0_config/dm.ini
vi /data/dmdba/dmdata/dsc1_config/dm.ini
添加或修改以下参数:
BAK_PATH=/data/dmdba/dmdata/bak
ARCH_INI=1


6.10 配置dmsql日志
在两个节点上分别配置:
vi /data/dmdba/dmdata/dsc0_config/sqllog.ini
vi /data/dmdba/dmdata/dsc1_config/sqllog.ini
配置内容:
BUF_TOTAL_SIZE=1024000
BUF_SIZE=10240
BUF_KEEP_CNT=20
SWITCH_LIMIT=256
FILE_NUM=20
MIN_EXEC_TIME=0

6.11 数据库配置同步到dsc1节点
# 在dsc1节点创建目录
su - dmdba
mkdir -p /data/dmdba/dmdata
# 从dsc0节点拷贝配置文件
scp -r /data/dmdba/dmdata/dsc1_config dmdba@192.168.100.183:/data/dmdba/dmdata/

6.12 前台启动数据库实例
dsc0节点启动:
su - dmdba
./dmserver /data/dmdba/dmdata/dsc0_config/dm.ini dcr_ini=/data/dmdba/tool/dmdcr.ini
dsc1节点启动:
su - dmdba
./dmserver /data/dmdba/dmdata/dsc1_config/dm.ini dcr_ini=/data/dmdba/tool/dmdcr.ini
6.13 查看集群状态
启动集群监视器:
正常状态下,css、asm、dsc服务状态应全部显示为正常。
./dmcssm /data/dmdba/tool/dmcssm.ini


6.14 关闭集群
在dmcssm监视器中执行:
# 停止DSC实例服务
ep stop GRP_DSC
# 停止DMASM服务
ep stop GRP_ASM
# 退出监视器
exit


在前台命令行窗口退出DMCSS服务:
EXIT
6.15 注册集群服务
查看服务安装帮助
su - root
cd /data/dmdba/dmdbms/script/root
./dm_service_installer.sh -h
注册DMCSS服务(两个节点)
./dm_service_installer.sh -t dmcss -p CSS -dcr_ini /data/dmdba/tool/dmdcr.ini
注册DMASM服务(两个节点)
./dm_service_installer.sh -t dmasmsvr -p ASM -dcr_ini /data/dmdba/tool/dmdcr.ini -y DmCSSServiceCSS
注册DMDSC实例服务
- dsc0节点:
./dm_service_installer.sh -t dmserver -p DSC -dm_ini /data/dmdba/dmdata/dsc0_config/dm.ini -dcr_ini /data/dmdba/tool/dmdcr.ini -y DmASMSvrServiceASM
- dsc1节点:
./dm_service_installer.sh -t dmserver -p DSC -dm_ini /data/dmdba/dmdata/dsc1_config/dm.ini -dcr_ini /data/dmdba/tool/dmdcr.ini -y DmASMSvrServiceASM
注册DMCSSM集群监视器服务(两个节点)
./dm_service_installer.sh -t dmcssm -p CSSM -cssm_ini /data/dmdba/tool/dmcssm.ini


6.16 修改dmdcr.ini使用服务名启动
dsc0节点配置
DMDCR_PATH=/dev/dm/asm-dmdcr
DMDCR_MAL_PATH=/data/dmdba/tool/dmasvrmal.ini
DMDCR_SEQNO=0
DMDCR_ASM_RESTART_INTERVAL=30
DMDCR_ASM_STARTUP_CMD=/data/dmdba/dmdbms/bin/DmASMSvrServiceASM start
DMDCR_DB_RESTART_INTERVAL=30
DMDCR_DB_STARTUP_CMD=/data/dmdba/dmdbms/bin/DmServiceDSC start
dsc1节点配置
DMDCR_PATH=/dev/dm/asm-dmdcr
DMDCR_MAL_PATH=/data/dmdba/tool/dmasvrmal.ini
DMDCR_SEQNO=1
DMDCR_ASM_RESTART_INTERVAL=30
DMDCR_ASM_STARTUP_CMD=/data/dmdba/dmdbms/bin/DmASMSvrServiceASM start
DMDCR_DB_RESTART_INTERVAL=30
DMDCR_DB_STARTUP_CMD=/data/dmdba/dmdbms/bin/DmServiceDSC start
6.17 后台服务启动集群
在两个节点上执行:
/data/dmdba/dmdbms/bin/DmCSSServiceCSS start
启动后通过dmcssm监视器观察集群状态,确保所有服务正常。
7. 后续优化建议
7.1 dm.ini参数优化
根据实际业务负载调整以下参数:
BUFFER:数据缓冲区大小MAX_SESSIONS:最大会话数WORKER_THREADS:工作线程数- 内存等参数
7.2 备份策略配置
8. 总结
本文详细介绍了达梦数据库DM8 DSC共享存储集群的完整搭建流程,从环境准备到服务注册,涵盖了所有关键步骤。通过本文的指导,您可以成功搭建一个高可用的达梦数据库集群环境,为业务系统提供稳定可靠的数据库服务。
注意事项:
- 所有操作前请做好数据备份
- 严格按照步骤顺序执行
- 配置文件中路径和参数需根据实际环境调整
- 生产环境建议进行充分的测试验证
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)