我正在使用 jgroups-4.0.12.Final.jar 和 infinispan-core-9.3.0.
面临网络故障后集群视图无法恢复的问题。
集群 A 有单个节点。
集群 B - 3 个节点 节点 X - 协调器 节点 Y 和节点 Z 已启动。
在集群 A 节点和集群 B 节点 X 处的初始 VIEW {A, X}。 集群 B 节点与集群 B 中的节点 X 建立了 tcp 连接。
现在,当节点 X 遇到网络故障,持续 2 分钟时,将发生以下情况。
TCP 连接被移除。 群集 A VIEW {A} 集群 B 节点 X VIEW {X}
节点 Y 与集群 A 节点建立了 tcp 连接。
集群 A VIEW {A, Y} 集群 B 节点 Y VIEW {A, Y}
现在我期望节点 X 将 JOIN_REQ 发送到集群 A 或者可能是合并?但除非我重新启动节点 X,否则它不会发生。 我看到节点 Y 成为永久协调员。
Intracluster 集群 B 配置
<config xmlns="urn:org:jgroups" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups-4.0.xsd">
<TCP bind_addr="X" bind_port="7900" enable_diagnostics="false" max_bundle_size="64K" port_range="1" recv_buf_size="20M" send_buf_size="640K" sock_conn_timeout="300" thread_naming_pattern="pl" thread_pool.enabled="true" thread_pool.keep_alive_time="60000" thread_pool.max_threads="60" thread_pool.min_threads="2"/>
<TCPPING ergonomics="false" initial_hosts="X[8700],Y[8700],Z[8700]" port_range="1"/>
<MERGE3 max_interval="30000" min_interval="10000"/>
<FD_SOCK port_range="1" start_port="8702"/>
<FD max_tries="3" timeout="15000"/>
<VERIFY_SUSPECT num_msgs="2" timeout="10000"/>
<pbcast.NAKACK2 discard_delivered_msgs="false" max_rebroadcast_timeout="3000" use_mcast_xmit="false" xmit_interval="1000" xmit_table_max_compaction_time="10000" xmit_table_msgs_per_row="10000" xmit_table_num_rows="100"/>
<UNICAST3 conn_expiry_timeout="0" xmit_interval="500" xmit_table_max_compaction_time="10000" xmit_table_msgs_per_row="10000" xmit_table_num_rows="20"/>
<pbcast.STABLE desired_avg_gossip="50000" max_bytes="1M" stability_delay="1000"/>
<pbcast.GMS join_timeout="7000" print_local_addr="false" view_bundling="true"/>
<UFC max_credits="2m" min_threshold="0.40"/>
<MFC max_credits="2m" min_threshold="0.40"/>
<FRAG2 frag_size="30k"/>
<RSVP ack_on_delivery="false" resend_interval="500" timeout="60000"/>
<relay.RELAY2 async_relay_creation="true" config="/usr/local/symplified/etc/xsite_relay2_config.xml" relay_multicasts="false" site="EG"/>
</config>
集群配置
<config xmlns="urn:org:jgroups" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups-4.0.xsd">
<TCP bind_addr="X node IP" bind_port="8700" enable_diagnostics="false" max_bundle_size="64000" port_range="1" recv_buf_size="20000000" send_buf_size="640000" sock_conn_timeout="300" thread_pool.enabled="true" thread_pool.keep_alive_time="5000" thread_pool.max_threads="8" thread_pool.min_threads="1"/>
<TCPPING ergonomics="false" initial_hosts="A[8700],X[8700],Y[8700],Z[8700]" port_range="0"/>
<MERGE3 max_interval="30000" min_interval="10000"/>
<FD_SOCK/>
<FD max_tries="3" timeout="15000"/>
<VERIFY_SUSPECT num_msgs="3" timeout="10000"/>
<pbcast.NAKACK2 discard_delivered_msgs="true" max_rebroadcast_timeout="3000" use_mcast_xmit="false" xmit_interval="1000" xmit_table_max_compaction_time="30000" xmit_table_msgs_per_row="10000" xmit_table_num_rows="100"/>
<UNICAST3 conn_expiry_timeout="0" xmit_table_max_compaction_time="30000" xmit_table_msgs_per_row="2000" xmit_table_num_rows="100"/>
<pbcast.STABLE desired_avg_gossip="50000" max_bytes="8m" stability_delay="1000"/>
<pbcast.GMS join_timeout="3000" print_local_addr="false"/>
<UFC max_credits="4M" min_threshold="0.1"/>
<MFC max_credits="4M" min_threshold="0.2"/>
<FRAG2 frag_size="60000"/>
<RSVP ack_on_delivery="false" resend_interval="500" timeout="60000"/>
</config>
我是否缺少任何可以帮助节点 X 重新同步其视图并将 JOIN_REG 再次发送到集群 A 节点的配置?或者让节点 Y 成为永久协调器并与集群 A 节点建立 tcp 连接?
<MERGE3 .../>
在第二个配置中缺失,这可以解释为什么节点 X
没有再次重新连接。