2015-12-04 7 views
10

私たちはいくつかの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.comzk-2.mydomain.comzk-mydomain.comと、単にこのPAS私のクライアントを指すCNAMEとしてDNSレコードzookeepers.mydomain.comを設定しましたクラスタ私は単純に別のCNAMEレコードをzookeepers.mydomain.comに追加することができ、すべてのクライアントのconfigsの更新について心配する必要はありません。

Solrクライアントは、複数のレコードを含むDNSレコードを使用できるほどスマートですか?具体的には、あるZooKeeperがダウンしてクライアントが接続しようとすると、クライアントは次のZooKeeperのIPを取得するためにDNSに再度問い合わせを行い、通信しようとしますか?

+0

これを行ってもらえますか?それは動作しましたか? – Stephane

答えて

0

CNAMEを使用することをお勧めしますが、私はそれらをより堅牢にするためにElastic IPで拡張することをお勧めします.DNS変更には時間がかかります。

私たちの調査では、Zookeeper/Solrがロードバランサを使用してホスト名/ ipsを使用してSolrに与える代わりにZookeeper/Solrの反応を調べようとしました。DONT DO THIS! Solrの観点から、Solrが消滅しないように他のZookeeperサーバーが存在しないため、何らかの理由で失敗した場合は、それを無効にしたと考えられます。solr.zookeeperHosts私の推測では、いくつかのIPを持つレコードを持つことで同じ問題が生じるでしょう。

この最適な解決策は、可能な限り自動化することです。以前のプロジェクトでは、私はシェフを使ってすべての動物園のノードを集め、各solrノードでips/hostnameを動的に設定しました。シェフがあなたのために多くの変更を加えたら、EC2タグと賢明なbashスクリプトを使って同じことができます。あなたの動物園のインスタンスにタグを付けて、このようなaws cliを使ってipsのリストを取得することができます。

ec2-describe-instances --filter "tag-key=Zookeeper" 
関連する問題