Apache Zookeeper:跨数据中心的节点分布

Nic*_*500 5 solrcloud apache-zookeeper

我正在开发一个全新的SolrCloud - ZooKeeper基础设施。

一些背景信息:

  • 所有其他服务(主要是网站基础设施)分布在两个数据中心,采用主动-主动配置。
  • 在网络层面,服务器设置在扩展的 LAN 上,并在数据中心之间使用暗光纤。所以延迟是最小的。
  • 大多数这些应用程序将使用 SolrCloud - ZooKeeper 基础设施。

我有一个 SolrCloud 和一个正在运行的 ZooKeeper 整体。在这个级别上的实施是好的。

但我想知道如何分发我的 ZooKeeper 服务器。我必须有奇数台服务器,但我只有两个数据中心。如果失败,我有 50-50 的机会失去多数席位。

我应该怎么办?到目前为止我已经想到:

  • 请求第三个数据中心(不太可能发生,$$$!)

  • 每个数据中心托管两个,外部云提供商(亚马逊或......?)上托管两个。再次$$$

  • 在数据中心 1 设置奇数并在站点 2 使用观察者。如果站点 1 出现故障,会发生什么情况?SolrCloud 只能与一个观察者一起工作吗?

Nic*_*500 1

我有第三个站点来托管另一个 ZooKeeper 实例。该站点是我公司的另一个办公室,而不是“完整的数据中心”。因此每个站点都有一个 ZooKeeper 实例。

我之所以能够将一个集群分布在三个数据中心,是因为它们距离足够近,可以在它们之间建立暗光纤。延迟非常低,不会影响 ZooKeeper 的性能。

然后对于 Solr,我在两个主要数据中心上获得了完整副本。第三个办公室仅托管一个用于仲裁的 ZooKeeper。使用完整副本,我拥有每个数据中心中的所有数据。如果我的 Solr 以后需要增加,我会分片,但现在我们的索引很小。

四年来,它已经被证明是可靠的,只有一次失败。它位于第三个办公室,而不是数据中心。