java - 如何向现有 Apache Ignite 实例添加新主机?

标签 java ignite

我正在尝试使用 Apache Ignite 的一些示例。我以这种格式为我的 Ignite 节点提供地址

ipFinderTcpIp.setAddresses(memberStrings); // ipFinderTcpIp is of TcpDiscoveryVmIpFinder class
spi.setIpFinder(ipFinderTcpIp); //spi is of TcpDiscoverySpi class 
config.setDiscoverySpi(spi); //config is of IgniteConfiguration class
//memberStrings contains the ipv4 addresses in String format. It is a collection. 

Ignite ignite = Ignition.start(config);

memberStrings 的值取自输入文件 我想动态添加一个地址到 ignite 节点。为了简单起见,我们假设 ignite 已经在地址 A 和 B 中运行,这两个地址都存在于 memberStrings 中。拓扑快照如下所示

Topology snapshot [ver=1, servers=2, clients=0, CPUs=8, offheap=4.5GB, heap=3.6GB]

假设我向输入文件添加了一个新地址“C”。我有一个正在运行的线程,它检测到此更改并在 memberStrings 中进行更改。我如何确保 C 也存在于拓扑中,而无需停止并重新启动 ignite 实例以再次运行上述代码?

最佳答案

基本上,您不需要将此地址“C”添加到第一个节点的配置中。在启动时,节点 C 将尝试连接到其列表中的所有地址,并且不需要在节点“A”的配置中包含其地址。因此,该节点将毫无问题地加入集群。

在某些情况下,使用“共享”标志在所有节点之间共享所有 IP 地址可能很有用:https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinder.html#setShared-boolean- 即,该标志可用于客户端 - 在重新连接时,它将尝试重新连接到集群中的所有节点。

此外,如果您在开始之前不知道所有地址,您可以使用 IpFinder 的其他实现:https://apacheignite.readme.io/docs/tcpip-discovery

关于java - 如何向现有 Apache Ignite 实例添加新主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51247587/

相关文章:

c# - Apache Ignite .Net 客户端服务器连接

c# - Apache ignite 缓存查看器(如 Redis 桌面管理器)

java - 从 OpenGL ES 开始。使用像素绘图

java - .replace 用符号替换输入字母

java映射FileChannel实现

java - Canvas 到图像绘制不成功

java - 仅查询 Apache Ignite 的缓存以获取本地备份条目

c++ - Apache 点燃 v2.7 : Can't build linux ODBC driver - inline variable compile error

java - Ignite集群不同启动时间

java - DdlUtils:推迟插入