You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PC1宕机后Geode集群整体失效 成员服务报网络分区错误

问题根因分析

该问题是Apache Geode(或基于其二次开发的GemFire)集群默认的*网络分区检测(脑裂保护)*机制触发导致的,核心逻辑如下:

核心机制说明

Geode集群采用加权法定人数(Quorum)算法避免脑裂场景下的数据不一致:

  • 默认权重规则:每个locator节点权重为10,每个server节点权重为1
  • 集群正常服务的前提:存活节点总权重 ≥ 集群总权重的51%
  • 未达法定人数时,集群会主动断开所有客户端连接(包括gfsh连接),停止对外服务,但节点进程不会主动退出,等待法定人数满足后自动恢复

场景匹配分析

你当前的集群总共有2个locator、2个server,总权重为 10+10+1+1=22,法定人数阈值为 22*51%≈11.22,即存活节点权重需要≥12才能维持集群正常运行。

关闭PC2时PC1正常的原因

你是按PC1先启动、PC2后启动的顺序搭建集群,初始启动时PC1的locator1、server1先组成集群,此时集群的存活权重为10+1=11,满足初始集群的法定人数要求。PC2节点加入后总权重更新为22,但由于最先启动的locator1(集群协调者节点)在PC1侧,当PC2离线后,协调者会判定PC2侧的节点失联,剩余PC1侧的节点在协调者存在的场景下会被判定为合法分区,可继续对外服务。

关闭PC1时PC2服务中断的原因

PC1离线后,PC2侧仅剩下locator2+server2,总权重为10+1=11,未达到12的法定人数阈值,因此触发网络分区保护逻辑:

  • 主动断开所有gfsh、业务客户端连接
  • 打印报错日志:Membership Service Failure: Exiting due to possible network partition event due to loss of 2 cache processes
  • 节点进程保留但不对外提供服务,直到PC1侧节点重新上线,总权重满足阈值后恢复服务

修复方案

  • 生产环境建议:新增第三个locator节点,将locator总数变为奇数,此时任意1台PC离线,至少还有2个locator存活,满足超过半数的法定人数要求,不会触发分区熔断
  • 测试环境临时方案:修改gemfire.properties配置,添加enable-network-partition-detection=false关闭网络分区检测,注意该配置会导致脑裂数据不一致风险,禁止在生产环境使用
  • 双节点集群适配方案:手动调高PC1侧locator的权重为11,调整后总权重为23,法定阈值为12,PC1侧总权重为11+1=12刚好达标,PC2侧为10+1=11不达标,符合你当前的容灾预期

内容的提问来源于stack exchange,提问作者Michael Thoresen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:15:00