我正在尝试向新创建的 HazelcastInstance 添加新成员(在初始化之后),但我找不到执行此操作的 API。我不想使用多播,所以我禁用了它,代码如下:
Config config = new Config();
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
HazelcastInstance instance = Hazelcast.newHazelcastInstance(config);
Run Code Online (Sandbox Code Playgroud)
我尝试在初始化后将成员添加到配置中,但它似乎没有执行任何操作:
instance.getConfig().getNetworkConfig().getJoin().getTcpIpConfig().addMember("192.168.1.5");
Run Code Online (Sandbox Code Playgroud)
如果我在调用 Hazelcast.newHazelcastInstance(config) 方法之前调用上面的代码,则它可以工作,但这对我来说不是一个解决方案,因为我想要一个正在运行的实例,但我不知道 IP(或范围)稍后应添加的新成员。
我不确定这是否是解决此问题的正确方法,因此我们将不胜感激。
谢谢!
您需要定义网络配置,并且应该知道集群之间进行通信的 IP 地址列表。
否则,您可以通过在单个计算机/本地主机本身中运行多个 Hazelcast 实例来启动集群。
请注意,如果您希望多个实例加入并形成一个集群,所有实例应共享相同的配置,否则它们将形成自己的集群。所以最好的办法是在 hazelcast.xml 中定义配置。如果您想要编程方式,那么您可以按照下面的示例进行操作。
Config config = new Config();
NetworkConfig network = config.getNetworkConfig();
network.getJoin().getMulticastConfig().setEnabled(false);
network.getJoin().getTcpIpConfig().setEnabled(true);
network.setPortAutoIncrement(true);
network.setPort(33001);
network.getJoin().getTcpIpConfig().addMember("127.0.0.1");
HazelcastInstance hz1 = Hazelcast.newHazelcastInstance(config);
HazelcastInstance hz2 = Hazelcast.newHazelcastInstance(config);
Run Code Online (Sandbox Code Playgroud)
上面的代码将在同一 JVM 内的 localhost 中启动两个实例。
Jun 24, 2016 4:35:42 PM com.hazelcast.cluster.ClusterService
INFO: [127.0.0.1]:33001 [dev] [3.5]
Members [2] {
Member [127.0.0.1]:33001 this
Member [127.0.0.1]:33002
}
Jun 24, 2016 4:35:44 PM com.hazelcast.core.LifecycleService
INFO: [127.0.0.1]:33002 [dev] [3.5] Address[127.0.0.1]:33002 is STARTED
Run Code Online (Sandbox Code Playgroud)
另一种方法是删除 hz2 行并在其自己的 JVM 中再次运行相同的配置。两者都会加入并形成一个集群。
| 归档时间: |
|
| 查看次数: |
5865 次 |
| 最近记录: |