详解Rsync和FastDFS的区别与联系
概述
在做分布式文件存储的时候,常常用到两个工具,Rsync和FastDFS,今天主要简单介绍下这两个的区别。
Rsync架构
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
Rsync分为客户端和服务器端,客户端主要负责和服务器通信,获取最新的文件;这里的机制和FastDFS有区别,因为没有实时性,所以Rsync在同步的时候,会将服务器端所有的文件都比对一遍,发现有变化才会将变化的文件同步过来,如果添加了—delete指令,还会将服务器端删除的文件在客户端也删除;FastDFS因为是实时同步的,所以只要有变化,便会通知各个组内的服务器进行同步,所以他的更新机制不是逐个比对,同步的效率会更高;
客户端只有一个配置文件:rsyncd.secrets(文件名和路径可以自定义,因为是需要客户端执行的时候作为参数传递的),这个配置文件配置了登录的密码(只有密码),用户名是在指定的时候通过参数指定的;
服务器端有三个配置文件:
- Rsyncd.conf:核心的配置文件,这里面配置了监听的ip以及port,allow/deny host(客户端IP),log info,file block(提供同步的文件信息)以及ref files info(下面将要提到的security以及motd文件);
- Rsyncd.security:里面定义了user/pwd键值对,用于验证连接的客户端身份;可以定义多个;
- Rsync.motd:这个文件就是定义客户端连接服务器端的时候,显示的友好文字,可以清空或者自定义一些文字;
FastDFS
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
FastDFS和HDFS最大的差别在于并不会对文件进行切割(切片存储),所以比较适用于小文件的存储;FastDFS里面有两个核心组件:Tracker Server以及Storage Server,前者用于记录文件索引,后者用于存储文件;tracker server和storeage Server是松散耦合,如果是扩容物理存储,只要增加一台机器,配置称为storage Server,指向一台Tracker server,Tracker Server就会记录新增容的服务器;因为storage将会根据配置的tracker ip以及端口,向Tracker服务器发送通知。
一个storage server里面可以包含N个Group,每个Group里面可以包含N个Storage,每个Storage都是一个存储空间,同一个组内的Storage是互相备份关系,上面也提到了,是那种增量式的备份;一个新的storage首次和tracker通信:
- tracker首先会将storage Server List同步给new storage,然后在给其他old storage发送最新的列表,这样完成了新列表全group内通知,并设置new storage状态为FDFS_STORAGE_STATUS_INIT;
- 接着,tracker将会指定一个old Storage服务器与之同步,并同时这是new storage状态为FDFS_STORAGE_STATUS_WAIT_SYNC(如果没有文件需要更新,设置为FDFS_STORAGE_STATUS_ONLINE),一次性将所有的文件同步到new storage上面,同步完毕后,状态将会设置为FDFS_STORAGE_STATUS_ONLINE;
- 同步数据完毕后,new storage首次发送心跳给tracker server的时候,tracker server会将其状态设置为FDFS_STORAGE_STATUS_ACTIVE;
- 一个Group的存储空间是这一组机器中存储容量最小的那台机器;访问流程是客户端配置为访问一台Tracker,有这台Tracker来负责跟进文件名来确定分配那一台机器给客户单使用,客户端再向返回的storage server发送文件请求;但是安全性需要考虑;
当你需要获取/上传一个文件的时候,首先和tracker进行通信(上传不需要参数,下载需要提供文件名称,这个文件名称是当初上传的时候有FastDFS生成的),tracker中选择一个可用的storage返回,然后你在和这个storage服务器通信获取文件。
其实这两者本质的区别在于前者的实时性相面相对较差,需要手工编写脚本同步,然后在放到定时任务(cron)中;FastDFS自动实现同组内机器互备。
后面小编会分享更多devops和DBA方面内容,感兴趣的朋友走一波关注哩~