【问题标题】:Fault tolerance and topology transparency of multi-node DSE Cluster多节点 DSE Cluster 的容错性和拓扑透明性
【发布时间】:2014-03-19 20:27:16
【问题描述】:

我有以下 DSE 集群设置:

DC 卡桑德拉

  • Cassandra 节点 1

直流太阳能

  • Solr 节点 1
  • Solr 节点 2
  • Solr 节点 3
  • Solr 节点 4

每个 DC 的复制因子为 1

我的问题:

  1. 为了执行搜索,我将 Solr SELECT 查询发送到特定节点。这引入了单点故障。如果节点关闭,则查询失败。有没有办法“查询集群/DC”而不是查询特定节点?
  2. 为了使结果集完整,我需要通过“shards”参数手动指定其他节点。这是预期的行为还是我配置错误?我的期望是这应该是自动的。我不想每次将节点添加到集群时都必须编辑应用程序的源代码
  3. 从问题 #1 和 2 开始,如果任何其他节点(除了我发送 Solr 查询的特定节点之外)出现故障,大多数情况下,我都会收到类似“范围分片不可用... ”或“服务器连接在...被拒绝”。同样,这破坏了容错能力。是否可以让集群返回部分结果?(即仅来自可用节点的数据)

总的来说,我的目标是:

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

【问题讨论】:

    标签: solr datastax-enterprise


    【解决方案1】:

    关于您的具体问题:

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

    2) 不,您不得使用“shards”参数:只需将您的查询发送到任何 DSE Solr 节点,它就会被透明地分发。

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

    总体而言,DSE Solr 是完全透明且高度可用的,前提是您设置了适当的复制因子以适应您希望容忍的故障数量。

    【讨论】:

    • 关于#2,目前我确实需要手动指定“碎片”。否则,我只能得到部分结果。你知道为什么会这样吗?我的嫌疑人之一是 cassandra.yaml 中的“种子”指令。最初配置集群的人将所有节点中的种子配置为 Cassadra 节点 1。换句话说,Solr 节点指向的种子位于不同的 DC 中,并且具有不同的节点类型(实时);而 Cassandra 节点将自身用作种子
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多