Infinispan 集群在网络问题后无法恢复并重新加入集群

问题描述 投票:0回答:1

我正在使用 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 分钟时,将发生以下情况。

  1. 集群 A - 配置的 45 秒内怀疑节点 X,然后将其从 VIEW 中移除。

TCP 连接被移除。 群集 A VIEW {A} 集群 B 节点 X VIEW {X}

  1. Cluster B 中的节点 Y 成为协调器并向 Cluster A 节点发送 JOIN_REQ。

节点 Y 与集群 A 节点建立了 tcp 连接。

集群 A VIEW {A, Y} 集群 B 节点 Y VIEW {A, Y}

  1. 但是一旦节点 X 网络连接起来,节点 Y 就放弃其协调器角色并向集群 A 节点发送 LEAVE_REQ。 tcp 连接已断开。 群集 A VIEW {A} 集群 B 节点 X VIEW {X}

现在我期望节点 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 连接?

infinispan jgroups
1个回答
0
投票

<MERGE3 .../>
在第二个配置中缺失,这可以解释为什么节点
X
没有再次重新连接。

© www.soinside.com 2019 - 2024. All rights reserved.