背景:
AppV1
在NodeA
上运行并处理用户请求时,我启动AppV2@NodeB
,对其进行预热并将用户请求重定向到它。目标是让NodeB
复制所有内容来自NodeA
的会话)意向
org.apache.ignite.IgniteSpringBean
TcpDiscoveryMulticastIpFinder
在本地运行我的应用程序时,它可以完美运行。即使没有启动NodeA
,也会启动NodeB
。当我启动NodeB
时,它顺利地加入了集群,并且节点彼此连接并且可以完美通信。这里最重要的是,我可以随时启动和停止节点,并且可以使用Ignite消息传递进行无阻塞的无错误操作。 问题
TcpDiscoveryVmIpFinder
),这没关系-每个节点都有一种静态主机名。 但是现在会在NodeA
启动时阻塞,直到连接到NodeB
为止。而且如果NodeB
不存在,整个应用程序将崩溃(难以部署)。 问题是
如何使其在方案中工作
TcpDiscoveryVmIpFinder
NodeA
启动(而NodeB
未启动)NodeA
可以正确操作任何时间(当然,我无法将消息发送到遥控器,因为没有连接遥控器-没关系)NodeB
启动NodeA
和NodeB
相互查找并彼此通信(主要用于会话复制和其他消息)NodeA
已停止NodeB
继续正常运行,可满足用户请求NodeA
变成NodeB
,反之亦然;从步骤3重复最佳答案
您很可能错过了与TcpDiscoveryVmIpFinder
相关的一件重要事情。节点A和B都必须在IP查找程序的地址列表中包含自己的IP地址。此自述文件部分[1]中对此进行了突出显示。
否则,您将陷入节点B必须加入集群而节点A必须等待的情况。
为两个节点都设置此IP查找程序,一切都应按要求工作。
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>hodeA_ip_address_or_host_name:47500..47509</value>
<value>hodeB_ip_address_or_host_name:47500..47509</value>
</list>
</property>
</bean>
[1] https://apacheignite.readme.io/docs/cluster-config#static-ip-based-discovery