使用混合的持久性/非持久性缓存节点点燃集群

时间:2017-12-02 22:58:12

标签: java ignite

在我的Apache Ignite 2.3集群中,我想运行一个节点(将来可能有两个节点用于备份),我的复制缓存在磁盘上是持久的。我需要确保此节点始终处于启动状态,而其他缓存节点不具有持久配置,因此只能在内存中访问缓存。这些非持久性节点可以按需进出,因为它们用于计算,但不能用于存储数据。

当连接非持久性节点时,持久性节点出现故障会发生什么?理想情况下,缓存应该消除整个群集,但它不会。所有节点继续在内存中使用缓存。但这意味着新数据将永远不会在磁盘上,并在群集重启后消失。 我的配置混合持久性/非持久性节点不常见吗?我如何保持这种类型的集群一致?

感谢任何背景帮助。

3 个答案:

答案 0 :(得分:2)

您可以将缓存配置为仅存储在单个节点上。因此,当它关闭时,缓存停止运行。可以使用node attributesnode filter来完成。

但是在此配置中,每个请求都将被发送到单个节点,从而减慢了其他节点的工作量。如果您想避免使用,请考虑使用near cache

答案 1 :(得分:1)

您可以为缓存配置设置节点过滤器并排除计算节点:

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

答案 2 :(得分:0)

这是不可能的;在缓存级别启用了持久性,因此部署此缓存的所有节点都会将数据保留到磁盘。

此外,我认为你不会从这种部署中受益。如果它是复制的缓存并且您启动了一个新节点,则需要先将数据复制到此新节点,然后才能在内存中使用。在重新平衡尚未完成之前,您将对此数据进行远程调用。从磁盘加载它不会慢,可能会快得多。