试图围绕这3个项目,他们似乎都处理尝试集群时出现的稍微不同的问题.但是他们的所有文档都是为那些已经"知情"的开发人员编写的,并且像我这样的新手很难理解.
提前感谢您对这些好奇但难以捉摸的框架的任何见解!
我想在JVM上创建一个分布式应用程序,它有许多节点,需要一个库,允许我:
我找到了两个解决方案:
还有其他库可以做同样的事吗?
我在现有的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) 对于我目前的项目,我们决定在一些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集群的经验(即实现HA解决方案).又名.terracotta,JGroups等.它不一定是网络应用程序.编写自定义独立服务器的经验也很棒.
更新:我将更具体一点 - >对Web App集群不感兴趣(除非它可以拉出并独立运行).我知道它有效.但我们需要的不仅仅是会话聚类.在易于编程,支持的拓扑(即单个数据中心与WAN上),支持的节点数量方面检查解决方案.面临的问题,变通方法.目前,我正在为Terracotta和JGroups做一些POC(概念证明)工作,看看它是否值得为我们的应用程序付出努力(这是独立的,在Web容器之外).
我有以下设置
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,但没有任何作用.
我正在尝试使用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) 我想在 kubernetes 环境中设置一个 inifinispan 集群。
DNS_PING 是发现协议。它适用于使用 DeploymentConfig 设置部署的 pod。但是,当我们将设置从 DeploymentConfig 切换到 StatefulSet 时,它不起作用。
这是因为我们不能直接通过名称(pod name)查询 pod 的 IP,而是使用(pod name).(headless service created)模式。
jgroups 对我来说是新的。感谢有人建议我们如何为这种情况正确配置 DNS_PING。非常感谢。
基本上,我有一个主节点,用于在工作节点之间分配任务。工作人员的数量可能会发生变化,这意味着工作人员无法在服务器端进行硬编码。Master向队列提交一个任务,其中一个worker接收该任务,处理它并返回结果。最关键的方面是低延迟。工作节点上的典型处理时间约为 100-300 毫秒,这意味着消息传递系统不应给处理时间增加明显的延迟。
目前我正在研究请求-响应 JMS 模式。这意味着master将任务提交到共享队列,worker将从队列中取出任务并将结果提交到主节点监听的另一个队列。主人会将响应与请求关联起来。
恐怕JMS可能会给系统带来延迟,这是不可接受的。也许我应该看看其他解决方案?比如 RabbitMQ、JGroups 还是 ZooKeeper?
如果 JMS 适合这里,您能推荐最快的 JMS 代理吗?目前我正在研究ActiveMQ
该解决方案的另一项要求是它应该能够在云端工作
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 ×10
java ×4
infinispan ×3
kubernetes ×2
terracotta ×2
akka ×1
akka-cluster ×1
amazon-ec2 ×1
discovery ×1
dns ×1
ehcache ×1
envoyproxy ×1
hazelcast ×1
istio ×1
jboss ×1
jms ×1
liferay-6 ×1
rabbitmq ×1
replication ×1