Apache Ignite(GridGain)如何无停机完成生产环境缓存配置迁移
Apache Ignite 生产环境不停服缓存配置&结构迁移方案
一、缓存配置(新增备份数)滚动更新步骤
Ignite不支持直接调用getOrCreateCache覆盖已存在的缓存配置,否则会触发配置冲突异常,新增备份配置需按滚动重启流程操作:
- 第一步:先验证当前集群状态,确保所有节点在线、分区完全平衡,无异常告警
- 第二步:逐个滚动更新服务端节点:
- 停止单台服务节点,替换节点上的缓存配置为新增
setBackups(1)、setReadFromBackup(true)后的版本后重启节点 - 等待该节点重新加入集群,且分区重平衡100%完成后,再操作下一个服务节点,直到所有服务端节点更新完毕
- 停止单台服务节点,替换节点上的缓存配置为新增
- 第三步:逐个滚动更新所有接入的厚客户端微服务,替换为新的缓存配置代码
- 第四步:验证配置生效:调用
ignite.cache("MyCacheName").getConfiguration(CacheConfiguration.class),确认全局缓存的备份数、读备份配置已更新为目标值
二、实体类新增字段滚动更新步骤
本次新增字段属于Java序列化兼容变更,无需清空原有缓存数据,操作流程如下:
- 第一步:先更新所有服务端节点的
MyCache类,逐个滚动重启服务端节点,每次重启完成后等待节点加入集群、重平衡结束再操作下一个节点 - 第二步:逐个滚动重启所有客户端微服务,替换为新增了
userEmail字段的MyCache类 - 第三步:如果需要让新增字段支持SQL查询,执行动态DDL语句新增字段:
若该字段需要加索引,可同步执行ALTER TABLE MySchemaName.MyCacheName ADD COLUMN user_email VARCHAR;CREATE INDEX idx_user_email ON MySchemaName.MyCacheName(user_email); - 第四步:功能验证:写入带
userEmail字段的新数据,可正常通过SQL查询返回该字段值,原有旧数据的对应字段返回null即为正常
操作注意事项
- 操作全程不要修改缓存名、SQL schema、原子性模式这类非兼容配置,否则会触发集群节点配置冲突
- 滚动重启每个节点前,必须确认上一个操作的节点已完全加入集群、分区100%平衡,避免数据丢失风险
- 首次开启备份的重平衡过程会占用部分集群带宽,建议在业务低峰期执行操作
内容的提问来源于stack exchange,提问作者Ildar Zaripov
相关产品推荐
相关产品推荐

