【问题标题】:Should zookeeper be run on the worker machines or independent machines?zookeeper应该运行在worker机器还是独立机器上?
【发布时间】:2016-11-24 00:27:29
【问题描述】:

我们有几种使用 Zookeeper 的软件,如 Solr、Storm、Kafka、Hbase 等。

安装zookeeper集群有2个选项(超过1个节点):

  1. 嵌入式集群:在安装其他软件的部分机器上安装 ZK 或
  2. 外部集群:有一些不是很强大但专用的 zookeeper 机器(虽然在同一区域、云和数据中心)来运行 zookeeper。

哪个是集群稳定性更好的选择?请注意,在这两种情况下,我们的 zookeeper 集群中总是有奇数台机器,而不仅仅是一台机器。

看起来嵌入式选项更容易设置并且可以更好地使用机器,但外部选项似乎更稳定,因为丢失单个机器意味着仅丢失一个组件(嵌入式 Zookeeper 中的机器丢失意味着丢失 zookeeper 节点以及 Solr、Storm、Kafka 的工作节点(无论哪种情况)。

在生产环境中运行 zookeeper 以获得最大稳定性的行业标准是什么?

【问题讨论】:

    标签: solr hbase apache-kafka apache-storm apache-zookeeper


    【解决方案1】:

    Zookeeper 是 Kafka 集群的关键组件,但自从新一代客户端的实施以来,ZK 上的负载已大大降低,现在仅由集群本身使用。尽管负载通常不是很高,但它对延迟很敏感,因此最佳实践是在专用机器上运行 Zookeeper ensemble,甚至最好使用专用磁盘存储 ZK 事务日志以避免 IO 争用。

    通过使用更大的 Zookeeper 集成,您可以获得弹性,但这也会增加集群内的通信,并且您可能会损失一些性能。由于 Zookeeper 使用简单的多数投票,因此您需要奇数个节点才能使其有意义。 3 节点 ensemble 允许丢失 1 个节点而不会产生影响,5 节点 ensemble 允许丢失 2 个节点,依此类推。

    在实践中,我看到小型、低工作负载的集群在 Zookeeper 与 Kafka 节点安装在同一台机器上时运行良好,但如果您的目标是最大限度地提高稳定性并增加流量,建议使用单独的集群。

    【讨论】:

      【解决方案2】:

      您应该认为自己不鼓励在生产中使用内部 ZooKeeper。

      最好有外部的 zookeeper,最好是 Zookeeper ensemble(两个或更多) 如果你有一个 zookeeper 节点,当它宕机时可能会产生问题。

      如果您有 Zookeeper 节点的集群设置,并且如果一个 Zookeeper 节点出现故障,其余大多数节点正在运行将继续工作。

      More details

      【讨论】:

        【解决方案3】:

        对于 SolrCloud,我们强烈建议 Zookeeper 是外部的,并且您至少拥有三个。

        这并不意味着它不能在与 Solr 相同的服务器上运行,但它确实意味着您应该使用 Solr 本身可以启动的 Zookeeper 服务器,嵌入在自身中。

        这里有一些关于性能和 SolrCloud 的信息,涉及到 zookeeper:

        https://wiki.apache.org/solr/SolrPerformanceProblems#SolrCloud

        当与 Solr 在同一台机器上运行时,您是否需要完全独立的机器,甚至是 Zookeeper 数据库的独立磁盘,这非常取决于 SolrCloud 安装的特性。如果你的索引很小,查询负载很低,你可以把zookeeper放在同一台机器上,甚至是同一个磁盘上。

        对于你提到的其他服务,我不知道建议是什么。

        【讨论】:

          猜你喜欢
          • 2023-03-13
          • 1970-01-01
          • 2014-06-05
          • 2019-04-03
          • 2013-04-24
          • 2012-10-26
          • 1970-01-01
          • 2013-04-20
          • 1970-01-01
          相关资源
          最近更新 更多