У нас есть несколько SolrCloud & Настройки ZooKeeper, работающие в AWS EC2, и по большей части они работают бесперебойно, но после недавнего сбоя одного из наших узлов ZooKeeper я начал задаваться вопросом, может ли какой-либо метод обращения клиентов к ZooKeepers лучше других. Наши клиенты основаны на Java, используя java-клиент Solr 4.1.Лучший подход для указания узлов ZooKeeper на клиентах Solr?
Первоначально мы использовали записи хост-файла для идентификации ZooKeepers, но при условии, что записи в /etc/hosts
были современными, учитывая характер AWS, это стало очень утомительным для этого. Таким образом, теперь мы используем собственный DNS через Route53 для идентификации ZooKeepers. Но мы до сих пор определения Zookeeper узлов по отдельности, так как, например, мы в настоящее время указать это при запуске наших клиентов:
-Dsolr.zookeeperHosts='zk-1.mydomain.com:2181,zk-2.mydomain.com:2181,zk-3.mydomain.com:2181'
Хозяевам zk-1.mydomain.com
т.д., просто CNAME'd к DNS для каждого экземпляра EC2 Zookeeper. Итак, теперь, если Amazon заставляет нас перезагружать ZooKeeper, что заставляет его получать новый IP-адрес, клиент в конечном итоге получит новый IP-адрес при обновлении записи DNS.
Мой вопрос связан с вопросом, есть ли еще лучший подход к управлению этим. Предположим, мы хотели добавить в смесь дополнительные ZooKeepers, поэтому у нас был кворум из 5 узлов вместо 3. (на самом деле я хочу это сделать.) Было бы разумнее иметь единую DNS-циклическую запись, содержащую все ZooKeepers в нем и передать это единственное DNS-имя клиенту?
Например, настроить DNS запись zookeepers.mydomain.com
как CNAME, которая указывает на zk-1.mydomain.com
, zk-2.mydomain.com
и zk-mydomain.com
, а затем просто па это своим клиентам:
-Dsolr.zookeeperHosts='zookeepers.mydomain.com:2181'
Таким образом, когда я добавить новые Zookeepers к кластер, я мог бы просто добавить еще одну запись CNAME в zookeepers.mydomain.com
и не беспокоиться об обновлении конфигураций для всех клиентов.
Является ли клиент Solr достаточно умным, чтобы использовать запись DNS с несколькими записями в ней? В частности, если один ZooKeeper отключен, и клиент пытается подключиться к нему, будет ли клиент достаточно знать, чтобы снова запросить DNS, чтобы получить IP следующего ZooKeeper и попытаться связаться с ним?
Вы дали это идти?Это сработало? – Stephane