FastCFS binlog机制简介

Stella981
• 阅读 556

    FastCFS采用经典的Master/Slave结构及数据同步复制的做法。如果slave在线,master同步调用slave;否则slave将进入数据恢复阶段,追上master的最新进度后,slave切换为在线状态,此后master将数据同步复制到slave。

    FastCFS采用binlog记录数据更改操作,binlog中不会记录变更(如写入)的文件内容,binlog相当于是数据索引,非常简洁。FastCFS中binlog的两大用途:一、实现数据索引持久化存储,程序启动时通过重放binlog加载数据索引;二、slave数据恢复时从master拉取缺失的binlog,然后基于该binlog进行数据恢复。大家直观感受一下如下所示的binlog片段:

FastCFS binlog机制简介

    第一列为更改时间(unix时间戳),第二列为数据版本号。多个数据副本的分布式系统要保证数据强一致性,就必须保证更改操作的顺序。采用单调递增的数据版本号,是严格保证更改顺序的有效方法,这正是上一篇文章最后留下的悬念解答。

    FastCFS支持master失效时自动切换(failover),极端情况下发生master切换后,可能会导致原master和新master上的binlog部分数据不一致,而不一致的binlog数据只会在binlog文件的尾部,我们只需对最后N条(如3条)binlog进行校验即可。如果slave最后N条binlog和master对账失败,slave会退出运行,需要人工修复binlog(通常只需删除最后一条binlog)后该slave方可正常启动。

FastStore模块有两套binlog:用于slave数据恢复的replica binlog和用作数据索引的slice binlog。对于一次更新操作,先写slice binlog,然后写replica binlog。一次更新操作对应两次binlog写入,如何保证两次写入的事务性呢?FastCFS不允许写binlog失败,只有程序异常终止时(比如掉电、程序挂掉),二者才有可能不一致。因此写入binlog时不做校验,程序启动时对两个binlog进行对账,去掉尾部多余的binlog记录即可。

FastCFS中master同步调用slave完成后才写binlog,为什么不选择在调用slave前写binlog呢?master写入binlog的时机是有讲究的,这个问题就留给大家了。

最后总结一下,FastCFS中binlog是保证数据一致性的重要机制,binlog自身做到一致性非常关键,FastCFS采用的是binlog对账机制。

本文分享自微信公众号 - FastDFS分享与交流(fastdfs100)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
STM32 SPI详解
1、SPI简介SPI规定了两个SPI设备之间通信必须由主设备(Master)来控制次设备(Slave).一个Master设备可以通过提供Clock以及对Slave设备进行片选(SlaveSelect)来控制多个Slave设备,SPI协议还规定Slave设备的Clock由Master设备通
Stella981 Stella981
3年前
Redis主从复制、读写分离
前言主从复制,即主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,Slave以读为主。主要用于读写分离和容灾恢复一.如何使用1\.“一主二仆”1.1修改配置文件"一主二仆"是指一台主机,两台从机,我们在虚拟机中模拟这三台机器(即让re
Stella981 Stella981
3年前
RabbitMQ镜像队列
本节主要讲述镜像队列。镜像队列的主要作用是用来解决队列的单点故障。镜像队列主要有两种类型:master和slave。master和slave节点位于同一个集群中。master只要一个节点,slave可以有多个节点。生产者发送到主节点消息会同时被发往各个slave节点,除了发送消息,其他动作只会发给master,然后通过master广播给其他slave
Wesley13 Wesley13
3年前
JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)
MySQL到Redis数据复制方案无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的 MySQL的Master/Slave模式 ,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。那么理论上我们也可以
Stella981 Stella981
3年前
FastCFS核心组件FastStore架构及特点
  上一篇文章介绍了FastCFS服务端两大核心组件:FastDIR和FastStore。其中FastDIR管理文件元数据,FastStore以分块方式存储文件内容。FastDIR和FastStore均采用Master/Slave结构,Master不需要手工配置,由程序自动选举产生,并且做到了failover。FastDIR架构是FastStore架构子
Wesley13 Wesley13
3年前
mysql主从同步问题梳理
前言:MySQL主从复制故障机延迟原因有很多,之前详细介绍了Mysql主从复制的原理和部署过程,在mysql同步过程中会出现很多问题,导致数据同步异常。以下梳理了几种主从同步中可能存在的问题:1)slave运行过慢不能与master同步,也就是MySQL数据库主从同步延迟MySQL数据库slave服务器延迟的现象是非常普遍的,MySQ
Stella981 Stella981
3年前
FastCFS同步复制机制简介
  上一篇文章介绍了FastCFS采用数据分组的做法,一个数据分组的几个节点(如三个节点即三副本)之间是Master/Slave关系;FastCFS采用数据强一致模型,通过Master/Slave结构的同步复制机制来保证数据一致性,本文将概要介绍这一机制的原理和关键点。  和单机系统相比,分布式系统因网络通信方面存在较大不确定性,要做到数
Stella981 Stella981
3年前
Redis学习
主从复制官方文档:https://redis.io/topics/replicationRedis中的主从复制,也就是MasterSlave模型,有以下特点  Master可以拥有多个slave  多个slave不仅可以连接同一个master,还可以连接到其他的slave  主从复制不会阻塞master,在同步数据时,maste
Wesley13 Wesley13
3年前
mysql主从复制原理及实现
一.主从复制原理利用MySQL提供的Replication,其实就是Slave从Master获取Binarylog文件,然后再本地镜像的执行日志中记录的操作。由于主从复制的过程是异步的,因此Slave和Master之间的数据有可能存在延迟的现象,此时只能保证数据最终的一致性。在master与slave之间实现整个复制过程主要由三个线程来完成
Wesley13 Wesley13
3年前
mysql的复制详解
复制线程  复制线程主要包括三个线程:master转储线程:在master出现数据更新时,会生成一个转储线程将二进制日志中的语句发送到slaveslaveI/O线程:在master生成转储线程的同时,slave同时会生成一个I/O线程将从master读取的语句,写入中继日志。slave的SQL线程:sl