码迷,mamicode.com
首页 > 其他好文 > 详细

FastdFS实现分布式存储

时间:2017-12-16 21:17:26      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:fastdfs

FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问问题,文件存取时实现了负载均衡。

FastDFS的特性

分组存储,灵活简洁,对等结构,不存在单点。

文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server

和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块。

大,中,小文件均可以很好支持,支持海量小文件存储。

支持多块磁盘,支持单盘数据恢复。

支持相同文件内容只保存一份,节省存储空间。

存储服务器上可以保存文件附加属性

下载文件支持多线程方式,支持断点续传。

技术分享图片

只有两个角色,tracker server和storage server,不需要存储文件的索引信息。

所有服务器都是对等的,不存在master-slave关系

存储服务器采用分组方式,同组内存储服务器上的文件完全相同。

不同组的storage server之间不会相互通信。

由storage server主动向tracker server报告状态信息,tracker server之间通常不会相互通信。

FastDFS上传文件的流程

client询问tracker上传的storage

tracker返回一台可用的storage

client直接和storage通信完成文件上传,storage返回文件的ID。

FastDFS下载文件流程

client询问tracker下载文件的storage,参数为文件ID(组名和文件名)

tracker返回一台可用的storage

client直接和storage通信完成文件下载。

FastDFS同步机制

采用binlog文件记录更新操作,根据binlog进行文件同步

同一组内的storage server之间是对等的,文件上传,删除等操作可以在任意一台storage server上进行。

文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器。

当新增一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给新增服务器。

FastDFS的核心组件介绍

tracker:调度器,负责维持集群的消息。

storage server:以group为单位进行组织,任何一个storage server都应该属于某个group,一个group应该包含多个storage server;在同一个group内部,各storage server的数据互相冗余.

FastDFS实现分布式存储

分别在tracker server 和storage server的节点上安装如下软件包。

fastdfs-5.0.11-1.el7.centos.x86_64.rpm
fastdfs-debuginfo-5.0.11-1.el7.centos.x86_64.rpm

fastdfs-server-5.0.11-1.el7.centos.x86_64.rpm
fastdfs-tool-5.0.11-1.el7.centos.x86_64.rpm
libfastcommon-1.0.36-1.el7.centos.x86_64.rpm
libfastcommon-devel-1.0.36-1.el7.centos.x86_64.rpm

libfdfsclient-5.0.11-1.el7.centos.x86_64.rpm
libfdfsclient-devel-5.0.11-1.el7.centos.x86_64.rpm
配置tracker节点的文件:主要配置内容如下

[root@centos7 ~]#mkdir -p  /data/fastdfs/tracker

[root@centos7 ~]# cd  /etc/fdfs

disabled=false(默认为false,表示是否无效)
port=22122(默认为22122)
base_path=/data/fastdfs/tracker
[root@centos7 fdfs]# /etc/init.d/fdfs_trackerd  start
Starting fdfs_trackerd (via systemctl):                    [  OK  ]
[root@centos7 fastdfs]# ps -ef |grep fdfs
root       5573      1  0 17:42 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

配置storage节点的文件:配置内容大致如下

[root@centos7 ~]#mkdir -p /data/fastdfs/storage

disabled=false(默认为false,表示是否无效)
group_name=group1(定义组)
port=23000(默认为23000)
base_path=/data/fastdfs/storage
tracker_server=172.16.250.97:22122
store_path0=/data/fastdfs/storage(真正存储数据的路径)
http.server_port=8888(默认为8888,nginx中配置的监听端口那一致)
[root@centos7 fdfs]# /etc/init.d/fdfs_storaged start
Starting fdfs_storaged (via systemctl):                    [  OK  ]
[root@centos7 fdfs]# ps -ef |grep fdfs
root       3431      1  0 18:01 ?        00:00:00 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

配置tracker节点的client.conf文件

base_path=/data/fastdfs/tracker
tracker_server=172.16.250.97:22122
查看存储节点状态
[root@centos7 fdfs]# fdfs_monitor /etc/fdfs/client.conf
[2017-12-16 20:08:46] DEBUG - base_path=/data/fastdfs/tracker, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

server_count=1, server_index=0

tracker server is 172.16.250.97:22122

group count: 2

Group 1:
group name = group1
disk total space = 99951 MB
disk free space = 93419 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8888
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0

    Storage 1:
        id = 172.16.252.16
        ip_addr = 172.16.252.16  ACTIVE
        http domain = 
        version = 5.11
        join time = 2017-12-16 19:25:52
        up time = 2017-12-16 18:01:23
        total storage = 99951 MB
        free storage = 93419 MB
        upload priority = 10
        store_path_count = 1
        subdir_count_per_path = 256
        storage_port = 23000
        storage_http_port = 8888
        current_write_path = 0
        source storage id = 
        if_trunk_server = 0
        connection.alloc_count = 256
        connection.current_count = 0
        connection.max_count = 0
        total_upload_count = 0
        success_upload_count = 0
        total_append_count = 0
        success_append_count = 0
        total_modify_count = 0
        success_modify_count = 0
        total_truncate_count = 0
        success_truncate_count = 0
        total_set_meta_count = 0
        success_set_meta_count = 0
        total_delete_count = 0
        success_delete_count = 0
        total_download_count = 0
        success_download_count = 0
        total_get_meta_count = 0
        success_get_meta_count = 0
        total_create_link_count = 0
        success_create_link_count = 0
        total_delete_link_count = 0
        success_delete_link_count = 0
        total_upload_bytes = 0
        success_upload_bytes = 0
        total_append_bytes = 0
        success_append_bytes = 0
        total_modify_bytes = 0
        success_modify_bytes = 0
        stotal_download_bytes = 0
        success_download_bytes = 0
        total_sync_in_bytes = 0
        success_sync_in_bytes = 0
        total_sync_out_bytes = 0
        success_sync_out_bytes = 0
        total_file_open_count = 0
        success_file_open_count = 0
        total_file_read_count = 0
        success_file_read_count = 0
        total_file_write_count = 0
        success_file_write_count = 0
        last_heart_beat_time = 2017-12-16 20:08:37
        last_source_update = 1970-01-01 08:00:00
        last_sync_update = 1970-01-01 08:00:00
        last_synced_timestamp = 1970-01-01 08:00:00 

Group 2:
group name = group2
disk total space = 99951 MB
disk free space = 93027 MB
trunk free space = 0 MB
storage server count = 2
active server count = 2
storage server port = 2399
storage HTTP port = 8888
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0

    Storage 1:
        id = 172.16.252.15
        ip_addr = 172.16.252.15  ACTIVE
        http domain = 
        version = 5.11
        join time = 2017-12-16 19:31:27
        up time = 2017-12-16 19:31:27
        total storage = 99951 MB
        free storage = 93027 MB
        upload priority = 10
        store_path_count = 1
        subdir_count_per_path = 256
        storage_port = 2399
        storage_http_port = 8888
        current_write_path = 0
        source storage id = 
        if_trunk_server = 0
        connection.alloc_count = 256
        connection.current_count = 1
        connection.max_count = 1
        total_upload_count = 0
        success_upload_count = 0
        total_append_count = 0
        success_append_count = 0
        total_modify_count = 0
        success_modify_count = 0
        total_truncate_count = 0
        success_truncate_count = 0
        total_set_meta_count = 0
        success_set_meta_count = 0
        total_delete_count = 0
        success_delete_count = 0
        total_download_count = 0
        success_download_count = 0
        total_get_meta_count = 0
        success_get_meta_count = 0
        total_create_link_count = 0
        success_create_link_count = 0
        total_delete_link_count = 0
        success_delete_link_count = 0
        total_upload_bytes = 0
        success_upload_bytes = 0
        total_append_bytes = 0
        success_append_bytes = 0
        total_modify_bytes = 0
        success_modify_bytes = 0
        stotal_download_bytes = 0
        success_download_bytes = 0
        total_sync_in_bytes = 0
        success_sync_in_bytes = 0
        total_sync_out_bytes = 0
        success_sync_out_bytes = 0
        total_file_open_count = 0
        success_file_open_count = 0
        total_file_read_count = 0
        success_file_read_count = 0
        total_file_write_count = 0
        success_file_write_count = 0
        last_heart_beat_time = 2017-12-16 20:08:32
        last_source_update = 1970-01-01 08:00:00
        last_sync_update = 1970-01-01 08:00:00
        last_synced_timestamp = 1970-01-01 08:00:00 
    Storage 2:
        id = 172.16.252.16
        ip_addr = 172.16.252.16  ACTIVE
        http domain = 
        version = 5.11
        join time = 2017-12-16 19:25:52
        up time = 2017-12-16 19:35:46
        total storage = 99951 MB
        free storage = 93419 MB
        upload priority = 10
        store_path_count = 1
        subdir_count_per_path = 256
        storage_port = 2399
        storage_http_port = 8888
        current_write_path = 0
        source storage id = 172.16.252.15
        if_trunk_server = 0
        connection.alloc_count = 256
        connection.current_count = 1
        connection.max_count = 1
        total_upload_count = 0
        success_upload_count = 0
        total_append_count = 0
        success_append_count = 0
        total_modify_count = 0
        success_modify_count = 0
        total_truncate_count = 0
        success_truncate_count = 0
        total_set_meta_count = 0
        success_set_meta_count = 0
        total_delete_count = 0
        success_delete_count = 0
        total_download_count = 0
        success_download_count = 0
        total_get_meta_count = 0
        success_get_meta_count = 0
        total_create_link_count = 0
        success_create_link_count = 0
        total_delete_link_count = 0
        success_delete_link_count = 0
        total_upload_bytes = 0
        success_upload_bytes = 0
        total_append_bytes = 0
        success_append_bytes = 0
        total_modify_bytes = 0
        success_modify_bytes = 0
        stotal_download_bytes = 0
        success_download_bytes = 0
        total_sync_in_bytes = 0
        success_sync_in_bytes = 0
        total_sync_out_bytes = 0
        success_sync_out_bytes = 0
        total_file_open_count = 0
        success_file_open_count = 0
        total_file_read_count = 0
        success_file_read_count = 0
        total_file_write_count = 0
        success_file_write_count = 0
        last_heart_beat_time = 2017-12-16 20:08:37
        last_source_update = 1970-01-01 08:00:00
        last_sync_update = 1970-01-01 08:00:00
        last_synced_timestamp = 1970-01-01 08:00:00

上传文件

[root@centos7 ~]# fdfs_upload_file /etc/fdfs/client.conf all.sh 
group1/M00/00/00/rBD8EFo1EKGAXX8nAAAANoKhiHA5839.sh

查看文件

[root@centos7 fdfs]# fdfs_file_info  /etc/fdfs/client.conf group1/M00/00/00/rBD8EFo1EKGAXX8nAAAANoKhiHA5839.sh
source storage id: 0
source ip address: 172.16.252.16
file create timestamp: 2017-12-16 20:25:05
file size: 54
file crc32: 2191624304 (0x82A18870)

文件下载

[root@centos7 fdfs]# fdfs_download_file  /etc/fdfs/client.conf group1/M00/00/00/rBD8EFo1EKGAXX8nAAAANoKhiHA5839.sh




FastdFS实现分布式存储

标签:fastdfs

原文地址:http://blog.51cto.com/13017865/2051376

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!