Couchbase交换再平衡是如何工作的?

Couchbase交换再平衡是如何工作的?,couchbase,Couchbase,我试图了解在线升级过程中如何使用交换重新平衡来维护数据的一致性,以及数据库的传入操作 当我说交换重新平衡(添加和删除1个节点)时,来自一个节点的数据被复制到新添加的节点。在此过渡期间,到达要删除的节点的请求会发生什么情况 在交换过程中,我们是否发现任何数据可用性问题 通过在节点之间移动vBuckets,以增量方式完成内部重新平衡。是否添加或删除节点 vBucket基本上是一个“分区ID”或“碎片”。在集群的整个生命周期中,给定密钥的vBucket是恒定的。基本上: vbucket = hash

我试图了解在线升级过程中如何使用交换重新平衡来维护数据的一致性,以及数据库的传入操作

  • 当我说交换重新平衡(添加和删除1个节点)时,来自一个节点的数据被复制到新添加的节点。在此过渡期间,到达要删除的节点的请求会发生什么情况
  • 在交换过程中,我们是否发现任何数据可用性问题

通过在节点之间移动vBuckets,以增量方式完成内部重新平衡。是否添加或删除节点

vBucket基本上是一个“分区ID”或“碎片”。在集群的整个生命周期中,给定密钥的vBucket是恒定的。基本上:

vbucket = hash(key) % number_of_vbuckets-1
由于总vbucket数在集群持续期间不会改变,因此vbucket是恒定的

为了确定给定vBucket所属的服务器节点,每个服务器都有一个同步的“集群映射”,该映射基本上提供了一个确定哪个vBucket属于哪个服务器的映射。该映射在初始连接阶段由客户端接收,并定期更新(通过各种方式)

客户端在发送数据请求(get、store)时,在请求数据包中指明该项所属的实际VBUCET。如果一切正常,客户端将向正确的服务器发送请求,操作将继续

重新平衡是将vbuckets重新分配给其他服务器的概念。在添加节点的情况下,新节点拥有以前由其他节点持有的某些VBUCKET的所有权;在删除节点的情况下,其余的服务器都会获得旧节点拥有的其他VBUCKET

增量执行再平衡;这意味着并非所有VBUCKET都会同时传输。在此过程中,客户端可能会向旧节点发送其不再拥有的VBUCKET的请求。当这种情况发生时,节点会以“notmyvbucket”错误响应,本质上是告诉客户端它不再对此VBUCKET负责,并且客户端应该重新配置自己。然后,客户端将在内部重新配置自身,并将操作重新发送到正确的节点

如果节点被完全移除,客户端也会将此作为重新配置自身的提示,然后再次将操作重新发送到正确的节点

如果客户端在传输vbucket之前发出请求,则传输将被延迟,直到该特定操作再次传播到新节点


在所有情况下,由于Couchbase体系结构,客户机和每个节点之间始终明确约定该节点是否是操作的正确节点

通过在节点之间移动vBuckets,以增量方式实现内部重新平衡。是否添加或删除节点

vBucket基本上是一个“分区ID”或“碎片”。在集群的整个生命周期中,给定密钥的vBucket是恒定的。基本上:

vbucket = hash(key) % number_of_vbuckets-1
由于总vbucket数在集群持续期间不会改变,因此vbucket是恒定的

为了确定给定vBucket所属的服务器节点,每个服务器都有一个同步的“集群映射”,该映射基本上提供了一个确定哪个vBucket属于哪个服务器的映射。该映射在初始连接阶段由客户端接收,并定期更新(通过各种方式)

客户端在发送数据请求(get、store)时,在请求数据包中指明该项所属的实际VBUCET。如果一切正常,客户端将向正确的服务器发送请求,操作将继续

重新平衡是将vbuckets重新分配给其他服务器的概念。在添加节点的情况下,新节点拥有以前由其他节点持有的某些VBUCKET的所有权;在删除节点的情况下,其余的服务器都会获得旧节点拥有的其他VBUCKET

增量执行再平衡;这意味着并非所有VBUCKET都会同时传输。在此过程中,客户端可能会向旧节点发送其不再拥有的VBUCKET的请求。当这种情况发生时,节点会以“notmyvbucket”错误响应,本质上是告诉客户端它不再对此VBUCKET负责,并且客户端应该重新配置自己。然后,客户端将在内部重新配置自身,并将操作重新发送到正确的节点

如果节点被完全移除,客户端也会将此作为重新配置自身的提示,然后再次将操作重新发送到正确的节点

如果客户端在传输vbucket之前发出请求,则传输将被延迟,直到该特定操作再次传播到新节点


在所有情况下,由于Couchbase体系结构,客户机和每个节点之间始终明确约定该节点是否是操作的正确节点

在交换重新平衡过程中,如果正确,数据将从删除的节点复制到新节点。最简单的做法是一次完成这个v_桶。在复制散列映射期间,客户端使用指向传出节点上v_bucket的点。一旦复制了所有数据(包括复制期间所做的任何更改),传出节点上的v_bucket将被锁定以进行更新,然后哈希映射将更改为指向新节点上的v_bucket。在v_bucket之间的切换过程中会有最小的中断,但这一切都应该由客户机处理,您不会期望看到任何问题,只是在切换时响应时间略有增加。在重新平衡期间,所有数据仍然可用。然后移动到下一个v_bucket。

在交换重新平衡过程中,如果正确,数据将从删除的节点复制到新节点。最简单的做法是一次完成这个v_桶。在复制过程中,将哈希映射到c