首页 文章

Couchbase节点故障

提问于
浏览
3

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

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

  • 节点越少,节点发生故障时对应用程序的影响就越大

提前谢谢您的时间:)

2 回答

  • 4

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

    如果要确保数据在大多数客户端库中持久保存到磁盘,则可以使用允许您执行此操作的功能 . 借助这些功能,您还可以确保将数据复制到另一个节点 . 此函数名为 observe .

    当一个节点发生故障时,它应该是 failover ed . 在服务器设置中设置 Auto failover timeout时,Couchbase服务器可以自动执行此操作 . 即如果你有3个节点集群并且存储的数据有2个副本并且一个节点发生故障,那么你也不会丢失所有数据 - 它将在最后一个节点上可用 .

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

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

  • 3

    希望Couchbase是HA系统的良好系统 .

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

    在集群中设置/获取文档时,Client API使用与服务器相同的算法,以选择应在哪个节点上编写 . 因此客户端选择使用CRC32哈希节点,在此节点上写入 . 然后异步地,群集会将1个或多个副本复制到其他节点(具体取决于您的配置) .

    Couchbase当时只有1个文档的活动副本 . 因此很容易保持一致 . 因此应用程序从此活动文档中获取和设置 .

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

    您评论的句子只是说您拥有的节点数量越少,失败/重新 balancer 时的影响就越大,因为您必须将相同数量的请求路由到较少数量的节点 . 希望你不要丢失数据;)

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

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

相关问题