启用原生持久化的GridGain Server集群重启后分区丢失解决方案咨询
GridGain GKE集群重启分区丢失适配解决方案
前置校验
- 确认所有GridGain服务端Pod关联的PVC状态正常,执行
kubectl get pvc -n <gridgain命名空间>,确认所有PVC状态为Bound,无挂载失败、权限错误问题 - 进入任意服务端Pod的GridGain工作目录,执行
./control.sh --baseline,确认基线拓扑包含全部3个服务端节点,无节点异常移出基线 - 执行
./control.sh --cache list,确认所有缓存的备份数配置为1,和预设配置一致
分区重置操作步骤
操作前置要求:提前对3个服务端节点的PV做全量快照备份,避免操作异常导致数据不可逆损坏
- 先停止所有3个客户端节点,避免操作过程中业务流量写入引发数据不一致:
kubectl scale deployment <客户端Deployment名称> --replicas=0 -n <gridgain命名空间> - 若当前集群仍处于运行状态,执行优雅关闭命令,确认所有服务端进程完全退出后再逐个重启3个服务端节点,启动完成后等待3分钟让集群完成拓扑协商
- 执行分区重置命令,自动修复丢失的分区:
./control.sh --cache reset_lost_partitions --yes - 命令执行完成后,执行索引与数据完整性校验:
./control.sh --cache validate_indexes - 执行
./control.sh --cache metrics查看分区状态,确认lost_partitions数值为0,所有分区分配正常 - 恢复客户端节点,验证业务读写正常:
kubectl scale deployment <客户端Deployment名称> --replicas=3 -n <gridgain命名空间>
后续优化配置,避免问题复现
- 原有
shutdownPolicy已配置为<property name="shutdownPolicy" value="GRACEFUL"/>,在此基础上调整服务端Pod的terminationGracePeriodSeconds参数为120秒以上,确保优雅关闭逻辑完全执行,避免进程被K8s强制杀死导致持久化数据损坏 - 新增基线拓扑自动调整配置,避免节点重启后基线不匹配引发分区丢失:
<property name="autoAdjustBaselineTopology" value="true"/> <property name="baselineTopologyAutoAdjustTimeout" value="300000"/> - 配置监控告警,针对
gridgain_cache_partitions_lost指标设置阈值告警,数值大于0立即触发告警,提前发现分区异常
内容的提问来源于stack exchange,提问作者Nuwan Sameera
相关产品推荐
相关产品推荐

