首页 > 解决方案 > 如何向现有的 Apache 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 实例以再次运行上述代码?

标签: javaignite

解决方案


基本上,您不需要将此地址“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


推荐阅读