java - 如何向现有的 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 实例以再次运行上述代码?
解决方案
基本上,您不需要将此地址“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
推荐阅读
- python - Groupby 与 pandas 并获取连接行
- webpack - 将 source-map 设置为 webpack 的 devtool 是否会增加生产中的构建大小?
- oracle - 程序中的参数列表
- c++ - C ++如何删除向量中的节点
- oracle - xsd 格式数字,小数点后 5 位
- python - 如何在while循环内的列表中用新项目替换旧项目
- stm32 - I2c通信stm32f3我该如何解决?
- javascript - 模态的谷歌地图只显示灰色,双击后显示
- java - 我无法实现 OnTouchListener 来拖动弹出窗口
- css - 如何阻止文本跳下它自己的行