我正在尝试使用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已经在地址A和B中运行,这两个地址都存在于memberStrings中。拓扑快照看起来像
Topology snapshot [ver=1, servers=2, clients=0, CPUs=8, offheap=4.5GB, heap=3.6GB]
假设我在输入文件中添加了一个新地址“ C”。我有一个正在运行的线程,它可以检测到此更改并在memberStrings中进行更改。如何确保拓扑中也存在C,而无需停止并重新启动ignite实例以再次运行上述代码?
答案 0 :(得分:2)
基本上,您不需要将此地址“ C”添加到第一个节点的配置中。在启动时,节点C将尝试连接到其列表中的所有地址,并且不需要在节点“ A”的配置中使用其地址。因此,该节点将毫无问题地加入集群。
在某些情况下,使用'shared'标志可以在所有节点之间共享所有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