当前位置: 首页 > 知识库问答 >
问题:

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

任小云
2023-03-14

我们有一些SolrCloud

最初,我们使用hostfile条目来识别动物园管理员,但鉴于AWS的性质,确保主机中的条目是最新的变得非常乏味。因此,我们现在通过Route53使用自定义DNS来识别动物园管理员。但我们仍在单独识别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。因此,现在如果Amazon强制我们重新启动ZooKeeper,从而使其获得新的IP地址,客户端最终将在DNS记录更新时获得新IP。

我的问题是想知道是否有更好的方法来处理这个问题。假设我们想在混合中添加额外的ZooKeepers,那么我们的仲裁是5个节点,而不是3个节点。(我真的很想这样做。)有一个包含所有动物园管理员的DNS循环记录并将该DNS名称传递给客户端是否更有意义?

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

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

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

Solr客户端是否足够聪明,可以使用包含多个记录的DNS记录?具体来说,如果一个动物园管理员碰巧停机,而客户端尝试连接到它,客户端是否会再次查询DNS以获取下一个动物园管理员的IP并尝试与之通信?

共有1个答案

施季
2023-03-14

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

然而,我有一些警告,在我们的调查中,我们试图探索如果使用负载平衡器而不是使用主机名/IP,Zookeeper/Solr将如何反应,并将其交给Solr不要这样做!似乎内部标识了每个solr。zookeeperHosts条目作为zookeeper服务器,当其中一个由于某种原因出现故障时,它将使其无效,因为从Solr的角度来看,没有任何其他zookeeper服务器,所以Solr不会关闭。我猜你也会有同样的问题,因为你有一张有几个IP的唱片。

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

 ec2-describe-instances --filter "tag-key=Zookeeper"
 类似资料:
  • 问题内容: 我有第三方WSDL,我需要用Java编写代码以使Web服务客户端调用第三方WSDL中的操作。现在,我已经使用Axis的WSDL2JAVA工具生成了客户端存根,并使用XMLbeans进行了数据绑定。 进行此JAVA的最佳方法是什么? 我阅读了有关SAAJ的文章,看起来这种方法会更细化吗? 除了使用WSDL2Java工具之外,还有什么其他方法可以生成代码。也许wsimport还有其他选择。

  • 主要内容:1.概述,2.接口描述1.概述 在 dubbo-remoting-zookeeper 模块,实现了 Dubbo 对 Zookeeper 客户端的封装。在该模块中,抽象了通用的 Zookeeper Client API 接口,实现了两种 Zookeeper Client 库的接入: 基于 Apache Curator 实现: <dubbo:registry address=“zookeeper://127.0.0.1:2

  • 一、基本依赖 Curator 是 Netflix 公司开源的一个 Zookeeper 客户端,目前由 Apache 进行维护。与 Zookeeper 原生客户端相比,Curator 的抽象层次更高,功能也更加丰富,是目前 Zookeeper 使用范围最广的 Java 客户端。本篇文章主要讲解其基本使用,项目采用 Maven 构建,以单元测试的方法进行讲解,相关依赖如下: <dependencies

  • 我真的很难理解使用Node.js将ffmpeg的实时输出流到HTML5客户端的最佳方法,因为有很多变量在起作用,而我在这方面没有太多经验,我花了很多时间尝试不同的组合。 我的用例是: 1)IP视频摄像机RTSP H.264流由FFMPEG拾取,并使用节点中的以下FFMPEG设置重新多路复用到mp4容器中,输出到stdout。这只在初始客户端连接上运行,以便部分内容请求不会再次尝试生成FFMPEG。

  • 问题内容: 我将要构建一个将使用RESTful Web服务的Android应用程序。我不想自己编写REST客户端,因为我希望它尽可能有效和稳定(这是我第一次使用REST)。 我可以在项目中使用任何(免费)适用于Android / Java的框架或实用程序吗? 问题答案: Restlet是一个出色的REST框架,并且具有Android版本。

  • 问题内容: 是否可以在Node.js中获取 主机名 ? 这是我获取客户IP的方式: 那么,如何获得客户的主机名? 谢谢您的回复! 问题答案: 我认为唯一的方法是这样的: 但我建议您实际上并不需要它,这并不是您可以对信息做任何有用的事情。如果您只想让字符串标识用户的计算机,则可以进行一些处理。 如果您真正想要的是FQDN,那么我建议它仍然对您没有太大帮助,但为此您需要反向DNS查找。如果您使用的是V