启用或停用MapLoader / MapStore,或在Hazelcast中动态将客户端升级到服务器或将客户端降级到服务器或将服务器降级到客户端

时间:2018-07-06 20:00:21

标签: java hazelcast

我正在尝试建立一个复制的Hazelcast集群,该集群在任何时候都具有1-2台服务器,并且N个客户端共享相同的复制信息。我计划很快升级Hazelcast,但是我锁定的当前版本是Hazelcast 2.1.2。

我真正想要的是将两台服务器都保留为一台服务器,但是对于Hazelcast来说,我不希望它能够满足MapLoader / MapStore请求,除非我发出信号说可以。另一种选择是能够无缝地将客户端升级到服务器,同时将相对的服务器降级到客户端,而无需重新复制整个缓存。

问题是我只想设置两个服务器之一来执行任何MapLoader / MapStore工作。基本上,由于我无法控制的原因,两台服务器中只有一台能够在任何时候执行此工作,因此我只需要允许两台服务器中的一台可以随时进行此操作。问题是,如果两个服务器都连接到群集,则群集希望它们都能够处理请求,而另一个节点(非活动服务器或任何客户端)只能通过一个服务器来处理该请求。请求信息,结果我几乎没有一半的请求没有数据。

很明显,如果我丢失了所有服务器,则群集将完全消失,客户端将断开连接,并且看不到可以在运行时动态更改Hazelcast的版本。并不是我现在可以升级,但是即使在Hazelcast 3.9中,我也没有真正找到一种方法Dynamic Configuration in 3.9,因为对于初学者来说,您只能添加配置,但最重要的是,服务器似乎仍然也可以满足服务器请求。

因此,我尝试将其中一台服务器与默认的MapStoreConfig连接起来,但这不起作用,因为它仍然是服务器,并且仍然以MapLoader / MapStore请求的一半结束,因此仅我的客户获得一半的数据。此外,这样做同样会带来速度问题,但是下面使用客户端连接。

对于客户端连接,我做很多相同的事情。我在服务器仍在运行时连接客户端,然后在旧服务器逻辑上调出HazelcastInstance#getLifecycleService()#shutdown()(反之亦然,通过将服务器与仍在运行的客户端连接起来)。

//config specifies MapLoader/MapStore for FOO_CACHE and the map/queue/etc
//that I want to use
Config config = ...;
HazelcastInstance instance = Hazelcast.newHazelcastInstance(config);
...
//something happened where this node isn't capable of loading/storing
//data any longer
HazelcastInstance oldInstance = instance;
ClientConfig clientConfig = new ClientConfig();
clientConfig.getGroupConfig().setName("FOO_CACHE").setPassword("my_password");
clientConfig.addAddress("127.0.0.1:5700");
instance = HazelcastClient.newHazelcastClient(clientConfig);
oldInstance.getLifecycleService().shutdown();

从技术上讲这是可行的,但是这会浪费一些时间,因为发生服务器交换时,这意味着发生了很大的事情,并且需要快速。我仅对缓存中的少量数据进行了测试,但是当需要将数据复制到具有较大缓存的新实例中时(即新实例需要连接到集群,而现在,群集需要将数据复制到新实例,然后在旧的Hazelcast实例与群集断开连接时将其数据转储。)

我想要的是,服务器的复制数据仍然保持原样,但是它只是以某种方式“信号化”到了集群,它无法加载或存储由用户添加或请求的数据。集群。这样,我想避免将数据重新复制到新创建的实例中,并避免新实例的重新连接时间。

除了我上面提到的HazelcastClient->服务器技术以外,还有其他方法可以实现吗?

编辑: 我也尝试过此方法,但是它似乎根本没有任何效果(仍然接收请求,甚至仍然尝试处理它们):

instance.getConfig().getMapConfig("map_example_in_cache")
        .getMapStoreConfig().setEnabled(false);

1 个答案:

答案 0 :(得分:0)

已在线程https://groups.google.com/forum/#!topic/hazelcast/Wnvk-A9e9L8上进行了解答,让我们继续在那里的讨论。