FastCFS同步复制机制简介

Stella981
• 阅读 403

    上一篇文章介绍了FastCFS采用数据分组的做法,一个数据分组的几个节点(如三个节点即三副本)之间是Master/Slave关系;FastCFS采用数据强一致模型,通过Master/Slave结构的同步复制机制来保证数据一致性,本文将概要介绍这一机制的原理和关键点。

    和单机系统相比,分布式系统因网络通信方面存在较大不确定性,要做到数据强一致的挑战非常大。业界分布式系统主流做法是采用BASE理论,有意避开数据强一致性这个难题。BASE理论是Basically Available(基本可用),Soft State(软状态或中间状态)和Eventually Consistent(最终一致性)三个短语的缩写。BASE理论比较偏工程实践,见文知意,需要进一步了解的朋友自行脑补。

    采用Master/Slave结构,保证数据强一致的逻辑很简单。client的更新操作只能由Master处理,然后master同步调用slave转发该请求。FastCFS中master可以并发请求多个slave,因此client的响应时间和slave数目(副本数)并不是线性关系。master只会对在线(ACTIVE)的slave发起同步调用,那么slave因重启服务或网络通信异常导致掉线(OFFLINE),FastCFS是如何处理的呢?OFFLINE状态的slave会进入数据恢复(追加数据)阶段,追上master的最新数据后,方可切换为ACTIVE状态。为了确保平滑切换,引入了ONLINE这一中间状态。

    有朋友就说了,上面的同步复制方式很简单直接嘛,并没有多么高深的地方。嗯,简单的往往就是最有效的。有挑战的地方不在方案的复杂性,而在于工程实现。在保证数据一致性前提下,数据同步复制方案的两大关键点:维护精准的集群状态和slave状态平滑切换。

    FastCFS引入leader/follower这一机制来维护精准的集群状态。leader通过选举产生,follower和leader建立连接并每秒报告其自身状态(磁盘空间、数据版本号等)。当集群状态发生变化时,如master切换、slave状态变化等,leader会立即将变动消息推送给所有follower。借助zookeeper或者etcd也可以实现同样的功能,为什么要自造轮子呢?原因有二:一、自主可控,减少依赖;二、简单高效,避免臃肿。

    分布式系统在保证数据强一致性的前提下,还要做到高可用和高性能,挑战非常大。为了做到这一点,还有一个最为关键的地方,下一篇文章将为你揭晓。

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
2年前
Redis主从复制、读写分离
前言主从复制,即主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,Slave以读为主。主要用于读写分离和容灾恢复一.如何使用1\.“一主二仆”1.1修改配置文件"一主二仆"是指一台主机,两台从机,我们在虚拟机中模拟这三台机器(即让re
Wesley13 Wesley13
2年前
ubuntu 安装 redis集群
计划部署三个虚拟机三个master节点三个slave节点:IP:192.168.26.133 port:7133(master)  port:8133(slave)IP:192.168.26.134  port:7134(master)  port:8134(slave)IP:192.168.26.135port:7135(mas
Wesley13 Wesley13
2年前
JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)
MySQL到Redis数据复制方案无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的 MySQL的Master/Slave模式 ,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。那么理论上我们也可以
Wesley13 Wesley13
2年前
mysql主从同步问题梳理
前言:MySQL主从复制故障机延迟原因有很多,之前详细介绍了Mysql主从复制的原理和部署过程,在mysql同步过程中会出现很多问题,导致数据同步异常。以下梳理了几种主从同步中可能存在的问题:1)slave运行过慢不能与master同步,也就是MySQL数据库主从同步延迟MySQL数据库slave服务器延迟的现象是非常普遍的,MySQ
Stella981 Stella981
2年前
FastCFS核心组件FastStore架构及特点
  上一篇文章介绍了FastCFS服务端两大核心组件:FastDIR和FastStore。其中FastDIR管理文件元数据,FastStore以分块方式存储文件内容。FastDIR和FastStore均采用Master/Slave结构,Master不需要手工配置,由程序自动选举产生,并且做到了failover。FastDIR架构是FastStore架构子
Stella981 Stella981
2年前
Redis学习
主从复制官方文档:https://redis.io/topics/replicationRedis中的主从复制,也就是MasterSlave模型,有以下特点  Master可以拥有多个slave  多个slave不仅可以连接同一个master,还可以连接到其他的slave  主从复制不会阻塞master,在同步数据时,maste
Wesley13 Wesley13
2年前
mysql主从复制原理及实现
一.主从复制原理利用MySQL提供的Replication,其实就是Slave从Master获取Binarylog文件,然后再本地镜像的执行日志中记录的操作。由于主从复制的过程是异步的,因此Slave和Master之间的数据有可能存在延迟的现象,此时只能保证数据最终的一致性。在master与slave之间实现整个复制过程主要由三个线程来完成
Stella981 Stella981
2年前
FastCFS数据一致性模型之基础结构
   最近忙着FastCFSv1.2.0的研发工作,主要对数据恢复和master任命机制做了改进,修复了5个稳定性bug,FastCFS的可靠性和稳定性上了一个新台阶。v1.2.0的改进工作和数据一致性密切相关,本文将介绍FastCFS采用的数据一致性模型及基础结构。   说到数据一致性,大家会想到分布式系统必须符合CAP理论:一个分布
Stella981 Stella981
2年前
FastCFS binlog机制简介
  FastCFS采用经典的Master/Slave结构及数据同步复制的做法。如果slave在线,master同步调用slave;否则slave将进入数据恢复阶段,追上master的最新进度后,slave切换为在线状态,此后master将数据同步复制到slave。  FastCFS采用binlog记录数据更改操作,binlog中不会记录变