两台服务器、两个三副本 RAFT 组的部署与验收步骤1 部署目标与架构本文记录 DM8 DPC 带副本集群的部署过程。环境由两台服务器组成部署 1 个 MP、1 个 SP 和 6 个 BP6 个 BP 划分为 RAFT_1、RAFT_2 两个三副本组。最终完成分布式对象创建、数据分布验证、主 BP 故障自动选主以及恢复节点重加入验收。图 A DPC 带副本集群逻辑拓扑主机IP实例与端口DPC01192.168.100.150SP1:5236BP11:5238BP12:5239BP21:5241DPC02192.168.100.151MP:5237BP13:5240BP22:5242BP23:5243软件目录统一为 /dm8实例根目录为 /dm8/dpc。AP 端口分别为 60006007MP 额外使用 9000 监听管理连接。部署前检查确认两台主机时间同步、主机名和 IP 固定、相关端口未占用、/dm8 目录权限正确、两机可以互通。公开文章中的密码、许可证和敏感地址应使用占位符。2 实例初始化在 DPC01 初始化 SP1、BP11、BP12、BP21在 DPC02 初始化 MP、BP13、BP22、BP23。初始化前确保实例名、PORT_NUM、AP_PORT_NUM 和目录不重复。密码等敏感参数建议通过交互或安全配置提供不在公开文章中明文展示。初始化完成后不要直接批量启动。先逐个检查 dm.ini 中的实例名和端口并用系统工具确认计划端口没有被其他进程监听。建议把检查结果保存为端口矩阵后续注册拓扑和配置 RAFT 时继续使用同一份数据。图 1 初始化 DPC01 上的四个实例图 2 初始化 DPC02 上的四个实例实例PORT_NUMAP_PORT_NUM目录SP152366000/dm8/dpc/sp1/DAMENGMP52376001/dm8/dpc/mp/DAMENGBP1152386002/dm8/dpc/bp11/DAMENGBP1252396003/dm8/dpc/bp12/DAMENGBP1352406004/dm8/dpc/bp13/DAMENGBP2152416005/dm8/dpc/bp21/DAMENGBP2252426006/dm8/dpc/bp22/DAMENGBP2352436007/dm8/dpc/bp23/DAMENG3 启动 MP 并创建拓扑/dm8/bin/dmserver /dm8/dpc/mp/DAMENG/dm.ini dpc_modeMP确认 MP 数据库端口 5237、AP 端口 6001 以及管理监听 9000 正常后连接 MP 注册两个 RAFT 组、六个 BP、一个 BP 组和 SP1。注册顺序建议为实例 → RAFT → BP 组 → SP RAFT。如果注册命令返回成功但查询数量不正确应先检查实例名称大小写、主机 IP、数据库端口和 AP 端口再检查对象创建顺序。不要在元数据不完整时继续启动全部 BP否则后续错误会叠加。图 3 在 DPC02 启动元数据节点 MP图 4 确认 MP 启动信息及监听状态图 5 创建 RAFT_1 并注册三个 BP 副本图 6 创建 RAFT_2 并注册三个 BP 副本图 7 创建 BP 组并加入两个 RAFT 组图 8 创建 SP 的 RAFT 组并注册 SP1注册完成后分别检查实例数量、RAFT 组和 BP 组避免漏注册或成员归属错误。图 9 检查 DPC 实例总数图 10 检查 RAFT 组注册结果图 11 检查 BP 组注册结果4 准备两个 RAFT 的同源数据RAFT_1 以 BP11 为源库RAFT_2 以 BP21 为源库。先启动两个源 BP 到 OPEN再分别进行脱机全备。备份前确认源库正常关闭或满足所采用备份方式的条件并保证目标磁盘有足够空间。两个 RAFT 的备份目录和逻辑名称必须区分避免误把 RAFT_1 备份恢复到 RAFT_2 成员。图 12 启动 BP11 和 BP21 至 OPEN 状态# RAFT_1/dm8/bin/dmrman CTLSTMTBACKUP DATABASE /dm8/dpc/bp11/DAMENG/dm.ini FULL TO BACKUP_RAFT1 BACKUPSET /dm8/dpc/bp11/BACKUP_RAFT1 USE_AP2# RAFT_2/dm8/bin/dmrman CTLSTMTBACKUP DATABASE /dm8/dpc/bp21/DAMENG/dm.ini FULL TO BACKUP_RAFT2 BACKUPSET /dm8/dpc/bp21/BACKUP_RAFT2 USE_AP2图 13 备份 RAFT_1 源库 BP11图 14 备份 RAFT_2 源库 BP21图 15 检查两个 RAFT 备份集将 RAFT_1 备份还原到 BP12、BP13将 RAFT_2 备份还原到 BP22、BP23。跨主机成员需要先把完整备份集传到 DPC02。还原完成后必须执行 UPDATE DB_MAGIC并重新检查目标实例自己的 INSTANCE_NAME、PORT_NUM 和 AP_PORT_NUM避免恢复操作把源实例的本地参数带到目标实例。跨主机复制后建议比较备份文件数量和大小。/dm8/bin/dmrman CTLSTMTRESTORE DATABASE /dm8/dpc/bp12/DAMENG/dm.ini FROM BACKUPSET /dm8/dpc/bp11/BACKUP_RAFT1 USE_AP2/dm8/bin/dmrman CTLSTMTRECOVER DATABASE /dm8/dpc/bp12/DAMENG/dm.ini UPDATE DB_MAGIC USE_AP2图 16 将 BP11 备份还原至 BP12图 17 检查 DPC02 接收的备份文件图 18 将 RAFT_1 备份还原至 BP13图 19 将 RAFT_2 备份还原至 BP22图 20 将 RAFT_2 备份还原至 BP235 配置 BP 的 RAFT 归档六个 BP 均启用 ARCH_INI配置本地归档和 RAFT 归档。每个 RAFT 内成员 ID 必须唯一ARCH_DEST 必须指向正确实例名ARCH_DEST_ID 必须与对端 SELF_ID 一致。建议配置完一个 RAFT 后先做组内对照再配置下一个 RAFT。复制配置文件时只复制公共参数实例名、本地归档目录、SELF_ID 和对端列表必须逐项修改。ALTER_MODE_STATUS 0ARCH_INI 1[ARCHIVE_LOCAL1]ARCH_TYPE LOCALARCH_DEST /dm8/dpc/实例/DAMENG/archARCH_FILE_SIZE 128ARCH_SPACE_LIMIT 0XMAL_HB_INTERVAL 5RAFT_HB_INTERVAL 150RAFT_VOTE_INTERVAL 1500RAFT_SELF_ID 1|2|3[ARCHIVE_RAFT1]ARCH_TYPE RAFTARCH_DEST 对端实例名ARCH_DEST_ID 对端成员ID图 21 配置 DPC01 上 BP11、BP12、BP21图 22 配置 DPC02 上 BP13、BP22、BP236 启动 BP、SP 并检查状态分别在两台服务器启动六个 BP确认进程、端口和 OPEN 状态后再检查 RAFT 角色。健康状态下 RAFT_1 由 BP11 担任主节点RAFT_2 由 BP21 担任主节点。推荐的检查顺序为进程存在 → 端口监听 → 实例 OPEN → 组内出现主节点 → 其他成员为副本 → 全局视图成员数正确。任何一层失败都先停止继续操作定位当前层问题。图 23 启动 DPC01 上三个 BP 实例图 24 启动 DPC02 上三个 BP 实例图 25 检查 RAFT_1 主节点 BP11图 26 检查 RAFT_2 主节点 BP21启动 SP1 后连接 5236 端口查询全局 RAFT 信息。客户端后续统一连接 SP1不直接绑定某个 BP。直连 BP 只用于排障和节点状态确认。图 27 检查 SP1 启动结果图 28 登录 SP1 统一访问入口图 29 查询全局 RAFT 运行状态SELECT * FROM V$GLOBAL_RAFT_INFO;7 创建分布式对象并验证数据分布CREATE TABLESPACE TS_RAFT1DATAFILE TS_RAFT1.DBF SIZE 128 STORAGE(ON RAFT_1);CREATE TABLESPACE TS_RAFT2DATAFILE TS_RAFT2.DBF SIZE 128 STORAGE(ON RAFT_2);SP_TS_GROUP_CREATE(TSG_DPC_TEST,DPC distribution test tablespace group);SP_TS_GROUP_ADD_TS(TSG_DPC_TEST,TS_RAFT1);SP_TS_GROUP_ADD_TS(TSG_DPC_TEST,TS_RAFT2);CREATE PARTITION GROUP PG_DPC_HASHPARTITION BY HASH(INT) PARTITIONS 2STORE IN (TS_RAFT1, TS_RAFT2);图 30 创建两个 RAFT 表空间图 31 创建表空间组图 32 创建 HASH 分区组CREATE TABLE T_DPC_HASH(ID INT,DIST_ID INT NOT NULL,NAME VARCHAR(50),AMOUNT DECIMAL(10,2))USING PARTITION GROUP PG_DPC_HASH BY(DIST_ID);图 33 创建按 DIST_ID 分布的测试表图 34 查询两个 HASH 分区的数据量图 35 通过 ROWID 验证数据实际所在 RAFT验收时至少完成三项检查表可通过 SP 正常读写两个 HASH 分区均有数据通过 ROWID 或相关视图确认记录实际分布在 RAFT_1、RAFT_2。如果两个分区数据量明显不均应先检查测试数据的 DIST_ID 取值是否具有代表性再检查 HASH 分区数、表空间组成员和表的分布键定义。8 主 BP 故障与恢复验收故障前记录 RAFT_1 主节点 BP11。随后结束 BP11 的 dmserver 进程模拟突然故障。执行故障前确认 BP12、BP13 均健康确保故障后仍有多数派。故障操作必须精确定位 BP11 进程避免误杀 MP、SP 或同主机其他 BP。图 36 故障前记录 RAFT_1 状态图 37 模拟 BP11 进程突然故障故障后查询 RAFT 状态BP12 被选举为新主节点继续通过 SP 查询和插入业务可以完成。查询新主时允许短暂选举窗口应连续观察而不是只查询一次。业务验证至少包含一次写入并记录写入内容供节点恢复后核对。图 38 检查 RAFT_1 选举出的新主节点图 39 故障后通过 SP 继续查询和插入重新启动 BP11先直连检查其状态再从 SP 查询全局 RAFT确认 BP11 已作为副本重新加入。最终验收不要求 BP11 恢复为主节点。只要当前主 BP 稳定、BP11 完成日志追赶并以正确成员身份加入RAFT_1 即恢复三副本健康状态。图 40 检查 BP11 重新启动并加入集群图 41 直连 BP11 检查实例真实状态图 42 从 SP 确认 BP11 已重新加入 RAFT_1图 43 最终功能验收与集群状态确认9 验收清单验收项通过标准MP/SP/BP 进程8 个实例均按规划启动端口无冲突拓扑元数据2 个 RAFT、1 个 BP 组、1 个 SP RAFT 注册完整副本数据同源同一 RAFT 的副本来自同一源库备份RAFT 状态RAFT_1、RAFT_2 均有 1 主 2 副本分布式数据HASH 分区数据分布到两个 RAFT主节点故障BP11 故障后 BP12 自动成为新主业务连续性故障后仍可通过 SP 查询和插入节点恢复BP11 重启后重新加入 RAFT_110 常见问题与排查端口冲突逐项核对 PORT_NUM、AP_PORT_NUM、MP 管理端口及实际监听。实例未出现在拓扑检查 MP 是否可用、注册顺序和实例名是否一致。RAFT 无法形成检查副本是否同源、DB_MAGIC 是否更新、SELF_ID 是否唯一。副本无法连接检查 ARCH_DEST、ARCH_DEST_ID、网络和对应端口。进程已启动但不是组成员不要只看进程必须查询 RAFT 和全局状态视图。故障节点启动后未重加入检查日志差距、RAFT 配置、节点身份和剩余多数派状态。分布式表数据未按预期分布检查表空间与 RAFT 映射、分区组和分布键。11 结论本次完成两台服务器上的 DPC 带副本集群部署。两个 RAFT 组均形成三副本SP 提供统一访问MP 管理全局拓扑分布式表能够按 HASH 分布到不同 RAFT主 BP 故障后可以自动选主并继续提供服务故障节点恢复后能够重新加入。部署与功能验收均达到预期。达梦社区地址https://eco.dameng.com