【问题标题】:Best approach for specifying ZooKeeper hosts on Solr clients?在 Solr 客户端上指定 ZooKeeper 主机的最佳方法?
【发布时间】:2016-01-23 21:08:49
【问题描述】:

我们在 AWS EC2 中运行了一些 SolrCloud 和 ZooKeeper 设置,并且在大多数情况下它们运行平稳,但是最近我们的一个 ZooKeeper 节点发生故障后,我开始想知道是否有任何一种方法可以让客户端地址ZooKeepers 比其他人好。我们的客户端是基于 Java 的,使用 Solr 4.1 java 客户端。

最初我们使用主机文件条目来识别 ZooKeeper,但鉴于 AWS 的性质,确保 /etc/hosts 中的条目是最新的,这样做变得非常乏味。所以我们现在通过 Route53 使用自定义 DNS 来识别 ZooKeeper。但我们仍在单独识别 ZooKeeper 节点,因此作为一个示例,我们目前在启动客户端时指定了这一点:

-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。所以现在如果亚马逊强制我们重新启动 ZooKeeper,这会导致它获得一个新的 IP 地址,当 DNS 记录更新时,客户端最终会获得新的 IP。

我的问题是想知道是否有更好的方法来处理这个问题。假设我们想在混合中添加额外的 ZooKeeper,所以我们有 5 个节点而不是 3 个节点。(我实际上想这样做。)拥有一个包含所有节点的 DNS 循环记录是否更有意义ZooKeepers 在其中并将单个 DNS 名称传递给客户端?

例如,将 DNS 记录 zookeepers.mydomain.com 设置为指向 zk-1.mydomain.comzk-2.mydomain.comzk-mydomain.com 的 CNAME,然后简单地将其传递给我的客户:

-Dsolr.zookeeperHosts='zookeepers.mydomain.com:2181'

这样,当我向集群添加新的 ZooKeeper 时,我可以简单地将另一条 CNAME 记录添加到 zookeepers.mydomain.com,而无需担心更新所有客户端上的配置。

Solr 客户端是否足够聪明,可以使用包含多个记录的 DNS 记录?具体来说,如果一个 ZooKeeper 发生故障,并且客户端尝试连接它,客户端是否知道足以再次查询 DNS 以获取下一个 ZooKeeper 的 IP 并尝试与之通信?

【问题讨论】:

  • 你试过了吗?成功了吗?

标签: amazon-web-services solr apache-zookeeper solrcloud


【解决方案1】:

使用 CNAME 是一个好主意,但我建议使用弹性 IP 对其进行扩展以使其更加健壮,DNS 更改需要时间来传播弹性 IPS 的响应速度更快。

但是我确实有一些警告,在我们的调查中,我们试图探索 Zookeeper/Solr 会如何反应,如果我们使用负载平衡器而不是使用主机名/ips 并将其提供给 Solr 不要这样做! 似乎在内部将每个 solr.zookeeperHosts 条目标识为 Zookeeper 服务器,当一个由于某种原因失败时它使其无效,因为从 Solr 的角度来看,没有任何其他 Zookeeper 服务器所以 Solr wen不下来。我的猜测是,如果您拥有多个 IP 的记录,您也会遇到同样的问题。

对此的最佳解决方案是尽可能实现自动化。在之前的项目中,我使用 chef 来收集所有 zookeeper 节点并在每个 solr 节点上动态设置 ips/hostname。如果厨师对您有很大的改变,可以使用 EC2 标签和一些巧妙的 bash 脚本来完成。您可以使用标签标记您的 zookeeper 实例,并使用这样的 aws cli 来获取 ips 列表。

 ec2-describe-instances --filter "tag-key=Zookeeper"

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2010-11-02
    • 2019-08-30
    相关资源
    最近更新 更多