分布式系统之中心化复制集管理

文章首发于公众号 松花皮蛋的黑板报

作者就职于京东,在稳定性保障、敏捷开发、高级JAVA、微服务架构有深入的理解

为了避免分布式系统单点异常引发的系统可靠性和高可用问题,可行的办法就是数据冗余,也称为复制集,那么复制集是怎么管理的呢?

实际上管理方式可以有去中心化副本集和中心化副本集两种。

去中心化副本集的特点是,无中心节点,所有节点地位平等,都可以接受读写请求,通过协商达到数据的一致。这种方式可用性比较强,只要大多数节点存活就可以对外提供服务,缺点也很明显,它的协议流程复杂。

中心化副本集的特点是,节点之间有主从逻辑关系,主节点负责所有请求的写操作,从节点复制主节点的数据,从节点集的作用是当主节点异常时从中选举出一个新的主节点。这种方式将复杂问题转换成一个有成熟解决方案的问题,将分布式的并发操作转换成单点并发,虽然逻辑变得简单了,但是主节点异常后,即使有主节点切换机制,也会出现短暂的不可用。

目前来看,数据的分布式存储普遍采用中心化副本集管理方式,那么接下来我将介绍这种方式的三个关键点,如下:

(1)、主节点和从节点之间的数据同步如何实现?方式是同步还是异步?
(2)、从节点能否提供数据读取数据,如果允许,如何保证客户端不会读取到重复或者过时的数据?
(3)、主节点的选举机制是怎么样的?

首先来说说主从节点数据更新流程。

如果采用同步的方式进行同步数据的话,意味着对于客户端请求,主节点一直阻塞该请求,直到将数据成功复制到所有的从节点,才能向客户端返回。显然,同步模式下,可靠性非常好,但是更新可用性非常差,只要有一个节点异常,就无法完成更新。而且,响应延迟比较大,取决于副本集中网络延迟最大、处理速度最慢的节点。

如果采用异步的方式进行同步数据的话,它只需要保证客户端写请求在一个节点上完成就立即响应返回,这里说的节点,通常是主节点,不过当写请求完成而复制操作还没开始时主节点异常,这将导致更新失效,关键在于客户端以为已经成功了,它永远不会重试刚刚的写操作。另外,需要注意的是,异步模式下的同步是弱一致性的,客户端有可能读取不到最新的数据。

在数据同步的时候不管选择同步模式和异步模式都有各自的优劣,那么在技术方案评估时,选择哪种方案,取决于系统对一致性、可用性、响应延迟的要求。

在主从节点数据同步的流程中,还有一个关键点需要交待清楚,数据同步路径问题,这样描述可能让人摸不着头脑,你可以理解为数据具体是怎么流动的。通常有两种方式,分别为链式和主从模式。

链式的意思是数据从一个节点推送到相邻最近的节点,最近节点可以用节点间心跳TTL来衡量,TTL表示IP数据包在计算机网络中可以转发的最大跳数。这种方式的数据能够充分利用网络资源,各个节点的压力都非常均衡,但是需要经过多个节点,写入延迟大,所以一般不采用这种方式,更多选用下面要说的主从模式。

主从模式是指数据从主节点同步到从节点,但是这个数据一般是操作事件数据,这样通知到从节点后,从节点会从主节点根据事件描述拉取相应的数据,优点是写入延迟小,缺点是主节点的压力比较大。

前面有说到,在主从节点数据同步流程中,有可能部分节点会写入失败,那这种情况应该怎么处理呢?

分布式存储中的数据复制服务大多数是一种尽力而为的服务模型,不保证一定成功,针对同步失败,依赖于具体系统的处理方案。比如可以约束向客户端返回写入成功的前提条件,包括数据是否写入主节点、数据是否写入一定数量的节点等等,然后采取相应的补偿事务,最终保证数据的一致性。

前面花了很大的篇幅来阐述数据同步问题,接下来谈谈第二个关键点,也就是从节点是否也可以提供读取数据的服务。个人觉得,从节点如果能提供对外服务的话可以很好发挥出数据的局部性,位置相近的请求来源的延迟可以更低,当然可能会出现同步不及时的数据不一致情形,如果系统不太关心及时性的话那就无伤大雅。

最后再来说说主节点选举机制,新的主节点可以是上级指定也可以是民主选举方式选出来的。

键值对存储数据库Redis采取的就是上级指定方式,Redis集群中有一个哨兵节点,它与主从节点保持固定心跳,在超时时间内联系不到主节点,则判定主节点为异常状态,然后将主节点中的一个从节点提升为新的主节点。另外一种民主选举的方式使用的是共识算法,就是多个节点对某个节点是否成为新节点这个事情达到一致的看法,不管是主节点是真的异常,还是网络问题导致误以为主节点异常了。显然,民主选举需要保证在一个选举周期内不会出现多个主节点,比如消息引擎Kafka约定序列号最大的那个才是真正的主节点。

好,今天分享了如何理解分布式系统中的数据复制问题,希望能帮助到你,欢迎分享给你的朋友们。

文章来源:www.liangsonghua.me

作者介绍:京东资深工程师-梁松华,在稳定性保障、敏捷开发、JAVA高级、微服务架构方面有深入的理解

原文地址:https://www.cnblogs.com/liangsonghua/p/www_liangsonghua_me_13.html

时间: 2024-08-05 17:19:40

分布式系统之中心化复制集管理的相关文章

MongoDB复制选举原理及复制集管理

MongoDB复制集的选举原理 MongoDB复制的原理 MongoDB的复制是基于操作日志oplog,相当于MySQL中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog日志同步并应用到其他从节点的过程. MongoDB选举的原理 MongoDB的节点分为三种类型,分别为标准节点(host).被动节点(passive)和仲裁节点(arbiter) 只有标准节点才有可能被选举为活跃节点(主节点),拥有选举权.被动节点有完整副本,不可能成为活跃节点,具有选举权.仲裁节点不复制数据,不可

MongoDB复制集管理(后续)

简介:复制集:1:标准节点:参与primary选举2:被动节点:只能成为secend,不参与选举3:仲裁节点:负责投票选举,不存放数据 实验环境:2台标准节点 1台被动节点 1台仲裁点具体实验步骤:(前半部分实验为上次实验操作) [[email protected] ~]# mkdir -p /data/mongodb/mongodb{2,3,4}[[email protected] ~]# mkdir -p /data/mongodb/logs[[email protected] ~]# to

MongoDB复制集管理优化

本文章将介绍MongoDB复制集的基本配置和管理,分别包括配置从节点可以读取数据.查看复制集状态.更改oplog大小.配置带认证的复制集 复制集的选举原理 复制是基于操作日志oplog,相当于Mysql中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog日志同步并应用到其他从节点的过程. 选举的原理 节点的类型分为标准(host)节点.被动(passive)节点和仲裁(arbiter)节点. 标准节点可能被选举为活跃(primary)节点,有选举权. 被动节点有完整副本,不可能成为活

在CentOS7上部署MongoDB复制集和复制集的管理维护

MongoDB复制集的概述 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集工作原理 MongoDB的复制集至少需要两个节点.其中一个是主节点(primary),负责处理客户端的请求,其余都是从节点(Secondary),负责复制主节点上的数据. MongoDB各个节点常见的搭配方式为:一主一从或一主多从.主节点记录其上的所有操作到oplog中,从节点定期轮询主节点获取这些操作,然后对自己的数副本执行

MongoDB复制集及管理

MongoDB复制集及管理 MongoDB复制集概述 什么是复制集 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集的优点如下: 1).让数据更安全:2).高数据可用性:3).灾难恢复:4).无停机恢复(如备份.索引重建.故障转移):5).读缩放(额外的副本读取):6).副本集对应用程序是透明的: 复制集工作原理 MongoDB的复制集至少需要两个节点.其中一个是主节点(Primary),负责处理客户

MongoDB之分片集群与复制集

分片集群 1.1.概念 分片集群是将数据存储在多台机器上的操作,主要由查询路由mongos.分片.配置服务器组成. ●查询路由根据配置服务器上的元数据将请求分发到相应的分片上,本身不存储集群的元数据,只是缓存在内存中. ●分片用来存储数据块.数据集根据分片键将集合分割为数据块,存储在不同的分片上.在生产环境下,通常一个分片由一个复制集组成. ●配置服务器存储集群的元数据,包括数据与分片的映射关系,配置服务器一旦挂掉,集群将无法工作. 注意: ●当mongos重启时,会从配置服务器读取元数据更新自

从微商乱象 看去中心化的崩溃

最近微商圈子最热门的事,无疑是接二连三在多地以各种名义召开的微商大会.这些带有明显意味的各种秀,抛开产品本来的价值竞争不谈,把焦点聚光在依靠各种手法赚得盆满钵满的微商明星上.和电商平台相比,这种脱离平台约束,将流量.关系网归还用户的去中心社交状态让他们得到爆发式发展. 曾经何时,各种伪好友.夸产品.秀赚钱的信息内容充斥于整个朋友圈中.虽然管理者也出手试图阻止这种乱象的发生,但没有中心,却促成无数信息漩涡的生态,正在逐步走向它的崩溃边缘.  没有中心 导流超越服务成第一要素 "完整意义上的分布式架

mongodb replica sets复制集详解

一.replica sets介绍 一个复制集是一组包含相同数据集的mongod实例.一个复制集只能有一个是primary节点,其它的节点为secondary节点. 和主从复制的原理一样,复制集也是通过读取oplog来进行数据传输.oplog是一个capped collection即固定表,创建表的时候可以指定其大小,当oplog满的时候会删除旧的数据.所以设置oplog的大小非常重要,如果oplog在primary节点被覆盖而尚未被secondary节点读取的话就要重新resync. 一般的使用

MongoDB复制集技术

第1章 MongoDB复制集简介: 一组MongoDB复制集,就是一组MongoDB进程,这些进程维护同一个数据集合,复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础 1.1 复制集的目的: 保证数据在生产部署是的冗余和可靠性,通过在不同的机器上保存副本来保证数据的不会因为单间损坏而丢失,能够随时应对数据丢失或者机器损坏带来的风险 还可以提高用户读写数据的性能,提高整个系统的负载 1.2 简单介绍: 1.      一组复制集就是一组MongoDB实例掌管同一个数据集,实例可以在不同的机