重启个别群集成员时出现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怀疑帮助,
感谢贝拉。使用TCPPING,它解决了问题 –
很高兴听到这帮助。你的线程池配置仍然是有效的单线程,但... –