我是Solr的新手,正在尝试使用SolrCloud - 似乎ZooKeeper是管理高可用性的最佳方式。
然而,在我们的生产环境中,我们只有两台服务器(主动 - 主动),我担心Zookeeper在两台服务器上并不理想,因为如果它们中的任何一台发生故障,整个机构就会停止工作。到目前为止,解决方法是在server1上运行两个ZK,在server2上运行一个ZK,因此至少如果server2发生故障,我们仍然有法定数量(但如果server1发生故障,游戏结束)。
在这种情况下,Solr的最佳实践/建议解决方案是什么?是否可以在不使用zookeeper的情况下在2台服务器之间使用SolrCloud自动复制/故障转移?或者有没有办法使用Zookeeper(或其他工具?),以便它在2台服务器上运行良好?或者我是否必须返回使用传统模式复制?
谢谢!
答案 0 :(得分:7)
您将需要2台以上的服务器。生产Zookeeper集合需要至少3个实例,并且应始终为奇数:
三个ZooKeeper服务器是建议的最小尺寸 合奏,我们也建议他们在不同的机器上运行。
对于可靠的ZooKeeper服务,您应该在一个部署ZooKeeper 集群称为集合。只要大多数合奏 到了,服务将可用。因为Zookeeper需要一个 大多数情况下,最好使用奇数机器。例如, 有了四台机器,ZooKeeper只能处理单个故障 机;如果两台机器发生故障,其余两台机器则不会 构成多数。但是,ZooKeeper可以使用五台机器 处理两台机器的故障。
http://zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html
在1台服务器上运行2个实例并没有真正削减它,因为丢失该服务器会终止集群。 Solr Cloud需要Zookeeper - 你无法解决它。
设置外部ZooKeeper集合
虽然Solr与Apache ZooKeeper捆绑在一起,但您应该考虑 你不鼓励在生产中使用这个内部的ZooKeeper, 因为关闭冗余的Solr实例也会关闭 它的ZooKeeper服务器,可能不是那么多余。因为一个 ZooKeeper合奏必须具有超过其服务器一半的法定人数 在任何给定的时间运行,这可能是一个问题。
此问题的解决方案是设置外部ZooKeeper 合奏。
https://cwiki.apache.org/confluence/display/solr/Setting+Up+an+External+ZooKeeper+Ensemble
一般来说,尝试使用少于3台服务器运行真正分布式的大规模处理是一个坏主意 - Zookeeper并不是唯一的,它要求至少3台服务器在服务器出现故障时支持可靠的操作。通常,您需要一定数量的幸存服务器(N / 2 + 1)才能运行,因此您需要至少从3开始。