在我的Apache Ignite 2.3集群中,我想运行一个节点(将来可能有两个用于备份),我的复制缓存在磁盘上是持久的 . 我需要确保此节点始终处于启动状态,而其他缓存节点没有持久配置,因此只能在内存中访问缓存 . 这些非持久性节点可以按需进出,因为它们用于计算但不用于存储数据 .
连接非持久性节点时,持久性节点发生故障时会发生什么?理想情况下,缓存应该在整个集群中消失,但事实并非如此 . 所有节点继续在内存中使用缓存 . 但这意味着新数据将永远不会在磁盘上,并在群集重启后消失 . 我的配置混合持久性/非持久性节点不常见吗?我如何保持这种类型的集群一致?
任何背景帮助赞赏 .
3 回答
这是不可能的;在缓存级别启用了持久性,因此部署此缓存的所有节点都会将数据保留到磁盘 .
而且,我认为你不会从这种部署中受益 . 如果它是复制的缓存并且您启动了一个新节点,则需要先将数据复制到此新节点,然后才能在内存中使用 . 在重新 balancer 尚未完成之前,您将对此数据进行远程调用 . 从磁盘加载它不会慢,可能会快得多 .
您可以为缓存配置设置节点筛选器并排除计算节点:
https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CacheConfiguration.html#setNodeFilter(org.apache.ignite.lang.IgnitePredicate)
因此缓存将仅存储在您定义的特定节点集上 .
要明确点燃实例,可以在点燃配置中使用用户属性:https://apacheignite.readme.io/docs/cluster#section-cluster-node-attributes
您可以将缓存配置为仅存储在单个节点上 . 因此,当它关闭时,缓存停止运行 . 可以使用node attributes和node filter来完成 .
但在此配置中,每个请求都将发送到单个节点,从而使其他节点的工作变慢 . 如果您想避免它,请考虑使用near cache .