标签: jgroups

JGroups,Terracotta和Hazelcast

试图围绕这3个项目,他们似乎都处理尝试集群时出现的稍微不同的问题.但是他们的所有文档都是为那些已经"知情"的开发人员编写的,并且像我这样的新手很难理解.

  • 他们每个人都试图解决的具体问题是什么,这些问题如何相互不同?
  • 每个群集与群集应用服务器(如JBoss或GlassFish的内置群集功能)有何不同?
  • 这些框架解决的问题是否足够不同以保证它们在同一个项目中的使用?或者他们是彼此的竞争对手,因此对相同/类似的问题有不同的解决方案?

提前感谢您对这些好奇但难以捉摸的框架的任何见解!

java terracotta jgroups cluster-computing hazelcast

15
推荐指数
1
解决办法
5601
查看次数

JGroups的替代品

我想在JVM上创建一个分布式应用程序,它有许多节点,需要一个库,允许我:

  • 管理集群/网格成员资格,即我想在休假/加入时收到通知
  • 管理集群成员之间的消息

我找到了两个解决方案:

  • JGroups - 它可以工作,但它看起来是日期而不是广泛使用
  • Akka - 它是基于Scala的,它的集群模块看起来不太成熟

还有其他库可以做同样的事吗?

jgroups distributed-computing akka akka-cluster

15
推荐指数
4
解决办法
8265
查看次数

JBoss 4.2.2节点开始集群然后互相怀疑

我在现有的Red Hat服务器上运行了一个运行JBoss 4.2.2的网站.我正在设置第二台服务器,以便拥有一个群集对(然后将进行负载平衡).但是,我无法让它们成功集群.

现有服务器启动JBoss:

run.sh -c default -b 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

(我知道'默认'配置不支持开箱即用的集群 - 我正在使用它的修改版本,其中包括集群支持.)当我用相同的命令启动第二个JBoss实例时,它形成了自己的集群没有注意到第一个.两者都使用相同的分区名称和多播地址和端口.

我尝试了McastReceiverTest和McastSenderTest程序来检查机器是否可以通过多播进行通信; 他们可以.

然后我注意到http://docs.jboss.org/jbossas/docs/Clustering_Guide/beta422/html/ch07s07s07.html上的信息,说JGroups不能绑定到所有接口,而是绑定到默认接口; 所以大概是它绑定到127.0.0.1,从而没有得到消息.所以我设置实例来告诉JGroups使用内部IP:

run.sh -c default -b 0.0.0.0 -Djgroups.bind_addr=10.51.1.131
run.sh -c default -b 0.0.0.0 -Djgroups.bind_addr=10.51.1.141
Run Code Online (Sandbox Code Playgroud)

(.131是现有服务器,.141是新服务器).

节点现在互相注意并形成一个集群 - 首先.但是,在尝试部署.ear时,服务器日志会说:

2010-08-07 22:26:39,321 DEBUG [org.jgroups.protocols.FD] sending are-you-alive msg to 10.51.1.131:46294 (own address=10.51.1.141:47629)
2010-08-07 22:26:45,412 WARN  [org.jgroups.protocols.FD] I was suspected by 10.51.1.131:48733; ignoring the SUSPECT message and sending back a HEARTBEAT_ACK
2010-08-07 22:26:49,324 DEBUG [org.jgroups.protocols.FD] sending are-you-alive msg to 10.51.1.131:46294 (own address=10.51.1.141:47629)
2010-08-07 22:26:49,324 DEBUG [org.jgroups.protocols.FD] …
Run Code Online (Sandbox Code Playgroud)

jboss jgroups cluster-computing

9
推荐指数
1
解决办法
7770
查看次数

EC2 JGroups Discovery

对于我目前的项目,我们决定在一些Linux机器上将我们的应用程序部署到亚马逊的Elastic Computing Cloud.我们使用JGroups进行组通信,并且需要一种可靠的发现机制,该机制不需要使用其他集群成员的地址预先配置每个应用程序(这对于TCPPING是必需的,并且TCPGOSSIP需要'排序').由于我们不能使用UDP多播,因此从我们的选项中排除了多播发现.

我们研究了使用S3 Ping协议,但在阅读之后发现了一些可靠性问题,我们决定推出自己的协议来完成这一发现.

我希望得到一些关于我们编写的简单协议以及它与S3 Ping的比较的反馈.它目前的一个限制是它依赖于AWS​​ SDK for Java.

public class EC2Ping extends Discovery {

    private static final Logger log = LoggerFactory.getLogger(EC2Ping.class);

    public static final short EC2_PING_PROTOCOL_ID = 1001;
    private static final int DEFAULT_JGROUPS_PORT = 7800;

    static {
        ClassConfigurator.addProtocol(EC2_PING_PROTOCOL_ID, EC2Ping.class);
    }

    /** The JGroups port number */
    private int port = DEFAULT_JGROUPS_PORT;

    /** The EC2 client */
    private AmazonEC2Client client;

    /** The EC2 instance filters */
    private List<Filter> filters;

    public EC2Ping(EC2Ping src) {
        this.client = src.client;
        this.port = src.port; …
Run Code Online (Sandbox Code Playgroud)

java jgroups amazon-ec2 discovery

9
推荐指数
1
解决办法
2467
查看次数

Java集群的经验?

想听听人们关于他们使用java集群的经验(即实现HA解决方案).又名.terracotta,JGroups等.它不一定是网络应用程序.编写自定义独立服务器的经验也很棒.

更新:我将更具体一点 - >对Web App集群不感兴趣(除非它可以拉出并独立运行).我知道它有效.但我们需要的不仅仅是会话聚类.在易于编程,支持的拓扑(即单个数据中心与WAN上),支持的节点数量方面检查解决方案.面临的问题,变通方法.目前,我正在为Terracotta和JGroups做一些POC(概念证明)工作,看看它是否值得为我们的应用程序付出努力(这是独立的,在Web容器之外).

java terracotta jgroups cluster-computing

7
推荐指数
1
解决办法
3678
查看次数

ehcache不能在liferay集群中复制

我有以下设置

1.liferay集群,在AWS上有2台机器

2.通过tcp与JGroups进行单播集群复制

我在portal-ext.properties中有以下参数

#Setup hibernate
net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml

#Setup distributed ehcache
ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-clustered.xml

#
# Clustering settings
#
cluster.link.enabled=true
ehcache.cluster.link.replication.enabled=true
cluster.link.channel.properties.control=tcp.xml
cluster.link.channel.properties.transport.0=tcp.xml
lucene.replicate.write=true

#In order to make use of jgroups
    ehcache.bootstrap.cache.loader.factory=com.liferay.portal.cache.ehcache.JGroupsBootstrapCacheLoaderFactory
ehcache.cache.event.listener.factory=net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory
 ehcache.cache.manager.peer.provider.factory=net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory
net.sf.ehcache.configurationResourceName.peerProviderProperties=file=/myehcache/tcp.xml
ehcache.multi.vm.config.location.peerProviderProperties=file=/myehcache/tcp.xml

cluster.executor.debug.enabled=true
ehcache.statistics.enabled=true
Run Code Online (Sandbox Code Playgroud)

我无法使群集缓存复制正常工作.任何人都可以指出正确的方向吗?如果以后需要,我可以发布更多细节.我还试图修改hibernate-clustered.xml和liferay-multi-vm-clustered.xml,但没有任何作用.

replication jgroups ehcache cluster-computing liferay-6

7
推荐指数
2
解决办法
1万
查看次数

EC2上的JGroups节点虽然看到了彼此,却没有说话

我正在尝试使用Hibernate Search,以便将来自jgroupsSlave节点的Lucene索引的所有写入发送到jgroupsMaster节点,然后使用Infinispan将Lucene索引共享回来.一切都在本地工作,但是当节点在EC2上发现彼此时,它们似乎没有进行通信.

他们都在互相发送你正在发送的消息.

# master output sample
86522 [LockBreakingService,localCache,archlinux-37498] DEBUG org.infinispan.transaction.TransactionTable  - About to cleanup completed transaction. Initial size is 0
86523 [LockBreakingService,LuceneIndexesLocking,archlinux-37498] DEBUG org.infinispan.transaction.TransactionTable  - About to cleanup completed transaction. Initial size is 0
87449 [Timer-4,luceneCluster,archlinux-37498] DEBUG org.jgroups.protocols.FD  - sending are-you-alive msg to archlinux-57950 (own address=archlinux-37498)
87522 [LockBreakingService,localCache,archlinux-37498] DEBUG org.infinispan.transaction.TransactionTable  - About to cleanup completed transaction. Initial size is 0
87523 [LockBreakingService,LuceneIndexesLocking,archlinux-37498] DEBUG org.infinispan.transaction.TransactionTable  - About to cleanup completed transaction. Initial size is 0

# slave output sample
85499 …
Run Code Online (Sandbox Code Playgroud)

java jgroups hibernate-search infinispan

6
推荐指数
1
解决办法
1511
查看次数

如何使用 kubernetes StatefulSet 配置 DNS_PING

我想在 kubernetes 环境中设置一个 inifinispan 集群。

DNS_PING 是发现协议。它适用于使用 DeploymentConfig 设置部署的 pod。但是,当我们将设置从 DeploymentConfig 切换到 StatefulSet 时,它不起作用。

这是因为我们不能直接通过名称(pod name)查询 pod 的 IP,而是使用(pod name).(headless service created)模式。

jgroups 对我来说是新的。感谢有人建议我们如何为这种情况正确配置 DNS_PING。非常感谢。

dns jgroups infinispan kubernetes

6
推荐指数
1
解决办法
1372
查看次数

低延迟消息队列

基本上,我有一个主节点,用于在工作节点之间分配任务。工作人员的数量可能会发生变化,这意味着工作人员无法在服务器端进行硬编码。Master向队列提交一个任务,其中一个worker接收该任务,处理它并返回结果。最关键的方面是低延迟。工作节点上的典型处理时间约为 100-300 毫秒,这意味着消息传递系统不应给处理时间增加明显的延迟。

目前我正在研究请求-响应 JMS 模式。这意味着master将任务提交到共享队列,worker将从队列中取出任务并将结果提交到主节点监听的另一个队列。主人会将响应与请求关联起来。

恐怕JMS可能会给系统带来延迟,这是不可接受的。也许我应该看看其他解决方案?比如 RabbitMQ、JGroups 还是 ZooKeeper?

如果 JMS 适合这里,您能推荐最快的 JMS 代理吗?目前我正在研究ActiveMQ

该解决方案的另一项要求是它应该能够在云端工作

activemq-classic jgroups jms rabbitmq apache-zookeeper

5
推荐指数
1
解决办法
2545
查看次数

Istio (1.0) 内部 ReplicaSet 路由 - 支持 Kubernetes 部署中 Pod 之间的流量

Istio 如何支持同一服务中的 Pod 之间基于 IP 的路由(或者更具体地说是 ReplicaSet)?

我们想在 Istio 网格中部署一个副本 > 1 的 Tomcat 应用程序。该应用程序运行 Infinispan,它使用 JGroups 来整理通信和集群。JGroups 需要识别其集群成员,为此需要使用 KUBE_PING(JGroups 的 Kubernetes 发现协议)。它将通过类似于kubectl get pods的查找来咨询 K8S API 。集群成员既可以是其他服务中的 pod,也可以是同一服务/部署中的 pod。

尽管我们的问题是由相当具体的需求驱动的,但该主题是通用的。我们如何让 pod 能够在副本集内相互通信?

示例:作为展示,我们部署了演示应用程序https://github.com/jgroups-extras/jgroups-kubernetes。相关的东西是:

apiVersion: v1
items:
- apiVersion: extensions/v1beta1
  kind: Deployment
  metadata:
    name: ispn-perf-test
    namespace: my-non-istio-namespace
  spec:
    replicas: 3
< -- edited for brevity -- >
Run Code Online (Sandbox Code Playgroud)

没有 Istio情况下运行,三个 Pod 会相互找到并形成集群。在my-istio-namespace 中使用 Istio部署相同的内容并添加基本服务定义:

kind: Service
apiVersion: v1 …
Run Code Online (Sandbox Code Playgroud)

jgroups infinispan kubernetes istio envoyproxy

5
推荐指数
1
解决办法
452
查看次数