2013-06-12 55 views
2

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

这句话从Couchbase服务器手册给我的印象,你数据丢失(这将使Couchbase不适合高可用性要求):

  • 用较少的大节点,万一节点故障的给 应用程序的影响将更大

预先感谢您的时间:)

回答

3

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

如果您想确保数据在大多数客户端库中都保存到磁盘,那么可以使用这些函数来执行此操作。借助这些功能,您还可以确保将数据复制到另一个节点。该功能被称为observe

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

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

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

3

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

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

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

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

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

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

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

注:我的工作是开发者传道者在Couchbase