2011-05-19 124 views
2

我正在运行一个小型系统,它依靠Hazelcast以多播模式进行集群,分布式计算和消息传递(标准配置可在下载中找到)。我有许多作为“核心”Hazelcast实例运行的服务器模块,以及作为Hazelcast“本机客户端”实施的Java Swing应用程序。这一切都运行良好,我现在想要在生产中调试系统,因此需要运行两个独立的集群(dev + prod),这就是我遇到问题的地方。多集群的Java Hazelcast问题

根据documentation所有你需要的是使用单独的组名+密码的两个集群,我觉得这两个集群应该自动排序!这似乎适用于服务器模块,但是当我试图将“客户端” - 实例连接到prod环境时,我可以从prod中的某个服务器模块的日志中看到客户端似乎成功连接:

INFO: [prod] received auth from Connection [/192.168.0.2:55863 -> null] live=true, 
client=true, type=JAVA_CLIENT, this group name:prod, auth group name:prod, 
successfully authenticated 

但是,客户端永远不会显示为prod的成员。相反,我发现客户已经成为开发环境的成员,即使认证是针对产品进行的!

对于我来说,两个群集的非自然混合对我来说显然是一个巨大的问题,也是一个不争的事实。有没有人知道我是否有任何问题,或者是否有任何配置更改可以解决问题?

回答

5

当客户端连接到群集时,它永远不会成为群集的成员。

所以我怀疑你的客户端是否连接到了prod,但是在你的代码中有一些类似于Hazelcat.getMap()的地方,它导致在该JVM中启动一个成员,并且由于这个成员将使用默认配置将与开发者相同,这个新成员将加入你的开发集群。

所以实际上你有一个客户端,它连接到prod和另一个连接到dev群集的成员。

尝试通过客户端,并看看哪些集群中的条目出现?

我有道理吗?

+0

绝对如此。说得通。现在我的时间有点短了,但我会在下周初尝试你的建议并恢复。非常感谢你为快速回答Fuad。 – hgus1294 2011-05-20 14:17:43

+0

你是对的。我在我的客户端中使用默认配置“dev”启动成员的代码。我最终将客户切换到超级客户端,因为这对我来说似乎更容易。我的核心模块(成员)需要知道已连接的客户端,并且本地客户端“对于成员来说不太明显”。无论哪种方式,超级客户端实施都能很好地满足我的需求。非常感谢你的帮助。 – hgus1294 2011-05-23 16:58:59

+0

http://docs.hazelcast.org/docs/1.9/manual/html/ch05s03.html酷 – 2017-09-21 18:55:42