【问题标题】:Is it possible to change hazelcast cluster member(s) during runtime是否可以在运行时更改 hazelcast 集群成员
【发布时间】:2020-04-22 19:00:13
【问题描述】:
有 4 个虚拟机的 hazelcast 集群。
是否可以在运行时将其成员更改为 localhost(无需重新启动)?
即现在所有 4 个虚拟机都将以 127.0.0.1:5701 运行
反之亦然。所有 4 个虚拟机都使用 localhost 运行,并在运行时将它们带入集群。
通过触发一些事件并执行以下语句:
hazelcastInstance.getConfig().getNetworkConfig().getJoin().getTcpIpConfig().setMembers(members)
如果是,它的影响是什么?当使用 hazelcast 缓存数据处理请求时。
【问题讨论】:
标签:
java
caching
hazelcast
【解决方案1】:
大多数情况下,配置必须在集群启动前全部设置好,集群运行时对配置所做的更改不会生效。
(例外:可以将某些数据结构配置更改添加到正在运行的集群中;有关如何动态添加配置,请参阅参考手册中的配置部分)。
因此,您无法以显示的方式更改配置。
但是,根据集群中的配置设置方式,您可以添加其他成员,只要它们符合最初为加入配置建立的条件即可。因此,如果 localhost 与 join 元素的 tcpip 配置部分的条件匹配,那么您可以在 localhost 上启动一个或多个节点,它们将加入集群。当你让这些运行时,你可以一次关闭一个非本地主机成员,直到唯一运行的节点是本地主机上的节点。当每个节点关闭时,其数据将迁移到其余节点,这些节点最终都会在 localhost 上。
在每个时间点,Hazelcast 都会根据当前节点成员集响应请求——在任何时候,都会有一个节点是任何特定数据的所有者;随着各种数据分区从远程集群节点迁移到本地集群节点,所有权将转移到本地节点。