多服务器存储上的Couchbase查询

时间:2015-03-15 21:53:36

标签: couchbase

我正在使用couchbase。我看到几个couchbase服务器运行,其中一个作为主服务器,休息作为特定读/写请求的副本服务器。这是否意味着数据库的完整数据被复制到所有服务器上?让我们说有10个服务器,这是否意味着10个不同的服务器上将有10个数据库副本?这不是对存储空间的低效使用吗?

在故障转移期间,只会在vBucket映射中更新,不会将数据传输到故障转移服务器到其他服务器,因为服务器的其余部分已包含数据库的完整数据。我的理解是否正确?

我阅读了couchbase网站上提供的文档,但无法完全理解上述问题的答案。

任何人都可以帮我解决上述问题。

提前致谢

1 个答案:

答案 0 :(得分:2)

Trond Norbye在他的blog上对vBuckets和复制做了很好的解释。

直接解决您的问题:

Couchbase在整个群集中分发数据的方式是vBuckets的概念。这些可以被认为是数据的“分片”或“分区”。群集中的默认vBuckets数量为1024,因此您的数据将分成1024个部分,并且这些部分将平均分配给群集中的每个节点。因此,在具有10个节点的集群示例中,每个节点将负责100多个vBucket数据。 replication system也使用vBuckets并将相同的vBuckets分发给集群中的不同的节点。因此,活动和副本vBucket将始终位于不同的节点上。如果具有活动vBucket的节点发生故障,则副本节点将无缝地开始为该vBucket提供流量。

在上面的博文中,Trond Norbye发布了一个方便的表格来形象化:

+------------+---------+---------+---------+
| vbucket id | active  | replica | replica2|
+------------+---------+---------+---------+
|     0      | node A  | node B  | node D  |
|     1      | node B  | node C  | node A  |
|     2      | node C  | node D  | node B  |
|     3      | node D  | node A  | node C  |
+------------+---------+---------+---------+

因此,如果为数据指定单个副本,则数据将在Couchbase中存储两次,2个副本将在群集中存储三个数据副本。所以没有浪费的存储空间。 :)

您对故障转移情况是正确的,因为已经有复制vBuckets准备好接管流量,因此不需要在节点之间传输数据。但是,您现在将在群集中有一个节点为更多vBuckets提供流量,而不是最初负责的流量,因此群集将是不平衡的。要解决此问题,您应该重新启动失败的节点或完成rebalance

除了architecture overview文档之外,还有一些关于Couchbase YouTube频道的精彩介绍性视频,this one特别提供了有关Couchbase基础知识的精彩概述。 architecture white paper也很好。