私たちはいくつかのSolrCloudを持っています& AWS EC2で実行されているZooKeeperの設定は大部分が円滑に実行されていますが、ZooKeeperノードの最近の障害の後に、 ZooKeepersは他より優れていました。当社のクライアントは、Solr 4.1 Javaクライアントを使用してJavaベースです。SolrクライアントでZooKeeperホストを指定する最良の方法は?
元は、ZooKeepersを識別するためにホストファイルエントリを使用していましたが、AWSの性質上、/etc/hosts
のエントリが最新であることを確認するのは非常に面倒でした。だから私たちは現在Route53経由でカスタムDNSを使ってZooKeepersを識別しています。など
-Dsolr.zookeeperHosts='zk-1.mydomain.com:2181,zk-2.mydomain.com:2181,zk-3.mydomain.com:2181'
ホストzk-1.mydomain.com
は、各ZooKeeperのEC2インスタンスのDNSに単にCNAME'dをしている:我々のクライアントを起動するとき、我々は現在、これを指定する例ように、しかし、我々はまだ、個別のZooKeeperノードを識別しています。ですから、AmazonがZooKeeperを再起動して新しいIPアドレスを取得させると、DNSレコードが更新されるとクライアントは最終的に新しいIPを取得します。
私の質問は、これを処理するにはより良いアプローチがあるのだろうかと疑問にしています。このミックスにZooKeepersを追加したかったので、3つではなく5つのノードのクォーラムがあったとします(実際にこれを行いたいと思います)。そこにZooKeepersを入れ、その単一のDNS名をクライアントに渡しますか?
-Dsolr.zookeeperHosts='zookeepers.mydomain.com:2181'
この方法で、私は新しい飼育係を追加します。
は例えば、その後zk-1.mydomain.com
、zk-2.mydomain.com
とzk-mydomain.com
と、単にこのPAS私のクライアントを指すCNAMEとしてDNSレコードzookeepers.mydomain.com
を設定しましたクラスタ私は単純に別のCNAMEレコードをzookeepers.mydomain.com
に追加することができ、すべてのクライアントのconfigsの更新について心配する必要はありません。
Solrクライアントは、複数のレコードを含むDNSレコードを使用できるほどスマートですか?具体的には、あるZooKeeperがダウンしてクライアントが接続しようとすると、クライアントは次のZooKeeperのIPを取得するためにDNSに再度問い合わせを行い、通信しようとしますか?
これを行ってもらえますか?それは動作しましたか? – Stephane