gpt4 book ai didi

amazon-web-services - 在 Solr 客户端上指定 ZooKeeper 主机的最佳方法?

转载 作者:行者123 更新时间:2023-12-04 02:29:21 26 4
gpt4 key购买 nike

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

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

-Dsolr.zookeeperHosts='zk-1.mydomain.com:2181,zk-2.mydomain.com:2181,zk-3.mydomain.com:2181'

主办方 zk-1.mydomain.com等只是 CNAME 到每个 ZooKeeper EC2 实例的 DNS。所以现在如果亚马逊强制我们重启 ZooKeeper,这会导致它获得一个新的 IP 地址,客户端最终将在 DNS 记录更新时获得新的 IP。

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

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

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

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

最佳答案

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

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

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

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

关于amazon-web-services - 在 Solr 客户端上指定 ZooKeeper 主机的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com