4

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

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

  • 使用较少的较大节点,如果节点发生故障,对应用程序的影响将更大

提前感谢您的时间:)

4

2 回答 2

4

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

如果您想确保在大多数客户端库中将数据持久化到磁盘上,那么您可以使用一些函数来做到这一点。借助这些功能,您还可以确保将数据复制到另一个节点。这个函数被称为observe

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

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

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

于 2013-06-13T07:22:54.857 回答
3

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

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

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

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

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

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

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

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

于 2013-06-24T13:34:26.680 回答