Apache Ignite高可用:分区+备份配置下节点宕机数据不可用问题咨询
Apache Ignite分区备份容灾配置解决方案
核心问题根因
你当前配置的partitionLossPolicy = READ_ONLY_SAFE是导致节点宕机后查询返回null的主要原因:
READ_ONLY_SAFE策略下,集群检测到有分区的副本所属节点脱离基线拓扑时,会将对应分区标记为不可读,仅当丢失节点回归集群才会恢复访问。节点宕机后如果没有手动调整基线拓扑,即使备份副本还在存活节点上,也会被判定为分区不可用。
正确配置调整方案
1. 缓存配置修改
修改CacheConfiguration中的分区丢失策略,同时显式开启备份节点读取开关:
<bean class="org.apache.ignite.configuration.CacheConfiguration"> <property name="name" value="mycache" /> <property name="cacheMode" value="PARTITIONED" /> <property name="backups" value="1" /> <property name="rebalanceMode" value="SYNC" /> <property name="writeSynchronizationMode" value="FULL_SYNC" /> <!-- 替换原有分区丢失策略 --> <property name="partitionLossPolicy" value="IGNORE" /> <!-- 显式开启从备份节点读取数据 --> <property name="readFromBackup" value="true" /> </bean>
IGNORE策略下,即使出现分区丢失,依然允许访问存活节点上可用的副本数据,符合单节点故障无感知访问的需求。
2. 新增基线拓扑自动调整配置
在IgniteConfiguration层级添加如下配置,纯内存集群开启基线自动调整后,节点上下线时会自动更新基线,避免手动操作遗漏导致的分区不可用:
<property name="baselineTopologyConfiguration"> <bean class="org.apache.ignite.configuration.BaselineTopologyConfiguration"> <property name="baselineAutoAdjustEnabled" value="true"/> <!-- 自动调整超时时间,单位毫秒,可根据集群规模调整 --> <property name="baselineAutoAdjustTimeout" value="30000"/> </bean> </property>
容灾测试注意事项
- 备份数为1时,必须保证集群至少启动2个节点后再写入数据,否则副本无法分配到其他节点,单节点宕机自然会丢失数据
- 写入完成后等待10~30秒再停止测试节点,确保所有副本数据已完成同步
- 节点停止后等待5~10秒再发起查询,给集群留出故障检测、备份副本提升为主副本的处理时间
内容的提问来源于stack exchange,提问作者vvra
相关产品推荐
相关产品推荐

