FastDFS-多主互备原理及实践

FastDFS

原理

Tracker server

作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到 Storage server提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。Tracker需要管理的信息也都放在内存中,并且里面所有的Tracker都是对等的(每个节点地位相等),很容易扩展。

Storage server

作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上, Storageserver没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将 storage 称为存储服务器;实际是用来保存文件, Storage 分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。即上传一个文件到其中一个storage,那么同组内其他的storage会进行文件的同步。

Storage的数据同步,使用binlog:

  1. Storage Server会为文件系统中的每一个Tracker启动一个线程
    1)用于与Tracker之间通信。
    2)实现心跳反馈机制,默认每30秒发送向Tracker发送一次心跳包,包含同组内其他Storage信息。
    3)通过这一线程从Tracker中获取Storage列表信息
  2. Storage会为同组的每一个Storage开启一个线程
    1)从Tracer获取到同组内其他Storage Server信息,根据binlog向这些Storage Server同步数据(阻塞方式)。
    2)如果组内有三个Storage,那么每个Storage都会启动两个线程用于向其他Storage同步数据。
    3)打开/data/sync的mark文件,读取目标Storage_Server_IP.mark文件,获取对应的binlog文件以及同步的offset。
    4)在对应的binlog文件中找到offset对应的文件操作,如果这已操作是源操作(CADT),则将操作将数据向外同步。同步完成后更新mark文件的offset值

配置

配置内容如下:

# storage.conf
group_name = group1

tracker_server = localServer:22122
tracker_server = peerServer1:22122
tracker_server = peerServer2:22122
...

# tracker.conf
store_group = group1

测试

测试配置如下:

# 237
## /etc/hosts
10.10.10.237 localServer
10.10.10.238 peerServer
10.10.10.104 server104
## tracker.conf
store_group = group1
## storage.conf
group_name = group1
tracker_server = localServer:22122
tracker_server = peerServer:22122
tracker_server = server104:22122

# 238
## /etc/hosts
10.10.10.238 localServer
10.10.10.237 peerServer
10.10.10.104 server104
## tracker.conf
store_group = group1
## storage.conf
group_name = group1
tracker_server = localServer:22122
tracker_server = peerServer:22122
tracker_server = server104:22122

# 104
## /etc/hosts
10.10.10.104 localServer
10.10.10.237 server237
10.10.10.238 server238
## tracker.conf
store_group = group1
## storage.conf
group_name = group1
tracker_server = localServer:22122
tracker_server = server237:22122
tracker_server = server238:22122

使用fdfs自带的client进行文件的上传、下载和删除,命令如下:

# 上传
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf filePath
# 下载
/usr/bin/fdfs_download_file /etc/fdfs/client.conf fileId
# 删除
/usr/bin/fdfs_delete_file /etc/fdfs/client.conf fileId 

从237上传文件test,然后关闭237的storage,下载该文件,下载成功;

继续关闭238的storage,下载该文件,下载成功;

继续关闭104的storage,下载该文件,下载失败。说明该文件已经被同步到了各个storage中。

将所有storage重启,删除该文件,下载该文件,下载失败;分别关闭237、238、104进行下载测试,均下载失败。说明该文件已经被各storage删除了。

因为FastDFS是没有主备概念的,同一个group下的所有storage都会互相进行数据的同步,因此不需要通过代码对FastDFS进行特殊的处理,只需要进行开局配置时,配置多个正确的tracker以及配置正确的组即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值