多节点DSE集群的容错和拓扑透明性

时间:2014-03-18 10:33:04

标签: solr datastax-enterprise

我有以下DSE群集设置:

DC Cassandra

  • Cassandra node 1

DC Solr

  • Solr node 1
  • Solr node 2
  • Solr node 3
  • Solr node 4

每个DC的复制因子为1

我的问题:

  1. 要执行搜索,我将Solr SELECT查询发送到特定节点。这引入了单点故障。如果节点已关闭,则查询将失败。有没有办法来查询群集/ DC"而不是查询特定节点?
  2. 为了完成结果集,我需要通过'分片手动指定其他节点。参数。这是出于预期的行为还是我错误配置了什么?我的期望是这应该是自动的。每次向群集添加节点时,我都不想编辑应用程序的源代码
  3. 从问题#1和2开始,如果任何其他节点(我发送Solr查询的特定节点除外)出现故障,大部分时间都会出现错误,例如'范围内的不可用分片..."或者"服务器连接被拒绝在..."。同样,这打破了容错能力。是否可以使群集返回部分结果? (即只有来自可用节点的数据)
  4. 总的来说,我的目标是:

    1. 使应用程序尽可能容错 - 如果任何节点关闭,应用程序仍应显示其余节点的部分结果
    2. 使基础DSE拓扑对应用程序透明。每次添加或删除节点时,我都不需要编辑应用程序的源代码/配置

1 个答案:

答案 0 :(得分:1)

关于您的具体问题:

1)如果请求的服务器不可用,则回退到另一台服务器类似于客户端负载平衡,即通常由客户端实现:我们依赖于标准的Cassandra和Solr客户端,因此您必须构建它们。

2)不,你一定不能使用"分片"参数:只需将您的查询发送到任何DSE Solr节点,它将以透明方式分发。

3)"不可用的分片"发生错误是因为分布式搜索查询需要联系所有令牌范围以提供正确答案。通常的解决方案是增加复制因子,以便能够容忍RF-1故障;我们目前不支持部分结果,但我们可能会在将来的版本中使用。

总体而言,DSE Solr是完全透明且高度可用的,只要您设置适当的复制因子以适应您想要容忍的失败次数。