ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

DM9自治容灾集群DMAFC的Raft共识机制应用

DM9自治容灾集群DMAFC的Raft共识机制应用 文章目录每日一句正能量摘要一、引言传统容灾的三座大山二、DMAFC架构设计2.1 核心设计理念2.2 奇数副本制2.3 架构组件三、Raft共识机制详解3.1 Raft核心原理3.2 任期与状态机3.3 Leader选举流程3.4 日志复制机制四、自治切换机制4.1 故障检测4.2 自动切换过程4.3 脑裂防护五、两地三中心部署5.1 原生支持跨地域5.2 容灾能力指标六、影子副本技术6.1 降低存储成本6.2 应用场景七、DMAFC vs DMDataWatch八、部署实践8.1 最小三节点部署8.2 监控巡检九、总结与展望每日一句正能量而平躺的波浪名叫沙滩。在潮汐的往返里愿你能时常回到自己腾出的那个角落看看那里积攒的微光。毕竟真正陪伴我们穿越漫长岁月的正是那个终于被自己深爱着的灵魂。摘要摘要传统数据库主备容灾方案依赖守护进程、监视器和第三方仲裁组件部署复杂、切换延迟大、运维成本高。达梦DM9推出的自治容灾集群DMAFC将分布式数据库中成熟的Raft共识机制引入集中式数据库容灾领域实现了全自动驾驶级别的故障自愈能力。本文从Raft协议原理、DMAFC架构设计、自治切换机制、两地三中心部署四个维度深入解析这项创新技术的实现原理与应用价值。一、引言传统容灾的三座大山在企业级数据库系统中容灾高可用是保障业务连续性的最后一道防线。传统主备容灾方案如Oracle ADG、达梦DMDataWatch虽然成熟可靠但始终面临三座大山第一座组件依赖重传统方案需要部署守护进程dmwatcher、监视器dmmonitor、MAL通信组件等多个额外模块架构复杂度高任何一个组件故障都可能影响切换成功率。第二座切换不可控多备库场景下主库故障时哪个备库接管、接管顺序如何往往缺乏确定性。人工干预意味着RTO延长自动切换又担心脑裂风险。第三座异地切换难两地三中心场景下跨地域网络延迟导致同步链路重建困难异地切主后性能下降明显操作复杂且风险高。达梦DM9的破局思路是把分布式数据库里成熟的Raft自动选举机制搬到集中式数据库的容灾里让容灾实现全自动驾驶。二、DMAFC架构设计2.1 核心设计理念DMAFCDM Autonomous Failover Cluster基于Raft一致性协议构建其核心设计遵循极简、自治、强一致三大原则极简架构无需守护进程、监视器、第三方仲裁数据库内核原生支持自治运维故障检测、主库选举、数据同步全自动完成DBA无需熬夜抢修强一致性Raft协议保证数据零丢失RPO0RTO秒级2.2 奇数副本制DMAFC采用奇数副本架构集群由N个副本节点实例组成N一般取3、5、7、9-- 查看DMAFC集群节点信息SELECTINSTANCE_NAME,RAFT_SELF_ID,RAFT_STAT,SYS_MODEFROMV$GLOBAL_RAFT_INFO;-- 输出-- INSTANCE_NAME RAFT_SELF_ID RAFT_STAT SYS_MODE-- CJC 1 LEADER PRIMARY-- CJC01 2 FOLLOWER STANDBY-- CJC02 3 FOLLOWER STANDBY为什么必须是奇数Raft协议要求选举时遵循绝对多数原则Majority。三副本集群中一个节点必须拿到至少2票才能当选主库。奇数副本确保副本数最小多数最大容错说明321最低配置成本友好532中等规模平衡可靠与成本743大规模高可靠场景954超大规模金融核心2.3 架构组件DMAFC的架构极为精简核心组件只有两个数据库实例每个节点运行独立实例实例间通过XMAL通信Raft状态机内嵌于数据库内核负责日志复制、选举投票、一致性检查┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 实例1 │ │ 实例2 │ │ 实例3 │ │ (LEADER) │◄───►│ (FOLLOWER) │◄───►│ (FOLLOWER) │ │ │XMAL │ │XMAL │ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │ │Raft状态机│ │ │ │Raft状态机│ │ │ │Raft状态机│ │ │ └─────────┘ │ │ └─────────┘ │ │ └─────────┘ │ └─────────────┘ └─────────────┘ └─────────────┘三、Raft共识机制详解3.1 Raft核心原理Raft是一种为管理复制日志而设计的共识算法。它将一致性问题分解为三个相对独立的子问题Leader选举当主库故障或网络分区时集群自动选举新主库日志复制主库将所有写操作以日志形式复制到备库安全性通过任期Term和日志索引保证数据一致性3.2 任期与状态机在DMAFC中每个节点处于以下三种状态之一-- 查看节点Raft状态转换历史SELECTINSTANCE_NAME,OLD_STAT,NEW_STAT,TERM_ID,CHANGE_TIMEFROMV$RAFT_SWITCH_INFOORDERBYCHANGE_TIMEDESC;-- 输出-- INSTANCE_NAME OLD_STAT NEW_STAT TERM_ID CHANGE_TIME-- CJC LEADER FOLLOWER 8 2024-09-07 20:17:35-- CJC01 FOLLOWER LEADER 8 2024-09-07 20:17:38三种状态Leader主库处理所有读写请求向Follower复制日志Follower备库接收并存储Leader的日志只读服务Candidate候选者Follower超时后转为Candidate发起选举任期Term单调递增的整数每次选举开启新任期。任期是Raft的逻辑时钟确保旧Leader不会干扰新Leader。3.3 Leader选举流程当Follower在选举超时Election Timeout内未收到Leader心跳时触发选举1. Follower超时 → 转为CandidateTerm1 2. Candidate向所有节点发送RequestVote RPC 3. 节点投票规则 - 每个Term只能投一票 - 优先投给日志更完整的节点 4. 获得多数票 → 成为新Leader 5. 新Leader立即发送心跳抑制其他选举-- 查看选举统计SELECTTERM_ID,ELECT_WINNER,VOTE_CNT,TOTAL_NODE,ELECT_DURATION_MSFROMV$RAFT_ELECTION_HISTORY;-- 输出-- TERM_ID ELECT_WINNER VOTE_CNT TOTAL_NODE ELECT_DURATION_MS-- 8 CJC01 2 3 32003.4 日志复制机制Leader将写操作序列化为日志条目通过AppendEntries RPC异步复制到Follower-- 查看日志复制状态SELECTINSTANCE_NAME,LOG_SEQ,APPLIED_SEQ,LAG_SEQ,REPL_STATUSFROMV$RAFT_LOG_REPLICATION;-- 输出-- INSTANCE_NAME LOG_SEQ APPLIED_SEQ LAG_SEQ REPL_STATUS-- CJC 3397 3397 0 SYNCED-- CJC01 3397 3397 0 SYNCED-- CJC02 3397 3396 1 SYNCING复制流程客户端写请求到达LeaderLeader写入本地日志分配全局序列号G_SEQLeader通过XMAL发送日志到FollowerFollower写入本地日志并返回确认Leader收到多数确认后标记日志为已提交CommittedLeader应用日志到状态机返回客户端成功四、自治切换机制4.1 故障检测DMAFC通过Raft心跳机制实现故障检测无需额外探活组件-- 查看心跳配置SELECTPARAM_NAME,PARAM_VALUE,DESCRIPTIONFROMV$RAFT_PARAMETERS;-- 输出-- PARAM_NAME PARAM_VALUE DESCRIPTION-- RAFT_HB_INTERVAL 150 Leader心跳间隔(ms)-- RAFT_VOTE_INTERVAL 3000 选举超时时间(ms)-- XMAL_HB_INTERVAL 5 XMAL心跳间隔(s)Leader以150ms间隔发送心跳。Follower超过3000ms未收到心跳即判定Leader故障触发选举。4.2 自动切换过程以三副本集群为例展示主库故障后的完整切换过程时间点 事件 T0ms LeaderCJC故障宕机 T150ms FollowerCJC01、CJC02未收到心跳 T3000ms CJC01选举超时转为CandidateTerm8 T3002ms CJC01向CJC02发送RequestVote T3003ms CJC02投票给CJC01日志更完整 T3005ms CJC01获得2票多数成为新Leader T3008ms CJC01发送心跳确认领导地位 T3010ms 业务恢复新Leader接管读写总切换时间约3秒远快于传统方案的分钟级切换。4.3 脑裂防护Raft协议天然防止脑裂Split-Brain-- 模拟网络分区场景-- 原Leader CJC与CJC01、CJC02网络隔离-- CJC侧少数派-- CJC继续作为Leader但无法获得多数确认-- 写操作无法提交自动降级为只读-- CJC01/CJC02侧多数派-- 选举超时后选出新Leader CJC01-- 正常提供读写服务-- 网络恢复后-- CJC发现自己的Term落后自动转为Follower-- 从新Leader同步缺失日志数据一致性自动修复关键机制任何写操作必须获得多数节点确认才能提交网络分区时少数派自动拒绝写入从根本上杜绝双主问题。五、两地三中心部署5.1 原生支持跨地域DMAFC原生支持两地三中心部署无需额外配置-- 配置异地节点关闭选举开关-- 异地中心C的节点不参与Leader选举避免跨地域延迟影响ALTERSYSTEMSETRAFT_ELECTION_ENABLE0INSTANCECJC02;-- 查看各节点选举权限SELECTINSTANCE_NAME,RAFT_ELECTION_ENABLE,DATA_CENTERFROMV$RAFT_NODE_CONFIG;-- 输出-- INSTANCE_NAME RAFT_ELECTION_ENABLE DATA_CENTER-- CJC 1 CENTER_A-- CJC01 1 CENTER_B-- CJC02 0 CENTER_C设计逻辑同城中心A、B的节点参与选举故障时在城内切换异地中心C的节点仅作为日志副本不参与选举避免跨地域网络延迟影响Raft协议性能5.2 容灾能力指标指标能力值说明RPO0同步复制数据零丢失同城RTO 8秒同城节点故障切换异地RTO 30秒异地节点故障接管故障容忍(N-1)/23副本容1个节点5副本容2个数据一致性强一致Raft协议保证六、影子副本技术6.1 降低存储成本DMAFC支持部署影子副本——仅写日志、不重演数据的特殊副本-- 创建影子副本节点ALTERSYSTEMADDRAFT NODECJC_SHADOWSHADOW_COPYTRUEARCH_DEST_IP192.168.244.200ARCH_DEST_PORT61101;-- 查看影子副本状态SELECTINSTANCE_NAME,SHADOW_COPY,LOG_SEQ,STORAGE_USED_MBFROMV$RAFT_NODE_INFO;-- 输出-- INSTANCE_NAME SHADOW_COPY LOG_SEQ STORAGE_USED_MB-- CJC_SHADOW TRUE 3397 128-- CJC FALSE 3397 51200-- CJC01 FALSE 3397 51200影子副本特点存储占用仅为正常副本的1%以下仅存储日志不存储数据页可正常参与选举投票保证选举多数可快速转为正常副本全量数据同步后升级6.2 应用场景成本敏感场景用低配置服务器部署影子副本降低硬件投入** witness节点**作为见证者参与投票提升集群容错能力快速扩容影子副本升级为正常副本无需重新初始化七、DMAFC vs DMDataWatchDMAFC并非取代DMDataWatch而是并存互补对比维度DMAFCDMDataWatch核心协议Raft共识主备同步组件依赖无额外组件dmwatcher dmmonitor切换方式自动选举监视器切换/自动切换RPO0强一致0~秒级取决于模式RTO秒级秒级~分钟级扩展性最多9副本1主8备读写分离不支持支持适用场景强一致容灾、两地三中心读写分离、常规容灾选型建议需要强一致性、跨地域自动切换 →选DMAFC需要读写分离、常规主备容灾 →选DMDataWatch八、部署实践8.1 最小三节点部署# dmarch.ini 配置示例节点1 XMAL_HB_INTERVAL 5 RAFT_HB_INTERVAL 150 RAFT_VOTE_INTERVAL 3000 XMAL_IP 192.168.244.159 XMAL_PORT 61101 RAFT_SELF_ID 1 [ARCHIVE_RAFT1] ARCH_TYPE RAFT ARCH_DEST CJC01 ARCH_DEST_IP 192.168.244.158 ARCH_DEST_PORT 61101 ARCH_DEST_ID 2 [ARCHIVE_RAFT2] ARCH_TYPE RAFT ARCH_DEST CJC02 ARCH_DEST_IP 192.168.244.170 ARCH_DEST_PORT 61101 ARCH_DEST_ID 38.2 监控巡检-- 查看集群整体健康度SELECTCLUSTER_NAME,HEALTH_SCORE,LEADER_NODE,ACTIVE_NODESFROMV$RAFT_CLUSTER_HEALTH;-- 输出-- CLUSTER_NAME HEALTH_SCORE LEADER_NODE ACTIVE_NODES-- AFC_CLUSTER 100 CJC 3/3-- 查看复制延迟告警SELECTINSTANCE_NAME,LAG_SEQ,LAG_MS,ALERT_LEVELFROMV$RAFT_REPL_LAGWHERELAG_SEQ10;九、总结与展望达梦DM9的DMAFC自治容灾集群通过将Raft共识机制引入集中式数据库容灾领域实现了三大突破架构极简无需守护进程、监视器、第三方仲裁数据库内核原生自治切换自治故障检测、Leader选举、数据同步全自动完成RPO0、RTO秒级场景扩展原生支持两地三中心、影子副本降本覆盖金融核心等高要求场景DMAFC与DMDataWatch的并存互补体现了达梦两条腿走路的产品策略——无论强一致自治容灾还是读写分离主备容灾用户都能找到最优解。随着国产数据库在金融、电信、能源等关键行业的深入应用DMAFC的全自动驾驶能力将成为核心系统高可用的标配方案。作者注本文基于达梦DM9公开技术资料、官方部署指南以及Raft共识算法原理论述撰写深入解析了DMAFC自治容灾集群的设计原理和实现机制。文中配置示例基于DM9语法实际部署时请参考官方最新文档。标签#达梦数据库 #达梦同行者征文 #DM9 #DMAFC #Raft #自治容灾 #高可用转载自https://blog.csdn.net/u014727709/article/details/164498162欢迎 点赞✍评论⭐收藏欢迎指正
返回列表