我有一個應用程序,它同時在的數據中心上部署了一個拉伸的Hazelcast集羣。這兩個數據中心通常都具有完整的功能,但有時,其中一個數據中心完全脫離網絡進行SDN升級。確保使用Hazelcast在數據中心之間進行復制
我打算實現的是以這樣一種方式配置集羣,即DC中的每個主分區至少有2備份 - 一個在另一個集羣中,另一個在當前集羣中。
爲此,檢查文檔指向分區組的方向(http://docs.hazelcast.org/docs/2.3/manual/html/ch12s03.html)。企業WAN複製看起來與我們想要的完全相同,但不幸的是,此功能不適用於免費版本的Hazelcast。
我的配置如下:
NetworkConfig network = config.getNetworkConfig();
network.setPort(hzClusterConfigs.getPort());
JoinConfig join = network.getJoin();
join.getMulticastConfig().setEnabled(hzClusterConfigs.isMulticastEnabled());
join.getTcpIpConfig()
.setMembers(hzClusterConfigs.getClusterMembers())
.setEnabled(hzClusterConfigs.isTcpIpEnabled());
config.setNetworkConfig(network);
PartitionGroupConfig partitionGroupConfig = config.getPartitionGroupConfig()
.setEnabled(true).setGroupType(PartitionGroupConfig.MemberGroupType.CUSTOM)
.addMemberGroupConfig(new MemberGroupConfig().addInterface(hzClusterConfigs.getClusterDc1Interface()))
.addMemberGroupConfig(new MemberGroupConfig().addInterface(hzClusterConfigs.getClusterDc2Interface()));
config.setPartitionGroupConfig(partitionGroupConfig);
的CONFIGS使用最初爲:
clusterMembers=host1,host2,host3,host4
clusterDc1Interface=10.10.1.*
clusterDc2Interface=10.10.1.*
但是,在該集合中的任何事件的configs的更改羣集的組件時觸發,一個羣集中隨機節點開始記錄「沒有成員組可用於分配分區所有權」隔秒(如此處:https://github.com/hazelcast/hazelcast/issues/5666)。更重要的是,檢查JMX中PartitionService公開的狀態顯示,儘管羣集狀態顯然成功,但實際上沒有分區被填充。
因此,我開始用相應的IP替換主機名,並且配置工作。分區已成功創建,沒有節點出現。
這裏的問題是,這些盒子是作爲A/B部署過程的一部分創建的,並且從244個IP範圍自動獲取IP。添加所有這244個IP似乎有點多,即使它是由廚師編程而不是手動完成的,因爲它會帶來所有的網絡噪音。使用基於telnet的客戶端檢查哪些機器正在監聽hazelcast端口時檢查每個部署也似乎有點問題,因爲IP將從部署到另一個不同,並且我們會陷入一種情況,其中一部分節點在集羣中將有一個特定的成員列表,而另一部分將同時具有不同的成員列表。
在我看來,使用主機名是最好的解決方案,因爲我們將依賴於DNS解析並且不需要在配置時將我們的頭圍繞IP解析。
有沒有人知道解決組配置問題的解決方法?或者,也許,實現相同行爲的替代方案?