FastdFS实现分布式存储
FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问问题,文件存取时实现了负载均衡。FastDFS的特性
分组存储,灵活简洁,对等结构,不存在单点。
文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server
和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块。
大,中,小文件均可以很好支持,支持海量小文件存储。
支持多块磁盘,支持单盘数据恢复。
支持相同文件内容只保存一份,节省存储空间。
存储服务器上可以保存文件附加属性
下载文件支持多线程方式,支持断点续传。
http://s1.运维网.com/images/20171216/1513410126494463.png
只有两个角色,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节点的文件:主要配置内容如下
#mkdir -p/data/fastdfs/tracker
# cd/etc/fdfs
disabled=false(默认为false,表示是否无效)
port=22122(默认为22122)
base_path=/data/fastdfs/tracker
# /etc/init.d/fdfs_trackerdstart
Starting fdfs_trackerd (via systemctl):
# ps -ef |grep fdfs
root 5573 10 17:42 ? 00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf 配置storage节点的文件:配置内容大致如下
#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中配置的监听端口那一致)
# /etc/init.d/fdfs_storaged start
Starting fdfs_storaged (via systemctl):
# ps -ef |grep fdfs
root 3431 10 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
查看存储节点状态
# fdfs_monitor /etc/fdfs/client.conf
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.16ACTIVE
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.15ACTIVE
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.16ACTIVE
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 上传文件
# fdfs_upload_file /etc/fdfs/client.conf all.sh
group1/M00/00/00/rBD8EFo1EKGAXX8nAAAANoKhiHA5839.sh 查看文件
# 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) 文件下载
# fdfs_download_file/etc/fdfs/client.conf group1/M00/00/00/rBD8EFo1EKGAXX8nAAAANoKhiHA5839.sh
页:
[1]