FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要作调度工做,在访问上起负载均衡的做用。nginx
存储节点存储文件,完成文件管理的全部功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,能够包含多个键值对。git
跟踪器和存储节点均可以由一台或多台服务器构成。跟踪器和存储节点中的服务器都可以随时增长或下线而不会影响线上服务。其中跟踪器中的全部服务器都是对等的,能够根据服务器的压力状况随时增长或减小。github
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,全部卷的文件容量累加就是整个存储系统中的文件容量。一个卷能够由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的做用。vim
在卷中增长服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。服务器
当存储空间不足或即将耗尽时,能够动态添加卷。只须要增长一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。app
FastDFS中的文件标识分为两个部分:卷名和文件名,两者缺一不可。负载均衡
1. client询问tracker上传到的storage,不须要附加参数;dom
2. tracker返回一台可用的storage;测试
3. client直接和storage通信完成文件上传。google
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
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
软件包下载地址:
一、https://sourceforge.net/projects/fastdfs/files/
二、https://code.google.com/archive/p/fastdfs/downloads
三、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]#
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
[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
此时返回了一个文件信息,说明上传成功