简介
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
上传交互过程
1. client询问tracker上传到的storage,不需要附加参数;
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件上传。
FastDFS file download
下载交互过程
1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件下载。
需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
下面开始部署配置,所需安装包如下:
fastdfs-nginx-module_v1.16.tar.gz
FastDFS_v5.08.tar.gz
libfastcommon-master.zip
一、安装libfastcommon
FastDFS 5.08版本不再依赖libevent,而依赖于libfastcommon,因此需要先安装libfastcommon。
软件包下载地址:https://github.com/happyfish100/libfastcommon
# unzip libfastcommon-master.zip # cd libfastcommon-master # ./make.sh # ./make.sh install
libfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,而FastDFS主程序设置的lib目录是/usr/local/lib,因此需要设置软链接(如果已存在,可以忽略)。
# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so # ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
二、安装FastDFS
软件包下载地址:
1、https://sourceforge.net/projects/fastdfs/files/
2、https://code.google.com/archive/p/fastdfs/downloads
3、https://github.com/happyfish100/fastdfs
# tar zxf FastDFS_v5.05.tar.gz # cd FastDFS # ./make.sh # ./make.sh install
安装完成后可以看到/etc/fdfs目录下生成了3个文件:
[root@localhost FastDFS]# cd /etc/fdfs/
[root@localhost fdfs]# ll
total 20
-rw-r--r--. 1 root root 1461 Sep 7 07:45 client.conf.sample
-rw-r--r--. 1 root root 7927 Sep 7 07:45 storage.conf.sample
-rw-r--r--. 1 root root 7200 Sep 7 07:45 tracker.conf.sample
[root@localhost fdfs]#
三、配置tracker节点
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
vim /etc/fdfs/tracker.conf
# 修改的内容如下:
disabled=false # 启用配置文件
port=22122 # tracker服务器端口(默认22122)
base_path=/fastdfs/tracker # 存储日志和数据的根目录
创建目录
mkdir -p /fastdfs/tracker
启动tracker服务
[root@localhost /]# /etc/init.d/fdfs_trackerd start
Starting FastDFS tracker server:
初次启动tracker服务后会在配置的目录下生成logs,data文件目录
[root@localhost /]# cd /fastdfs/tracker/
[root@localhost tracker]# ll
total 8
drwxr-xr-x. 2 root root 4096 Sep 7 07:59 data
drwxr-xr-x. 2 root root 4096 Sep 7 07:59 logs
验证查看tracker是否启动成功
[root@localhost tracker]# ps -ef|grep tracker
root 3160 1 0 07:59 ? 00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root 3186 2475 0 08:00 pts/1 00:00:00 grep tracker
四、配置storage节点
[root@localhost tracker]# cd /etc/fdfs/
[root@localhost fdfs]# ll
total 28
-rw-r--r--. 1 root root 1461 Sep 7 07:45 client.conf.sample
-rw-r--r--. 1 root root 7927 Sep 7 07:45 storage.conf.sample
-rw-r--r--. 1 root root 7196 Sep 7 07:54 tracker.conf
-rw-r--r--. 1 root root 7200 Sep 7 07:45 tracker.conf.sample
[root@localhost fdfs]# cp storage.conf.sample ./storage.conf
# 修改的内容如下:
disabled=false # 启用配置文件
port=23000 # storage服务端口
group_name=group1 # 组名(第一组为group1,第二组为group2,依次类推...)
base_path=/fastdfs/storage # 数据和日志文件存储根目录
store_path0=/fastdfs/storage # 第一个存储目录,第二个存储目录起名为:store_path1=xxx,其它存储目录名依次类推...
store_path_count=1 # 存储路径个数,需要和store_path个数匹配
tracker_server=192.168.184.132:22122 # tracker服务器IP和端口
http.server_port=8888 # http访问文件的端口
创建数据目录
mkdir -p /fastdfs/storage
启动storage服务
/etc/init.d/fdfs_storaged start
初次启动storage服务会生成data和logs目录
[root@localhost fdfs]# cd /fastdfs/storage/
[root@localhost storage]# ll
total 8
drwxr-xr-x. 259 root root 4096 Sep 7 08:08 data
drwxr-xr-x. 2 root root 4096 Sep 7 08:08 logs
生成的data目录内容
[root@localhost storage]# ll
total 8
drwxr-xr-x. 259 root root 4096 Sep 7 08:08 data
drwxr-xr-x. 2 root root 4096 Sep 7 08:08 logs
[root@localhost storage]# cd data/
[root@localhost data]# ls
00 06 0C 12 18 1E 24 2A 30 36 3C 42 48 4E 54 5A 60 66 6C 72 78 7E 84 8A 90 96 9C A2 A8 AE B4 BA C0 C6 CC D2 D8 DE E4 EA F0 F6 FC sync
01 07 0D 13 19 1F 25 2B 31 37 3D 43 49 4F 55 5B 61 67 6D 73 79 7F 85 8B 91 97 9D A3 A9 AF B5 BB C1 C7 CD D3 D9 DF E5 EB F1 F7 FD
02 08 0E 14 1A 20 26 2C 32 38 3E 44 4A 50 56 5C 62 68 6E 74 7A 80 86 8C 92 98 9E A4 AA B0 B6 BC C2 C8 CE D4 DA E0 E6 EC F2 F8 fdfs_storaged.pid
03 09 0F 15 1B 21 27 2D 33 39 3F 45 4B 51 57 5D 63 69 6F 75 7B 81 87 8D 93 99 9F A5 AB B1 B7 BD C3 C9 CF D5 DB E1 E7 ED F3 F9 FE
04 0A 10 16 1C 22 28 2E 34 3A 40 46 4C 52 58 5E 64 6A 70 76 7C 82 88 8E 94 9A A0 A6 AC B2 B8 BE C4 CA D0 D6 DC E2 E8 EE F4 FA FF
05 0B 11 17 1D 23 29 2F 35 3B 41 47 4D 53 59 5F 65 6B 71 77 7D 83 89 8F 95 9B A1 A7 AD B3 B9 BF C5 CB D1 D7 DD E3 E9 EF F5 FB storage_stat.dat
[root@localhost data]#
验证是否启动成功
[root@localhost data]# ps -ef|grep storage
root 3220 1 1 08:08 ? 00:00:02 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
root 3251 2475 0 08:12 pts/1 00:00:00 grep storage
确认启动成功后,可以运行 fdfs_monitor 查看 storage服务器是否已经登记到 tracker服务器。 # /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
[root@localhost data]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
[2017-09-07 08:14:32] DEBUG - base_path=/fastdfs/storage, 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 192.168.184.132:22122
group count: 1
Group 1:
group name = group1
disk total space = 18916 MB
disk free space = 14929 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 = 192.168.184.132
ip_addr = 192.168.184.132 ACTIVE
http domain =
version = 5.08
join time = 2017-09-07 08:08:50
up time = 2017-09-07 08:08:50
total storage = 18916 MB
free storage = 14929 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-09-07 08:14:29
last_source_update = 1969-12-31 16:00:00
last_sync_update = 1969-12-31 16:00:00
last_synced_timestamp = 1969-12-31 16:00:00
看到“192.168.184.132 ACTIVE”即可确认 storage 运行正常。
目前tracker,storage服务都正常启动运行
五 上传测试文件测试
1修改client.conf文件
cp client.conf.sample ./client.conf
vi client.conf
base_path=/fastdfs/tracker #存放数据和日志目录
tracker_server=192.168.1.200:22122 # tracker服务地址
新建个test.txt文件,
vi test.txt
内容随意写 hello world
执行上传文件
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/test.txt
[root@localhost fdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/tools/test.txt
group1/M00/00/00/wKi4hFmxZJ6AYqyCAAAADFmwwCQ352.txt
此时返回了一个文件信息,说明上传成功