複数のDocker Containerを介してEC2ノードで複数のVert.xインスタンスを実行しようとしています。Vert.xマルチドッカーのHazelcast AWS
コンテナA: ポートForwardning:5071 - > 5071 ローカルIP:172.17.0.4
コンテナB: ポートForwardning:5072 - > 5072 ローカルIP:172.17.0.5
コンテナC : ポートForwardning:5073 - > 5073 ローカルIP:172.17.0.6
iはHazelcast Amazon EC2のセットアップを使用しますが、ノード自身が一つだけ公開IPを持っているので、これは、動作しない(ハズで設定elcastsetup)、ポートを追加する可能性はありません。
どのように私は別のポート(おそらく、この異なるポートの解決策ではない)でawsでヘイルキャストを介して複数のvertxを実行することができます。
おかげ マルセル
P.s:私はTCP-IP設定を経由してノードを追加しようとしましたが、それは混合AWSとTCPの参加を許可されていません。
PPS:私はできませんし、それはこの1つのように見えるAWS ElasticBeanstalk
で "--net = host" を使用したくない:https://github.com/hazelcast/hazelcast/issues/4537
更新:
私のHCコンフィグ
JsonObject amazonConfig = clusterConfig.getJsonObject("aws");
String publicIp = null;
String privateIp = null;
String localIp = InetAddress.getLocalHost().getHostAddress();
logger.info("Found local IP: " + localIp);
try {
publicIp = doHttpUrlConnectionAction("http://169.254.169.254/latest/meta-data/public-ipv4");
logger.info("Found public IP: " + publicIp);
privateIp = doHttpUrlConnectionAction("http://169.254.169.254/latest/meta-data/local-ipv4");
logger.info("Found private IP: " + privateIp);
} catch (IOException | InterruptedException e) {
logger.fatal("Cannot detect public cloud ip");
throw e;
}
logger.info("AWS Cluster config loaded");
hazelcastConfig.getNetworkConfig().setPublicAddress(privateIp);
hazelcastConfig.getNetworkConfig().setPortAutoIncrement(false);
if (amazonConfig.containsKey("hazelcastPort")) {
logger.info("Use port " + amazonConfig.getString("hazelcastPort") + " for hazelcast");
hazelcastConfig.getNetworkConfig()
.setPublicAddress(privateIp + ":" + amazonConfig.getString("hazelcastPort"));
hazelcastConfig.getNetworkConfig().setPort(Integer.valueOf(amazonConfig.getString("hazelcastPort")));
}
// hazelcastConfig.setProperty("hazelcast.local.localAddress",
// localIp);
hazelcastConfig.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
hazelcastConfig.getNetworkConfig().getJoin().getAwsConfig().setEnabled(true);
// hazelcastConfig.getNetworkConfig().getInterfaces().setEnabled(true).addInterface(localIp);
if (amazonConfig.containsKey("region")) {
hazelcastConfig.getNetworkConfig().getJoin().getAwsConfig().setRegion(amazonConfig.getString("region"));
}
if (amazonConfig.containsKey("accessKey")) {
hazelcastConfig.getNetworkConfig().getJoin().getAwsConfig()
.setAccessKey(amazonConfig.getString("accessKey"));
}
if (amazonConfig.containsKey("secretKey")) {
hazelcastConfig.getNetworkConfig().getJoin().getAwsConfig()
.setSecretKey(amazonConfig.getString("secretKey"));
}
try {
String hazelcastGroup = System.getenv("HAZELCASTGROUP");
logger.info("Join Hazelcast Nodes with Tag HAZELCASTGROUP and Value " + hazelcastGroup);
hazelcastConfig.getNetworkConfig().getJoin().getAwsConfig().setTagKey("HAZELCASTGROUP");
hazelcastConfig.getNetworkConfig().getJoin().getAwsConfig().setTagValue(hazelcastGroup);
} catch (Exception e) {
logger.error("Cannot detect hazelcastgroup: " + e.getMessage(), e);
throw e;
}
mgr = new HazelcastClusterManager(hazelcastConfig);
vertxOptions = new VertxOptions().setClusterManager(mgr).setClustered(true);
ソリューション
// privateIp = doHttpUrlConnectionAction("http://169.254.169.254/latest/meta-data/local-ipv4");
hazelcastConfig.getNetworkConfig().setPublicAddress(privateIp);
いけない第一ドッカーイメージのためsetPortAutoIncrement
を無効にし、2番目のドッカー画像に
hazelcastConfig.getNetworkConfig().setPort(5701);
を経て5701にポートを設定する必要があります - 5702など
あなたドン」にDocker Containerをリンクする必要はありません。各画像のポートマッピングを作成するだけです。
他のノードがポートにアクセスできるように、このポートのセキュリティグループを作成します。
クラスタを形成していない、またはクライアントから接続できないという問題に直面していますか?設定の詳細とクラスタログステートメントを投稿してください。 –
AWS Discoveryは、Hazelcastノードのポートではなく、IPアドレスを保存するだけです。これは、差分ポート上に複数のVert.xがある1つのMultiDockerイメージを実行している場合に意味します。お互いを検出することはできません。現在、私はそこにヘーゼルキャストサーバーを持つ新しいドッカープロセスを開始しようとしています。 verxノードはこの内部ヘイズキャストサーバを再び登録します。このハローキャストサーバは他の外部ノードに到達可能です。しかし、現在、私はこれがうまくいけば、答えはありません。 –
私はパブリックIPアドレスの設定はあなたが逃していると信じています。ですから、HZ設定の詳細をここに投稿してください。 –