我正在使用couchbase。我看到几个couchbase服务器运行,其中一个作为主服务器,休息作为特定读/写请求的副本服务器。这是否意味着数据库的完整数据被复制到所有服务器上?让我们说有10个服务器,这是否意味着10个不同的服务器上将有10个数据库副本?这不是对存储空间的低效使用吗?
在故障转移期间,只会在vBucket映射中更新,不会将数据传输到故障转移服务器到其他服务器,因为服务器的其余部分已包含数据库的完整数据。我的理解是否正确?
我阅读了couchbase网站上提供的文档,但无法完全理解上述问题的答案。
任何人都可以帮我解决上述问题。
提前致谢
答案 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也很好。