我正在运行具有 3 个 solr 和 3 个 zookeeper 实例的 SolrCloud。为了容错,我现在每个 solr 节点有 3 个分片和 3 个副本。
所以:
numShards [3]
maxShardsPernode[3]
autoAddReplicas [false]
replicationFactor [3]
nrtReplicas[3]
这是推荐的吗?如果我已经有 3 个分片,为什么我还需要分布在 3 个实例中的 3 个该分片的副本?
分片对于以下方面很重要:
复制:复制的目的既是为了确保高可用性,也是为了提高搜索查询性能,尽管主要目的通常是为了提高容错性。这是通过从不将副本分片存储在与其主分片相同的节点上来实现的。
复制的优点:
建议将复制因子设置为至少 3,这样即使机架发生问题,一份副本始终是安全的。
假设您有 3 个名为 server1、server2 和 server3 的 solr 服务器实例。您已经为您的收藏创建了 3 个分片。每台服务器上都有一个分片,即 server1 上的 Shard1、服务器 2 上的 shard2 和 server3 上的 shard3。
让每个服务器上的每个分片都有 3 个副本。
因此,您的 server1 将拥有 shard1,其他 shard 的副本,如 shard 2 和 shard 3。其他服务器也是如此。
如果 2 台服务器出现故障,您仍然拥有一台服务器,其中包含您收集的所有数据。
这就是复制在实现高可用性方面的美妙之处。