`

JGroups使用过程中出现的问题及追踪

阅读更多

可参考的资料1:

http://community.jboss.org/wiki/FDVersusFDSOCK

 

看完资料之后,自己作了实验。

GMS的失效检测推荐使用FD + FD_SOCK,如果有多个节点同时失效,最好使用FD_ALL+FD_SOCK。

其实比较有用的是使用FD_SOCK + KEEP_ALIVE + ALIVE_INTERNAL_TIME,遗憾的是,FD_SOCK有个参数KEEP_ALIVE,却没有设置ALIVE_INTERNAL_TIME的地方,导致FD_SOCK检测方式形同虚设,好多时候都是kill -9方式杀掉java进程,根本不可能gracefully.由于操作系统缺省的tcp ALIVE_INTERNAL_TIME=7200s,所以很要命的问题啊。

 

bela ban推荐:

<FD timeout="60000" max_tries="5" down_thread="false" up_thread="false" />
<FD_SOCK down_thread="false" up_thread="false"/>

 

 

关于FD_ALL:

Per Bela, UDP based stacks should use FD_ALL instead of FD. TCP based stacks should not.

FD_ALL works better in cases where X > 1 nodes fail; with FD it will take X * the failure timeout to suspect the Xth node. E.g. 3 nodes C, D, E fail, 30 sec failure timeout, it will be 90 secs before the failure of E is discovered.

 

参考https://issues.jboss.org/si/jira.issueviews:issue-html/JGRP-195/JGRP-195.html

https://issues.jboss.org/si/jira.issueviews:issue-html/JBAS-3004/JBAS-3004.html

https://issues.jboss.org/si/jira.issueviews:issue-html/JBAS-3003/JBAS-3003.html

https://issues.jboss.org/si/jira.issueviews:issue-html/JBAS-6604/JBAS-6604.html

https://issues.jboss.org/si/jira.issueviews:issue-html/JGRP-937/JGRP-937.html


 

最后总结:

项目中使用的oscache + jgroups在启动时偶尔会卡住,主要是因为FD_SOCK没有有效检测到leader失效导致新启动的服务获取一个失效的port,GMS join... retrying的死循环导致。现在配置调整如下:

PING(timeout=2000;num_initial_members=3):\
MERGE2(min_interval=5000;max_interval=10000):\
FD_SOCK(down_thread=false;up_thread=false):\
FD(timeout=20000;max_tries=3;shun=false;down_thread=false;up_thread=false):\
VERIFY_SUSPECT(timeout=1500):\
pbcast.NAKACK(gc_lag=50;retransmit_timeout=300,600,1200,2400,4800;max_xmit_size=8192):\
UNICAST(timeout=300,600,1200,2400):\
pbcast.STABLE(desired_avg_gossip=20000):\
FRAG(frag_size=8096;down_thread=false;up_thread=false):\
pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=true)

即是这样修改之后,如果在FD检测有效期内,20*4=80秒,重新加入的节点,仍然会去联结失效的leader,但是过段时间之后就会正常,如果在leader之后很多节点同时失效,这个时间会比较长。可根据实际情况调整时间,如果每次都是大量实效,还是使用FD_ALL比较好。

分享到:
评论

相关推荐

    Jgroups中的UNICAST3协议中文翻译

    4. acks 有延时:如果 B 发送的 ACK 消息 5,8,13,52,62,83 和 101 到 A 有 1 秒的过程中(及最小时间为 500ms),那么也许我们会有效地只发送 ACK(52)和 ACK(101)至 A,并删除其他的 ACK 在接收端,ACK ...

    Jgroups 教程

    JGroups可以从官方网站下载,对于本教程,我们将使用JGroups 2.5版本的二进制包,即`JGroups-2.5.0.bin.zip`。值得注意的是,JGroups 2.5要求至少使用JDK 1.5或更高版本。 解压`JGroups-2.5.0.bin.zip`到目录`...

    JavaEE源代码 jgroups-2.2.8

    JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 ...

    Ehcache通过Jgroups做集群

    在`EhcacheClusterDemo`这个示例项目中,可能包含了配置文件和示例代码,用于展示如何使用Ehcache和Jgroups实现集群。可以深入研究这些示例,了解如何在实际项目中应用这些配置和代码。 集群配置对于大型分布式系统...

    jgroups-3.0.2

    其是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种...

    JGroups_集群.pdf

    在JGroups中,消息传输可以保证可靠性,即消息在传输过程中不会丢失,所有的接收者以相同的顺序接受所有的消息,并且原子性,即一个消息要么被所有的接收者接收,要么不被任何一个接收者都接收。 JGroups的主要功能...

    jgroups-2.2.7.jar

    jgroups-2.2.7.jar jgroups-2.2.7.jar

    jgroups.part1

    jgroups.part1

    jgroups官方帮助文档html格式打包2.X版本

    JGroups中的组成员管理是其核心功能之一。PING协议用于节点间的发现和心跳检测,确保了组成员的实时更新。FD(Failure Detection)协议则负责检测并隔离故障节点,保证组内的健康运行。 四、消息传输与一致性 ...

    JGroups的Raft实现jgroups-raft.zip

    jgroups-raft 项目是 JGroups 框架对 Raft 的实现。Maven:&lt;groupId&gt;org.jgroups &lt;artifactId&gt;jgroups-raft &lt;version&gt;0.2&lt;/version&gt;Raft 是一个容易理解的共识算法。在容错和性能方面它相当于 Paxos(Google 的一致...

    jgroups源代码

    JGroups是一个用于构建高可用性集群的Java框架,它提供了可靠的消息传递、组成员管理和故障检测等功能,广泛应用于分布式系统中。本文将基于belaban-JGroups-19d7183版本的源代码,深入探讨JGroups的核心机制和关键...

    jgroups-3.2

    其是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种...

    jgroups

    JGroups可在其官方SourceForge页面下载,对于本次教程,我们将使用二进制版本的JGroups 2.5。下载的ZIP文件名为`JGroups-2.5.0.bin.zip`。请注意,JGroups 2.5要求JDK版本为1.5或更高。 解压缩`JGroups-2.5.0.bin....

    JGroups-jdk.zip_jgroups

    在本文中,我们将深入探讨JGroups的核心特性、工作原理以及如何利用它来创建可靠的分布式系统。 首先,JGroups的核心功能在于它的组通信能力。一个“组”是由多个成员组成的逻辑集合,每个成员都可以向组内的其他...

    jgroups.part3

    jgroups.part3

    Java多播通讯框架 JGroups

    它提供了一套全面的协议栈,能够处理网络中的节点发现、消息传递、故障检测和恢复等问题,从而使得开发分布式应用变得更加简单。在深入探讨JGroups之前,我们先了解一些基本概念。 **多播通讯**: 多播是一种网络...

    JGROUPS集群框架源码分析之消息发送、处理、接收

    在JGROUPS中,消息发送是通过`Channel`接口完成的。用户可以通过调用`Channel.send()`方法发送一个消息到集群中的其他节点。此过程涉及到以下几个关键步骤: - **消息构造**:首先,你需要创建一个`Message`对象,...

    jgroups-2.6.8.GA.jar

    jgroups-2.6.8.GA.jar jgroups-2.6.8.GA.jar

Global site tag (gtag.js) - Google Analytics