问题描述
我正在运行带有3个solr和3个zookeeper实例的SolrCloud。为了容错,我现在每个solr节点有3个分片和3个副本。
所以:
numShards [3]
maxShardsPernode[3]
autoAddReplicas [false]
replicationFactor [3]
nrtReplicas[3]
这是推荐的吗?如果我已经有3个分片,为什么还要在3个实例上散布3个该分片的副本?
解决方法
共享对于:
很重要- 它可让您水平分割或缩放内容量。
- 它允许您分发操作,例如索引跟踪, 跨分片(可能在多个节点上),因此增加了 性能/吞吐量。
复制:复制的目的既是确保高可用性又是为了提高搜索查询性能,尽管主要目的通常是提高容错能力。这是通过从不将副本分片与其主分片存储在同一节点上来实现的。
复制的优点:
- 拆分读写负载和操作
- 搜索查询的负载分布
- 高可用性搜索
- 可以创建任意数量的从属实例以扩展查询性能
建议将复制因子设置为至少3,以便即使机架发生故障,也始终可以安全地复制一份。
请考虑您有3个Solr服务器实例,分别称为server1,server2和server3。 您已经为您的收藏创建了3个分片。 每个服务器上都有一个分片,例如server1上的Shard1,server 2上的shard2和server3上的shard3。
每个服务器上的每个分片都有3个副本。
因此,您的server1将具有shard1,以及其他shard(如shard 2和shard 3)的副本。 其他服务器也是如此。
如果2台服务器出现故障,您仍然拥有一台服务器,其中包含您收集的所有数据。
那是实现高可用性的复制之美。
注意:如今,组织正在使用CDCR功能来确保高可用性。 CDCR是跨数据中心复制。在这种情况下,如果一个数据中心发生故障,那么另一个数据中心将确保您的应用程序仍处于活动状态并正在提供数据。 Solr具有CDCR功能。