无主复制系统(2)-读写quorum

简介: 图-10中,三副本若有两个以上完成处理,写即可认为成功了。若三副本中只有一个完成写入,会怎样?到底几个副本完成才能认为写成功?

图-10中,三副本若有两个以上完成处理,写即可认为成功了。若三副本中只有一个完成写入,会怎样?到底几个副本完成才能认为写成功?


成功写操作,要求三副本的至少两个完成,即至多有一个副本可能包含旧值。因此,在读取时需至少向两个副本发起读请求,通过版本号可确定一定至少有一个包含新值。若第三个副本停机或响应慢,则读取仍可继续并返回最新值。


若有n副本,写入须w个节点确认,至少为每个读取查询r个节点。只要 w + r > n,我们期望在读取时获得最新值,因为r个读取中至少有一个节点最新。遵循这些r值,w值的读写称为法定人数(quorum)读写。也可认为r和w是判定读、写是否有效的最低票数。


Dynamo风格DB的参数n,w和r一般可配置。常见选择是n为奇数(3或5)并设置 w = r = ( n + 1 ) / 2 w = r =(n + 1)/ 2w=r=(n+1)/2(向上取整)。但可按需更改数字。如设置w = n w = nw=n和r = 1 r = 1r=1的写入很少且读取次数较多的工作负载可能会受益。这使得读取速度更快,但具有只有一个失败节点导致所有数据库写入失败的缺点。


集群中可能存在多于n的节点。(集群的机器数可能多于副本数目),但任何给定的值只能存储在n个节点上。这允许对数据集进行分区,从而可以支持比单个节点的存储能力更大的数据集。


仲裁条件w + r > n w + r> nw+r>n定义了系统可容忍的失效节点个数:


若w < n w <nw<n,若节点不可用,仍能处理写入


若r < n r <nr<n,若节点不可用,仍能处理读取


对于n = 3 , w = 2 , r = 2 n = 3,w = 2,r = 2n=3,w=2,r=2,可容忍一个不可用节点


对于n = 5 , w = 3 , r = 3 n = 5,w = 3,r = 3n=5,w=3,r=3,可容忍两个不可用的节点。 案例如图-11


通常,读、写操作始终并行发送到所有n个副本。 w、r决定我们等待多少个节点,即在我们认为读、写成功前,有多少个节点需报告成功。

20.png



若少于所需的w或r节点可用,则写入或读取将返回错误。节点不可用原因:因执行操作的错误(由于磁盘已满而无法写),因为节点关闭(崩溃,关闭电源),由于客户端和服务器节点之间的网络中断等。 只关心节点是否返回了成功响应,无需区分出错具体原因。

目录
相关文章
|
存储 NoSQL Redis
为什么创建 Redis 集群时会自动错开主从节点?
为什么创建 Redis 集群时会自动错开主从节点?
|
5月前
|
缓存 JSON 数据格式
etcd raft 处理流程图系列3-wal的读写
etcd raft 处理流程图系列3-wal的读写
56 1
|
8月前
|
存储 Java API
HDFS如何处理故障和节点失效?请解释故障恢复机制。
HDFS如何处理故障和节点失效?请解释故障恢复机制。
284 0
|
存储 容灾 安全
带你读《存储漫谈:Ceph原理与实践》——3.1.3 远程复制
带你读《存储漫谈:Ceph原理与实践》——3.1.3 远程复制
带你读《存储漫谈:Ceph原理与实践》——3.1.3 远程复制
在通过客户端向 hdfs 中写数据的时候,如果某一台机器宕机了,会怎么处理
在通过客户端向 hdfs 中写数据的时候,如果某一台机器宕机了,会怎么处理
159 0
|
监控
一个 datanode 宕机,恢复流程
一个 datanode 宕机,恢复流程
353 0
|
存储 NoSQL
Cassandra集群删除宕机节点
Cassandra集群删除宕机节点
Cassandra集群删除宕机节点
|
存储 NoSQL Redis
Redis集群:主从节点添加和删除
Redis集群:主从节点添加和删除
630 0
Redis集群:主从节点添加和删除
|
索引
ES recovery、主副分片复制会有一段时间block写入?
ES在主副本分片复制时候不会block写入(version &gt; 2.x) ES在recovery主分片时候会有一段时间block写入
508 0
ES recovery、主副分片复制会有一段时间block写入?
|
分布式计算 Hadoop 分布式数据库
因为主机时间不同步导致的hbase zookeeper 节点宕机奔溃 一例
前几天 ,升级hadoop/hbase 集群, 新 添加了几十台机器, 硬件部门,安装好主机os 后就交付给我们了, 安装好软件环境,配置好,就启动接入集群了,运行了一个礼拜,系统运行正常。 昨天的时候淘汰一台旧机器,上面跑了zookeeper , 需要准备一个新的zookeeper 节点来代替,如实就找了一台hbase 节点上启动了zookeeper 这个时候问题来了, zookeeper 启动后总是在报错, 一直在确定自己的状态。
683 0

热门文章

最新文章

下一篇
开通oss服务