重启个别群集成员时出现Jgroups群集中断

问题描述:

当群集成员重新启动时,我们遇到了jgroups群集相互松动的问题。 我们在集群中有13个节点,它们都在同一个子网中。重新启动4个节点时,整个集群发生故障。所有的成员都不再相互认识,现有的没有重启的成员也没有找到对方。重启个别群集成员时出现Jgroups群集中断

我们开始获取可疑消息,并没有收集所有方应答

0; 33mWARN [传入-1,广播节点-12] [GMS]节点-12:未能收集所有的ACK(预期= 11 )在2000ms后查看[node-12 | 27],缺少来自节点12,节点4,节点6,节点13,节点11,节点2,节点7,节点8节点的11个ACK -9,node-0,node-3

0; 33mWARN [INT-2,broadcast-node-12] [FD] node-12:我被node-5怀疑;忽略SUSPECT消息并发回HEARTBEAT_ACK如果配置中存在任何问题,请告诉我们PFB我们正在使用的配置。我们正在使用3.4.1.JGroups的最终版本

<TCP loopback="true" 
recv_buf_size="${tcp.recv_buf_size:20M}" 
send_buf_size="${tcp.send_buf_size:640K}" 
discard_incompatible_packets="true" 
max_bundle_size="64K" 
max_bundle_timeout=“5" 
enable_bundling="true" 
use_send_queues="true" 
sock_conn_timeout="300" 
timer_type="new" 
timer.min_threads="4" 
timer.max_threads="10" 
timer.keep_alive_time="3000" 
timer.queue_max_size="500" 
thread_pool.enabled="true" 
thread_pool.min_threads="1" 
thread_pool.max_threads="10" 
thread_pool.keep_alive_time="5000" 
thread_pool.queue_enabled=“true" 
thread_pool.queue_max_size="100000" 
thread_pool.rejection_policy="discard" 
oob_thread_pool.enabled="true" 
oob_thread_pool.min_threads="1" 
oob_thread_pool.max_threads="8" 
oob_thread_pool.keep_alive_time="5000" 
oob_thread_pool.queue_enabled="false" 
oob_thread_pool.queue_max_size="100" 
oob_thread_pool.rejection_policy="discard" 
bind_addr="${jgroups.bind_addr}" 
bind_port="${jgroups.bind_port}" /> 

<JDBC_PING connection_driver="${database.driver}" 
      connection_password="${database.password}" 
      connection_username="${database.user}" 
      connection_url="${database.url}" 
      initialize_sql="${jgroups.schema}" 
    datasource_jndi_name="${datasource.jndi.name}"/> 

    <MERGE2 min_interval="10000" max_interval="30000" /> 
    <FD_SOCK /> 
    <FD timeout="3000" max_tries="3" /> 
    <VERIFY_SUSPECT timeout="1500" /> 
    <BARRIER /> 
    <pbcast.NAKACK use_mcast_xmit="false" exponential_backoff="500" discard_delivered_msgs="true" /> 
    <UNICAST2 /> 
    <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="4M" /> 
    <pbcast.GMS print_local_addr="true" join_timeout="3000" view_bundling="true" /> 
    <UFC max_credits="20M" min_threshold="0.4" /> 
    <MFC max_credits="20M" min_threshold="0.4" /`enter code here`> 
    <FRAG2 frag_size="60K" /> 
    <pbcast.STATE_TRANSFER /> 

如何重新启动节点?通过杀死他们,或通过正常关机(=群集休假)? 一些评论您的配置:

  • 常规线程池只有1个正在运行的线程,直到队列已满(100000元),因此可能会有相当的队列中等待几个邮件。我建议禁用队列(thread_pool.queue_enabled=“false"),或增加最小数量的线程和/或减少队列的大小(比如100)

  • 尝试TCPPING代替JDBC_PING,只是为了看看这有助于

  • 使用MERGE3而不是MERGE2

  • 使用NAKACK2而不是NAKACK。一般来说,我建议使用udp.xml附带您使用的JGroups版本,并应用我上面的建议。这可以防止您使用旧的协议。

  • 使用FD_ALL,而不是FD

  • 20M的最大学分是太多MFC/UFC和有效地使流量控制的目的。

而且运行probe.sh(检查细节JGroups的手册)获取关于各种协议,例如信息在运输(TCP)线程池的使用,在FD_ALL

希望THI怀疑帮助,

+0

感谢贝拉。使用TCPPING,它解决了问题 –

+0

很高兴听到这帮助。你的线程池配置仍然是有效的单线程,但... –