数据复制--主从

数据复制是指将同样的数据存储在不同的节点上,之间经由网络进行数据同步。数据复制的主要目的是:

  • 使用距离用户近的节点服务用户,以此降低网络传输延迟;
  • 提供更好的灾备能力,在某些节点失效的时候依旧能够提供服务;
  • 提高对外的服务能力,增加服务吞吐量;

数据复制所要面对的主要问题是如何应对数据的写入操作,并同步到所有数据节点当中。目前主要的方式是主从架构:

  1. 在所有数据节点中选出一个主节点,负责处理客户端的所有写入请求;
  2. 其他数据节点是从节点,当主节点的数据落库之后,会将所有的数据变更以复制日志的形式,经由网络传输发送到所有的数据从节点,从节点重现复制日志以完成正确的数据复制操作;
  3. 数据库主从库都可以处理客户端的查询操作;

主从复制的机制被很多主流关系型数据库所采用,比如MySQL, PostgreSQL等等。还有很多非关系数据库也采用了这种机制,比如MongoDB, RethinkDB等等。甚至被高可靠消息队列Kafka,RabbitMQ采用。

数据复制:同步与异步

一个非常常见的场景:用户修改了自己的账户信息,主节点返回了修改成功的响应。那么,此时的从节点的数据是否已经完成了修改呢?


数据复制示例

上图中的从节点1的复制是同步的:在完成数据复制之后才对客户端返回修改成功的响应;而从节点2的复制则是异步的:先返回客户端修改成功的响应,之后才完成数据的真正复制操作。
需要注意的一点是,主节点的数据写入成功并不能保证从数据节点的数据能够完成数据复制,很多因素可能会导致从数据节点的数据写入失败:从节点故障,网络传输问题等等。
同步复制机制能够保证在客户端获得操作成功响应的前提下,保证主从节点的数据一致性,不存在主成功从失败而导致脏数据出现的情况;缺点在于客户端需要等待从节点的响应,延长了整个请求响应的过程,在从节点发生故障的时候会阻塞整个数据系统无法继续响应写入请求。
鉴于系统容错性的考虑,一般不会对于所有节点都采用同步复制的策略。在一些分布式系统中,采用对于一个从节点采用同步复制策略其他采用异步策略,以此保证一个主节点的灾备节点,这种方式又叫做半同步。而在大多数系统中,异步复制策略是更常用的,在从节点发生故障的时候,依旧能够对外提供服务,提升系统可用性。

设立新主节点

有时系统需要设立新主节点的操作来接替崩溃的主节点工作,设立新主节点的主要问题是要保证新主节点已经保有最新的数据。整个过程分以下几步:

  1. 抽取主节点最近时间点的快照;
  2. 将上面的快照拷贝到新的数据节点中;
  3. 新数据节点向主节点请求快照之后的数据变更操作;
  4. 新数据节点完成变更操作同步之后,就可以接替之前主节点的工作了;

应对节点崩溃

在一个拥有大量节点的分布式系统中,任何节点崩溃都应被当做常规事件来应对。在主从架构中,一般分为主节点和从节点两种情况。
从节点:主节点一般会储存快照和操作日志两种备份日志,在从节点重新启动之后,根据断开时间长短采用快照+操作日志或者单纯操作日志的数据恢复方式。
主节点:主节点崩溃之后所做的工作就有一点多了:设立新的主节点来处理客户端请求,从节点需要接受新主节点所发送的数据同步操作。一般分为以下几步:

  1. 确定主节点确实崩溃宕机。一般采用的是在一定时间(比如30秒)内无法对外产生任何响应。
  2. 产生一个新的主节点。这里涉及到不同的选主算法。
  3. 重新配置系统设置,包括系统接受客户端请求到主节点的路由配置,从节点到主节点之间的路由配置。在旧的主节点恢复之后要正确的进行一个从节点的工作。

变更操作日志

这里主要说一下WAL(write-ahead log)。

  • 在日志型存储引擎中(LSM-Tree),日志就是数据存储的主要形式,后台按照一定策略进行日志压缩和垃圾回收;
  • 在B树型数据存储中,数据变更会先写入WAL中,保证即使在写入B树索引过程中发生崩溃也不会丢失数据;
    需要注意的是WAL是物理级别的日志,与数据存储引擎的类型和版本强依赖。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容