如何运行共享单个数据结构的两个Hazelcast节点



假设我有两个具有IP 192.168.5.101192.168.5.102的节点。我想启动第一个,任务是初始化分布式映射,几分钟后启动第二个(在这两个主机上)。我应该如何配置他们,使他们能够看到彼此并共享该地图?

UPD。我看了一眼Hazelcast文档,并使用以下代码运行了两个实例:

Config config = new Config();
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
config.getNetworkConfig().getJoin().getTcpIpConfig().addMember("192.168.4.101").addMember("192.168.4.102").setRequiredMember("192.168.4.101").setEnabled(true);
config.getNetworkConfig().getInterfaces().setEnabled(true).addInterface("192.168.4.*");

还有更远的地方:

HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(config);
MultiMap<Long, Long> idToPids = hazelcast.getMultiMap("mapName");
IMap<Long, EntityDesc> idToDesc = hazelcast.getMap("multiMapName");

所有这些之后都是一些执行作业的代码。我在两个不同的节点上运行这个类,它们成功地看到了彼此并进行了通信(据我所知,甚至共享了资源)。

但问题是,两个节点的工作似乎比单个本地节点慢得多。我做错了什么?

速度减慢的原因之一是任务中使用的数据(我对此一无所知)可能存储在与任务运行时不同的成员上。使用单节点集群,就不会出现这个问题。但对于多节点集群,映射将被分区,因此每个成员将只存储数据的一个子集。

同样,对于单个节点,没有备份,因此它比真正的集群设置(因此>1个成员)快得多。

这些都是事情可能放缓的一些明显原因。但如果没有更多的信息,很难猜测原因是什么。

最新更新