У нас есть несколько настроек SolrCloud и ZooKeeper, работающих в AWS EC2, и по большей части они работают бесперебойно, но после недавнего сбоя одного из наших узлов ZooKeeper я начал задаваться вопросом, существует ли какой-либо метод адреса клиентов ZooKeepers был лучше других. Наши клиенты основаны на Java, используя java-клиент Solr 4.1.
Первоначально мы использовали записи хост файла для идентификации 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 для каждого экземпляра ZooKeeper EC2. Итак, теперь, если 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
, а затем просто pas для моих клиентов:
-Dsolr.zookeeperHosts='zookeepers.mydomain.com:2181'
Таким образом, когда я добавляю в кластер новые ZooKeepers, я мог бы просто добавить еще одну запись CNAME в zookeepers.mydomain.com
и не беспокоиться об обновлении конфигураций на всех клиентах.
Является ли клиент Solr достаточно умным, чтобы использовать запись DNS с несколькими записями? В частности, если один ZooKeeper отключился и клиент пытается подключиться к нему, будет ли клиент достаточно знать, чтобы снова запросить DNS, чтобы получить IP следующего ZooKeeper и попытаться связаться с ним?