注册
DMAFC 集群:原理、规划与三副本部署
专栏/技术分享/ 文章详情 /

DMAFC 集群:原理、规划与三副本部署

waytoofar 2026/09/04 60 0 0
摘要

1 什么是 DMAFC

1.1 官方名称与定位

达梦公开《DEM 使用手册》和微信公众号将该产品类型称为“自治容灾集群 DMAFC”,本文按常用写法简称 AFC。

DMAFC 面向数据库多副本与容灾场景:多个数据库实例通过专用通信和 RAFT 归档形成一个副本组,运行时选出一个 Leader,其余节点作为 Follower 保存副本。节点状态、任期和归档有效性共同决定集群是否形成稳定服务。

三副本 DM AFC 集群架构示意图

图 1 三副本 DM AFC 集群架构示意图(图源 DM9 安装目录下白皮书)

1.2 AFC 的主要作用

  1. 数据冗余:同一逻辑数据库保存多份副本,降低单节点介质或主机故障带来的数据风险。

  2. 自动选主:当前 Leader 不可用时,其余满足条件的节点通过选举产生新 Leader。

  3. 一致性控制:写入日志由 Leader 组织复制,副本按提交顺序应用,从而维护副本状态。

  4. 故障域规划:官方管理平台支持按地域、数据中心和容错域组织 AFC 节点,生产环境应避免同一副本组落在同一故障域。

  5. 可观察性:可通过 RAFT、归档和实例动态视图检查角色、任期、提交进度及有效状态。

注: AFC 提供数据库层多副本能力,但不能替代应用连接切换、网络冗余、存储备份、异地灾备和容量规划。RPO、RTO 与切换时间不能脱离版本、拓扑、负载和接入方式给出绝对值。

1.3 与单实例、传统主备的实践差异

表 1-1 三类部署方式的实践关注点

方式 核心关系 主要配置 部署关注点
单实例 一个数据库实例 dm.ini、可选本地归档 主机或实例故障时没有同组副本接管
传统数据守护 主库/备库与守护、监视组件 dmarch.ini、dmmal.ini、dmwatcher.ini、dmmonitor.ini 主备模式、守护进程和监视器配置
DMAFC RAFT 多副本,动态选举 Leader dm.ini、dmarch.ini 中 XMAL/RAFT/LOCAL 多数派、唯一节点 ID、选举超时和归档目标

2 AFC 技术原理

2.1 节点角色与任期

表 2-1 RAFT 状态及其含义

状态 含义 运维观察
Leader 当前任期内组织日志复制并对外承担主角色 稳定集群中应只有一个
Follower 接收 Leader 心跳和日志,必要时参与投票 三副本稳定时通常有两个
Candidate 心跳超时后发起新一轮选举的候选状态 短暂出现可属于选举过程;长期存在需排查
Term 选举任期号,用于区分不同时期的 Leader 发生新选举时递增;稳定后各有效节点应收敛

通用 RAFT 模型中,Follower 在选举超时内未收到有效 Leader 心跳,会增加 Term、转为 Candidate 并请求投票;同一任期获得超过半数选票的 Candidate 成为 Leader。若看到更高 Term 的有效消息,旧 Leader 或 Candidate 应退回 Follower。

2.2 为什么三副本需要两个有效节点

多数派计算为 Q = floor(N / 2) + 1。N=3 时 Q=2,因此三副本最多容忍一个节点失效;N=5 时 Q=3,最多容忍两个节点失效。这个结论来自 RAFT 多数派规则,是算法推论,不等同于某个具体版本的性能承诺。

表 2-2 多数派与容错关系

副本数 N 多数派 Q 最多容忍失效数 是否推荐偶数副本
3 2 1
5 3 2
7 4 3

理解要点 少数分区即使仍有进程运行,也不能仅凭自身形成合法多数派。多数派的目的,是避免网络分区时出现两个同时有效的 Leader。

2.3 心跳、选举与日志复制

  1. Leader 周期性发送心跳,维持当前任期的领导关系。

  2. Follower 超过选举超时未收到有效心跳后转为 Candidate,并发起投票。

  3. Candidate 获得多数票后成为 Leader,随后继续发送心跳和日志。

  4. 业务产生的 REDO/日志由 Leader 组织复制到副本;满足提交条件后推进提交位置。

  5. 恢复节点先重新建立通信,再追赶缺失日志;追赶过程中可观察到 INVALID 或 ASYNC_SEND,最终应恢复 VALID。

注: 本文用通用 RAFT 模型解释状态,但 DM 的具体提交、恢复和状态机实现应以当前版本官方手册为准。

2.4 XMAL、RAFT 归档与 LOCAL 归档

表 2-3 配置对象与职责

对象 职责 关键检查
XMAL 副本间选举、心跳和消息通信通道 本地 IP/端口唯一,端口不得与 PORT_NUM 相同
RAFT 归档 Leader 向另外两个副本同步日志的目标关系 目标实例名、IP、端口、ID 交叉一致
LOCAL 归档 本节点本地归档,辅助恢复与日志管理 每个 RAFT 配置至少保留一路 LOCAL

官方 DEM 文档明确说明 AFC 的 dmarch.ini 配置步骤与 DMDPC 多副本一致。本文据此采用相同的 RAFT/XMAL 配置规则。

3 三节点部署规划

3.1 可编辑拓扑表

表 3-1 三副本节点规划(所有地址均为占位符)

节点 主机名 实例 业务端点 XMAL 端点 SELF_ID
A afc-node-1 RAFT_01 <BIZ_IP_A>:<DB_PORT_A> <XMAL_IP_A>:<XMAL_PORT_A> 1
B afc-node-2 RAFT_02 <BIZ_IP_B>:<DB_PORT_B> <XMAL_IP_B>:<XMAL_PORT_B> 2
C afc-node-3 RAFT_03 <BIZ_IP_C>:<DB_PORT_C> <XMAL_IP_C>:<XMAL_PORT_C> 3

关系说明:RAFT_01、RAFT_02、RAFT_03 属于同一副本组;每个节点在 dmarch.ini 中配置另外两个节点为 RAFT 目标,并配置一条本地 LOCAL 归档。

3.2 网络平面

表 3-2 网络平面与用途

网络 用途 部署检查
管理网 SSH、软件安装、文件传输、监控和时间同步 三节点可管理,默认路由和 DNS 正确
XMAL/内部网 RAFT 心跳、选举和日志复制 节点两两互通,端口未占用且不与 DB 端口重复
业务网 客户端或应用连接数据库 访问策略与 Leader 变化相匹配

3.3 目录与参数占位符

表 3-3 目录规划

对象 节点 A 节点 B 节点 C
数据库根目录 /dmdata/afc_lab/raft_01 /dmdata/afc_lab/raft_02 /dmdata/afc_lab/raft_03
配置与数据 …/raft_01/DAMENG …/raft_02/DAMENG …/raft_03/DAMENG
本地归档 …/raft_01/DAMENG/arch …/raft_02/DAMENG/arch …/raft_03/DAMENG/arch
离线备份 /dmdata/afc_lab/backup/RAFT_01_FULL 同一备份集副本 同一备份集副本

<DM_HOME>&lt;SYSDBA_PASSWORD>&lt;SYSAUDITOR_PASSWORD> 以及所有 &lt;..._IP_...>&lt;..._PORT_...> 都是占位符,执行前需按当前环境进行替换。

4 部署前检查

4.1 三节点一致性

命令 4-1 三节点基础检查

hostnamectl ip -br addr ip route lsblk -f df -hT /dmdata timedatectl ulimit -a ss -lntp # DM 版本必须在三节点一致 <DM_HOME>/bin/dmserver help | head <DM_HOME>/bin/dminit help | head

表 4-1 前置验收标准

检查项 通过标准
软件版本 三节点 DM Build 和授权能力一致
时间 时区一致,chrony/NTP 正常,无明显漂移
网络 管理、XMAL、业务网络按规划互通
端口 DB 与 XMAL 端口未被占用,且同节点不重复
存储 数据库、归档、备份空间满足容量估算
权限 服务账号对自身目录有读写权限,其他账号无越权写入

4.2 创建隔离目录

命令 4-2 创建目录与权限

# root 在对应节点执行;只创建本次部署目录 mkdir -p /dmdata/afc_lab/{raft_01,raft_02,raft_03,backup,logs} chown -R dmdba:dinstall /dmdata/afc_lab chmod 750 /dmdata/afc_lab # 服务账号验证 sudo -u dmdba test -w /dmdata/afc_lab && echo writable

4.3 时间与网络检查

命令 4-3 时间与端口检查

chronyc tracking chronyc sources -v date '+%F %T.%3N %z' # 启动前确认端口未占用 ss -lnt | grep -E '(<DB_PORT_A>|<XMAL_PORT_A>)' || true # 数据库启动后再从对端验证 XMAL 监听 nc -zv <XMAL_IP_A> <XMAL_PORT_A>

5 初始化三个数据库壳

关键修正 三个目标目录都必须先通过 dminit 生成自己的 dm.ini 和文件路径体系。不能只初始化 RAFT_01 后就直接向不存在的 RAFT_02/RAFT_03 dm.ini 执行 RESTORE,也不能用 RAFT_01 的 dm.ini 覆盖另外两个节点。

5.1 初始化参数原则

三个节点的页大小、簇大小、字符集、大小写敏感等不可变初始化参数必须一致;日志文件规格也建议按同一规划初始化。仅 PATH、INSTANCE_NAME、PORT_NUM 等节点标识不同。

命令 5-1 节点 A 初始化模板

# dmdba@afc-node-1 <DM_HOME>/bin/dminit \ PATH=/dmdata/afc_lab/raft_01 \ DB_NAME=DAMENG \ INSTANCE_NAME=RAFT_01 \ PORT_NUM=<DB_PORT_A> \ PAGE_SIZE=<PAGE_SIZE> \ EXTENT_SIZE=<EXTENT_SIZE> \ LOG_SIZE=<LOG_SIZE> \ CHARSET=<CHARSET> \ CASE_SENSITIVE=<Y_OR_N> \ SYSDBA_PWD='<SYSDBA_PASSWORD>' \ SYSAUDITOR_PWD='<SYSAUDITOR_PASSWORD>'

命令 5-2 节点 B/C 同构初始化模板

# 节点 B:替换路径、实例名、端口 <DM_HOME>/bin/dminit PATH=/dmdata/afc_lab/raft_02 \ DB_NAME=DAMENG INSTANCE_NAME=RAFT_02 PORT_NUM=<DB_PORT_B> \ PAGE_SIZE=<PAGE_SIZE> EXTENT_SIZE=<EXTENT_SIZE> \ LOG_SIZE=<LOG_SIZE> CHARSET=<CHARSET> CASE_SENSITIVE=<Y_OR_N> \ SYSDBA_PWD='<SYSDBA_PASSWORD>' SYSAUDITOR_PWD='<SYSAUDITOR_PASSWORD>' # 节点 C:替换路径、实例名、端口 <DM_HOME>/bin/dminit PATH=/dmdata/afc_lab/raft_03 \ DB_NAME=DAMENG INSTANCE_NAME=RAFT_03 PORT_NUM=<DB_PORT_C> \ PAGE_SIZE=<PAGE_SIZE> EXTENT_SIZE=<EXTENT_SIZE> \ LOG_SIZE=<LOG_SIZE> CHARSET=<CHARSET> CASE_SENSITIVE=<Y_OR_N> \ SYSDBA_PWD='<SYSDBA_PASSWORD>' SYSAUDITOR_PWD='<SYSAUDITOR_PASSWORD>'

5.2 初始化后检查

命令 5-3 检查目标配置与路径

# 三节点分别执行 grep -nE '^[[:space:]]*(INSTANCE_NAME|PORT_NUM|CTL_PATH|SYSTEM_PATH|CONFIG_PATH|BAK_PATH)[[:space:]]*=' \ /dmdata/afc_lab/raft_0X/DAMENG/dm.ini ls -lh /dmdata/afc_lab/raft_0X/DAMENG # B/C 的所有路径必须分别指向 raft_02 / raft_03

6 建立一致的三副本基线

6.1 RAFT_01 先只配置本地归档

在 RAFT_01 的 dm.ini 中先设置 ARCH_INI=1、ALTER_MODE_STATUS=0;dmarch.ini 暂时只写 LOCAL 归档,避免基线尚未建立时提前发起 RAFT 选举。

命令 6-0 创建 RAFT_01 本地归档目录

# root@afc-node-1 mkdir -p /dmdata/afc_lab/raft_01/DAMENG/arch chown dmdba:dinstall /dmdata/afc_lab/raft_01/DAMENG/arch chmod 750 /dmdata/afc_lab/raft_01/DAMENG/arch sudo -u dmdba test -w /dmdata/afc_lab/raft_01/DAMENG/arch && echo writable

配置 6-1 RAFT_01 首次启动前的 dmarch.ini

[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/afc_lab/raft_01/DAMENG/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0

命令 6-1 首次启动、检查并正常关闭

nohup <DM_HOME>/bin/dmserver \ /dmdata/afc_lab/raft_01/DAMENG/dm.ini \ > /dmdata/afc_lab/logs/raft_01_first_boot.log 2>&1 & tail -f /dmdata/afc_lab/logs/raft_01_first_boot.log # 看到 SYSTEM IS READY 后,使用交互式 disql 登录并执行: # SELECT INSTANCE_NAME, STATUS$ FROM V$INSTANCE; # SHUTDOWN IMMEDIATE;

检查点 离线全备前必须确认 RAFT_01 已正常关闭,不能在 dmserver 仍占用数据文件时执行脱机流程。

6.2 对 RAFT_01 做离线全备

命令 6-2 生成全备

<DM_HOME>/bin/dmrman \ CTLSTMT="BACKUP DATABASE \ '/dmdata/afc_lab/raft_01/DAMENG/dm.ini' \ FULL TO RAFT01_FULL \ BACKUPSET '/dmdata/afc_lab/backup/RAFT_01_FULL'" \ USE_AP=2

USE_AP=2 和备份名是本次已核对实验用法,不应写成所有版本的强制值。执行前通过当前版本 dmrman help 或随安装文档确认。

6.3 复制并校验同一备份集

命令 6-3 生成清单并复制到节点 B/C

cd /dmdata/afc_lab/backup find RAFT_01_FULL -type f -exec sha256sum '{}' + | sort -k2 \ > RAFT_01_FULL.SHA256SUMS rsync -a RAFT_01_FULL RAFT_01_FULL.SHA256SUMS \ dmdba@<MGMT_IP_B>:/dmdata/afc_lab/backup/ rsync -a RAFT_01_FULL RAFT_01_FULL.SHA256SUMS \ dmdba@<MGMT_IP_C>:/dmdata/afc_lab/backup/ # 若只能使用其他传输账号,B/C 由 root 修正属主后再切回 dmdba: # chown -R dmdba:dinstall /dmdata/afc_lab/backup/RAFT_01_FULL* # B/C 由 dmdba 分别执行 cd /dmdata/afc_lab/backup sha256sum -c RAFT_01_FULL.SHA256SUMS

7 恢复 RAFT_02 与 RAFT_03

7.1 节点 B 的恢复顺序

命令 7-1 RESTORE、按需 RECOVER 与 UPDATE DB_MAGIC

# 整段作为同一脚本执行;进程仍在时不会进入恢复分支 if pgrep -af 'dmserver.*raft_02/DAMENG/dm.ini'; then echo 'RAFT_02 is still running; stop it before restore.' >&2 else <DM_HOME>/bin/dmrman CTLSTMT="RESTORE DATABASE \ '/dmdata/afc_lab/raft_02/DAMENG/dm.ini' FROM BACKUPSET \ '/dmdata/afc_lab/backup/RAFT_01_FULL'" USE_AP=2 # 仅当备份集需要重做恢复时,取消下面三行注释后执行 # <DM_HOME>/bin/dmrman CTLSTMT="RECOVER DATABASE \ # '/dmdata/afc_lab/raft_02/DAMENG/dm.ini' FROM BACKUPSET \ # '/dmdata/afc_lab/backup/RAFT_01_FULL'" USE_AP=2 <DM_HOME>/bin/dmrman CTLSTMT="RECOVER DATABASE \ '/dmdata/afc_lab/raft_02/DAMENG/dm.ini' UPDATE DB_MAGIC" USE_AP=2 fi

7.2 节点 C 同构执行

把命令7-1中的 raft_02 替换为 raft_03 后,在节点 C 同构执行。本地原始记录采用 RESTORE → RECOVER FROM BACKUPSET → UPDATE DB_MAGIC 三步;中间 RECOVER 是否必需,取决于备份集是否需要重做恢复以及当前版本要求。实施时以 DMRMAN 输出、当前版本帮助和随安装手册为准,不机械省略,也不机械强制执行。

7.3 恢复后保护各自 dm.ini

  • RAFT_02 保留自己初始化生成的路径体系,INSTANCE_NAME=RAFT_02,PORT_NUM=&lt;DB_PORT_B>

  • RAFT_03 保留自己初始化生成的路径体系,INSTANCE_NAME=RAFT_03,PORT_NUM=&lt;DB_PORT_C>

  • 检查 CTL、SYSTEM、CONFIG、BAK 等路径不含其他节点目录。

  • 三节点均设置 ARCH_INI=1、ALTER_MODE_STATUS=0,再配置 AFC 相关参数。

为什么更新 DB_MAGIC 三个物理副本来自同一数据基线,但仍需各自可识别的数据库标识。UPDATE DB_MAGIC 必须在目标实例停库且恢复完成后执行。

8 配置 dm.ini 与 dmarch.ini

8.1 dm.ini 关键项

配置 8-1 三节点 dm.ini 模板

# 节点唯一项 INSTANCE_NAME = RAFT_0X PORT_NUM = <DB_PORT_X> # 本次实验共同值 MAX_SESSIONS = 100 RLOG_RAFT_NEED_WAIT = 3 RLOG_RAFT_WAIT_TIME = 1000 RAFT_RECOVER_MODE = 1 ALTER_MODE_STATUS = 0 MAL_INI = 0 ARCH_INI = 1

表 8-1 关键参数解释与边界

参数 本次值 说明
RLOG_RAFT_NEED_WAIT 3 有效备库存在日志堆积时,主库按等待参数暂缓日志包发送
RLOG_RAFT_WAIT_TIME 1000 ms RAFT 主库延迟发送等待时间;本次取值与官方缺省说明一致
RAFT_RECOVER_MODE 1 本次实测配置保留;公开页未核实完整定义,以当前版本手册为准
ALTER_MODE_STATUS 0 本次配置不允许通过普通 SQL 随意改变模式状态
MAL_INI 0 本次 AFC 不加载传统 MAL 配置;副本通信使用 dmarch.ini 中 XMAL
ARCH_INI 1 启用 dmarch.ini 归档配置

8.2 RAFT_01 的 dmarch.ini

配置 8-2 RAFT_01

XMAL_HB_INTERVAL = 5 RAFT_HB_INTERVAL = 150 RAFT_VOTE_INTERVAL = 3000 XMAL_IP = <XMAL_IP_A> XMAL_PORT = <XMAL_PORT_A> RAFT_SELF_ID = 1 [ARCHIVE_RAFT1] ARCH_TYPE = RAFT ARCH_DEST = RAFT_02 ARCH_DEST_IP = <XMAL_IP_B> ARCH_DEST_PORT = <XMAL_PORT_B> ARCH_DEST_ID = 2 [ARCHIVE_RAFT2] ARCH_TYPE = RAFT ARCH_DEST = RAFT_03 ARCH_DEST_IP = <XMAL_IP_C> ARCH_DEST_PORT = <XMAL_PORT_C> ARCH_DEST_ID = 3 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/afc_lab/raft_01/DAMENG/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0

8.3 RAFT_02 的 dmarch.ini

配置 8-3 RAFT_02

XMAL_HB_INTERVAL = 5 RAFT_HB_INTERVAL = 150 RAFT_VOTE_INTERVAL = 5000 XMAL_IP = <XMAL_IP_B> XMAL_PORT = <XMAL_PORT_B> RAFT_SELF_ID = 2 [ARCHIVE_RAFT1] ARCH_TYPE = RAFT ARCH_DEST = RAFT_01 ARCH_DEST_IP = <XMAL_IP_A> ARCH_DEST_PORT = <XMAL_PORT_A> ARCH_DEST_ID = 1 [ARCHIVE_RAFT2] ARCH_TYPE = RAFT ARCH_DEST = RAFT_03 ARCH_DEST_IP = <XMAL_IP_C> ARCH_DEST_PORT = <XMAL_PORT_C> ARCH_DEST_ID = 3 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/afc_lab/raft_02/DAMENG/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0

8.4 RAFT_03 的 dmarch.ini

配置 8-4 RAFT_03

XMAL_HB_INTERVAL = 5 RAFT_HB_INTERVAL = 150 RAFT_VOTE_INTERVAL = 7000 XMAL_IP = <XMAL_IP_C> XMAL_PORT = <XMAL_PORT_C> RAFT_SELF_ID = 3 [ARCHIVE_RAFT1] ARCH_TYPE = RAFT ARCH_DEST = RAFT_01 ARCH_DEST_IP = <XMAL_IP_A> ARCH_DEST_PORT = <XMAL_PORT_A> ARCH_DEST_ID = 1 [ARCHIVE_RAFT2] ARCH_TYPE = RAFT ARCH_DEST = RAFT_02 ARCH_DEST_IP = <XMAL_IP_B> ARCH_DEST_PORT = <XMAL_PORT_B> ARCH_DEST_ID = 2 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/afc_lab/raft_03/DAMENG/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0

参数关系 三个节点的 XMAL_HB_INTERVAL、RAFT_HB_INTERVAL 应保持一致;RAFT_VOTE_INTERVAL 至少为心跳间隔的两倍,并可错开以降低同时参选概率。3000/5000/7000 是本次实验值,不是所有环境的固定答案。

归档容量风险 ARCH_SPACE_LIMIT=0 是本次实验值,表示不设置空间上限。生产环境不得直接照抄:应依据归档保留策略和磁盘容量设置上限、清理机制与告警阈值,防止归档写满磁盘。

9 启动与验收

9.1 启动三个节点

本地材料没有证明三节点存在强制启动先后顺序。可在各节点分别以 mount 方式启动,由 RAFT 自动完成选主与状态转换;不要把 RAFT_01 写成固定 Leader。第 6.1 节中 RAFT_01 为建立初始基线而进行的首次普通启动与正常关闭,是单独步骤。

命令 9-0 三节点创建并验证 LOCAL 归档目录

# 三节点分别由 root 执行,把 0X 替换为 01、02、03 mkdir -p /dmdata/afc_lab/raft_0X/DAMENG/arch chown dmdba:dinstall /dmdata/afc_lab/raft_0X/DAMENG/arch chmod 750 /dmdata/afc_lab/raft_0X/DAMENG/arch sudo -u dmdba test -w /dmdata/afc_lab/raft_0X/DAMENG/arch && echo writable

命令 9-1 各节点 mount 启动模板

nohup <DM_HOME>/bin/dmserver \ /dmdata/afc_lab/raft_0X/DAMENG/dm.ini mount \ > /dmdata/afc_lab/logs/raft_0X.log 2>&1 & tail -n 100 /dmdata/afc_lab/logs/raft_0X.log

9.2 动态视图验证

SQL 9-1 集群状态检查

SELECT INSTANCE_NAME, RAFT_STAT, TERM_ID, SYS_MODE, SYS_STATUS, ARCH_STATUS FROM V$GLOBAL_RAFT_INFO; DESC V$RLOG_RAFT_INFO; SELECT * FROM V$RLOG_RAFT_INFO; SELECT * FROM V$ARCH_STATUS; SELECT * FROM V$DM_ARCH_INI;

视图列边界 不要假设 V$RLOG_RAFT_INFO 含 INSTANCE_NAME。应先 DESC 再按当前版本实际列查询;错误列导致的 -2111 是监控 SQL 错误,不是集群状态故障。

9.3 验收标准

表 9-1 部署验收清单

维度 通过标准 不通过时处理
节点可见性 V$GLOBAL_RAFT_INFO 可见三个正常通信节点 先查 XMAL 网络、端口和日志
角色 恰好一个 Leader,两个 Follower 若长期 Candidate,检查选举与多数派
任期 有效节点 Term 已稳定收敛 持续增长时检查心跳和网络抖动
实例状态 Leader PRIMARY/OPEN,Follower STANDBY/OPEN 检查启动日志和模式状态
归档状态 Leader 的 LOCAL 与两条 RAFT 归档均 VALID 检查归档目标、ID、路径和权限
配置加载 V$DM_ARCH_INI 与配置文件一致 确认 ARCH_INI=1、文件名和路径

参考资料

[1] 达梦《DEM 使用手册》,6.3.4 自治容灾集群 DMAFC;AFC 监控与维护章节:https://eco.dameng.com/document/dm/zh-cn/pm/dem_user_manual.html

[2] 达梦《DMDPC 配置》,6.1.4 RAFT/XMAL 归档配置规则:https://eco.dameng.com/document/dm/zh-cn/pm/dpc-dispose.html

[3] 达梦《DMDPC 集群部署》,7.2.6~7.2.8 多副本初始化、恢复与配置流程:https://eco.dameng.com/document/dm/zh-cn/pm/dpc-cluster-deploy.html

[4] 达梦《相关系统表和动态视图》,VRLOG_RAFT_INFO、VARCH_STATUS、VDM_ARCH_INI、VGLOBAL_RAFT_INFO:https://eco.dameng.com/document/dm/zh-cn/pm/dpc-system_table-dynamic_view.html

[5] 达梦《DM 物理存储结构》,RAFT 日志等待参数与归档类型:https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage

[6] Ongaro & Ousterhout, In Search of an Understandable Consensus Algorithm,Leader election、log replication、safety:https://raft.github.io/raft.pdf

达梦社区地址:https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服