【问题标题】:Couchbase node failureCouchbase 节点故障
【发布时间】:2013-06-12 20:23:04
【问题描述】:

我的理解在这里可能有问题。据我了解,Couchbase 使用智能客户端自动选择集群中要写入或读取的节点。我不明白的是,当这些数据被写入/读取时,它是否也会立即写入所有其他节点?如果是这样,在节点故障的情况下,Couchbase 如何知道使用与当前操作/密钥“标记为主”的节点不同的节点?如果您的一个节点发生故障,您是否会丢失数据?

Couchbase 服务器手册中的这句话给我的印象是您确实丢失了数据(这会使 Couchbase 不适合高可用性要求):

  • 使用较少的较大节点,如果节点发生故障,则会影响 应用会更大

提前感谢您的宝贵时间:)

【问题讨论】:

    标签: replication nodes couchbase


    【解决方案1】:

    默认情况下,当数据写入couchbase时,客户端在数据写入一个节点的内存后返回success。之后,couchbase 将其保存到磁盘并进行复制。

    如果您想确保在大多数客户端库中将数据持久保存到磁盘,则有一些函数可以让您做到这一点。借助这些功能,您还可以确保将数据复制到另一个节点。这个函数叫做observe

    当一个节点宕机时,应该是failovered。当在服务器设置中设置Auto failover timeout 时,Couchbase 服务器可以自动执行此操作。 IE。如果您有 3 个节点集群并且存储的数据有 2 个副本并且一个节点出现故障,则您不会丢失数据。如果第二个节点发生故障,您也不会丢失所有数据 - 它将在最后一个节点上可用。

    如果 Master 的一个节点出现故障并进行故障转移 - 另一个活动节点变为 Master。在您的客户端中,您指向集群中的所有服务器,因此如果它无法从一个节点检索数据,它会尝试从另一个节点获取数据。

    此外,如果您有 2 个节点可供使用,您可以安装 2 个独立的 couchbase 服务器并配置 XDCR(跨数据中心复制)并使用 HA 代理或其他方式手动检查服务器的可用性。这样,您将只获得一个 ip 进行连接(代理的 ip),它将自动从活动服务器获取数据。

    【讨论】:

      【解决方案2】:

      希望 Couchbase 是一个适用于 HA 系统的好系统。

      让我用几句话解释一下它是如何工作的,假设你有一个 5 个节点的集群。使用客户端 API/SDK 的应用程序始终了解集群的拓扑结构(以及拓扑结构的任何变化)。

      当您在集群中设置/获取文档时,客户端 API 使用与服务器相同的算法来选择应该在哪个节点上写入。所以客户端选择使用CRC32散列的节点,在这个节点上写入。然后集群将异步复制 1 个或多个副本到其他节点(取决于您的配置)。

      Couchbase 当时只有一份文档的活动副本。所以很容易保持一致。所以应用程序从这个活动文档中获取和设置。

      如果发生故障,服务器有一些工作要做,一旦发现故障(自动或通过监控系统),就会发生“故障转移”。这意味着副本被提升为活动的,并且知道可以像以前一样工作。通常你会重新平衡节点以正确平衡集群。

      您评论的那句话只是说您拥有的节点数量越少,在失败/重新平衡的情况下影响越大,因为您必须将相同数量的请求路由到较少数量的节点。希望您不会丢失数据;)

      您可以在 Couchbase CTO 博客上找到有关这种工作方式的一些非常详细的信息: http://damienkatz.net/2013/05/dynamo_sure_works_hard.html

      注意:我在 Couchbase 担任开发人员宣传员

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-22
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 2015-12-05
        • 2013-06-16
        相关资源
        最近更新 更多