FastDFS安装配置与使用

更新时间:2023-10-07 11:27:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

FastDFS安装配置与使用

目录

一、 简介 ................................................................................................................................... 3 二、前置准备 ................................................................................................................................... 4 三、安装........................................................................................................................................... 5

1、Tracker的安装与配置 ...................................................................................................... 5 2、Storage的安装与配置 ...................................................................................................... 7 3、在Storage上安装与配置nginx .................................................................................... 12 4、安装nginx反向代理及缓存服务器 ............................................................................... 15 5、测试上传文件 ................................................................................................................... 17 6、优化部分 ........................................................................................................................... 21 四、FastDFS使用 .......................................................................................................................... 23

1.上传文件 ............................................................................................................................. 23 2.下载文件 ............................................................................................................................. 24 3.监视服务器资源 ................................................................................................................. 25 4.Java客户端调用 ................................................................................................................ 26 五、常见问题 ................................................................................................................................. 28

一、 简介

1.系统概述

FastDFS是一个开源的分布式文件系统,对文件进行管理,它的主要功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。 2.功能特性

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

? 文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server ? 和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块 ? 大、中、小文件均可以很好支持,支持海量小文件存储 ? 支持多块磁盘,支持单盘数据恢复

? 支持相同文件内容只保存一份,节省存储空间 ? 存储服务器上可以保存文件附加属性 ? 下载文件支持多线程方式,支持断点续传

提供功能

upload:上传普通文件,包括主文件

upload_appender:上传appender文件,后续可以对其进行append操作 upload_slave:上传从文件 download:下载文件 delete:删除文件

append:在已有文件后追加内容 set_metadata:设置文件附加属性 get_metadata:获取文件附加属性

3.架构示意图

FastDFS客户端,其作用是完成客户与服务端之间的交互。

FastDFS服务端,有两个角色: a.跟踪器(tracker),其作用是完成调度工作,在访问上起负载均衡的作用。 b.存储节点(storage),其作用是完成文件的存储,完成文件管理的所有功能:存储、同步和提供存取接口;

FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。

二、前置准备

FastDFS相关软件

? ? ?

FastDFS_v5.05.tar.gz

fastdfs-nginx-module_v1.16.tar.gz libfastcommon-master.zip

Nginx相关软件

? ? ? ? ?

nginx-1.4.2.tar.gz pcre-8.36.tar.gz zlib-1.2.8.tar.gz

libevent-2.0.22-stable.tar.gz ngx_cache_purge-2.1.tar.gz

拓扑图

三、安装

1、Tracker的安装与配置

以下在Tracker机器上进行:

1. 安装 libfastcommon # unzip libfastcommon-master.zip # cd libfastcommon-master # ls HISTORY INSTALL libfastcommon.spec make.sh README src # ./make.sh # ./make.sh install 2. 安装 FastDFS # tar zxvf FastDFS_v5.05.tar.gz # cd FastDFS # ll drwxr-xr-x 3 8980 users 4096 3月 31 18:01 client drwxr-xr-x 2 8980 users 4096 3月 31 17:14 common

drwxr-xr-x 2 8980 users 4096 12月 2 11:26 conf -rw-r--r-- 1 8980 users 35067 12月 2 11:26 COPYING-3_0.txt -rw-r--r-- 1 8980 users 2802 12月 2 11:26 fastdfs.spec -rw-r--r-- 1 8980 users 31386 12月 2 11:27 HISTORY drwxr-xr-x 2 8980 users 4096 12月 2 11:26 init.d -rw-r--r-- 1 8980 users 7755 12月 2 11:26 INSTALL -rwxr-xr-x 1 8980 users 5813 12月 2 11:27 make.sh drwxr-xr-x 2 8980 users 4096 12月 2 11:26 php_client -rw-r--r-- 1 8980 users 2380 12月 2 11:26 README.md -rwxr-xr-x 1 8980 users 1768 12月 2 11:26 restart.sh -rwxr-xr-x 1 8980 users 1680 12月 2 11:26 stop.sh drwxr-xr-x 4 8980 users 4096 3月 31 18:01 storage drwxr-xr-x 2 8980 users 4096 12月 2 11:26 test drwxr-xr-x 2 8980 users 4096 3月 31 18:01 tracker # ./make.sh

至此FastDFS在 tracker上安装完成,所有的可执行文件位于 /usr/bin 目录下,以fdfs开头的文件 # ll /usr/bin/fd* -rwxr-xr-x 1 root root 292082 3月 31 18:01 /usr/bin/fdfs_appender_test -rwxr-xr-x 1 root root 292043 3月 31 18:01 /usr/bin/fdfs_appender_test1 -rwxr-xr-x 1 root root 278763 3月 31 18:01 /usr/bin/fdfs_append_file -rwxr-xr-x 1 root root 277887 3月 31 18:01 /usr/bin/fdfs_crc32 -rwxr-xr-x 1 root root 278750 3月 31 18:01 /usr/bin/fdfs_delete_file -rwxr-xr-x 1 root root 279213 3月 31 18:01 /usr/bin/fdfs_download_file -rwxr-xr-x 1 root root 279027 3月 31 18:01 /usr/bin/fdfs_file_info -rwxr-xr-x 1 root root 294067 3月 31 18:01 /usr/bin/fdfs_monitor -rwxr-xr-x 1 root root 966198 3月 31 18:01 /usr/bin/fdfs_storaged -rwxr-xr-x 1 root root 295074 3月 31 18:01 /usr/bin/fdfs_test -rwxr-xr-x 1 root root 294859 3月 31 18:01 /usr/bin/fdfs_test1 -rwxr-xr-x 1 root root 414275 3月 31 18:01 /usr/bin/fdfs_trackerd -rwxr-xr-x 1 root root 283237 3月 31 18:01 /usr/bin/fdfs_upload_appender -rwxr-xr-x 1 root root 284087 3月 31 18:01 /usr/bin/fdfs_upload_file 至此,Tracker的安装完成,所有的配置文件在 /etc/fdfs/ 目录下 # ll /etc/fdfs/ 总用量 20 -rw-r--r--. 1 root root 1461 10月 28 11:29 client.conf.sample -rw-r--r--. 1 root root 7647 10月 28 11:29 storage.conf.sample -rw-r--r--. 1 root root 7102 10月 28 11:29 tracker.conf.sample 3. 配置FastDFS

进入到 /etc/fdfs 目录下,复制模版文件到 tracker.conf

# cp tracker.conf.sample tracker.conf 创建数据文件和日志文件目录 # mkdir -pv /data/fastdfs/tracker mkdir: 已创建目录 \mkdir: 已创建目录 \mkdir: 已创建目录 \

编辑 tracker.conf 文件,测试的时候只需要修改以下参数即可 disabled=false #启用配置文件 port=22122 #设置 tracker 的端口号 base_path=/data/fastdfs/tracker #设置 tracker 的数据文件和日志目录(需预先创建) http.server_port=8080 #设置 http 端口号 这个http.server_port=8080 指的是在tracker服务器上启动http服务进程,如:apache或者nginx 启动时所监听的端口,这个似乎是可以不用管的,因为tracker本身就没有安装http服务 4. 运行Tracker 直接使用 fdfs_trackerd 来启动tracker进程,然后使用netstat 查看端口是否起来。 # fdfs_trackerd /etc/fdfs/tracker.conf restart # netstat -antp | grep trackerd tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 23245/fdfs_trackerd tcp 0 0 192.168.0.105:22122 192.168.0.105:35357 ESTABLISHED 23245/fdfs_trackerd

查看日志看服务是否正常运行 # cat /data/fastdfs/tracker/logs/trackerd.log

5. 设置开机自动启动 # echo \# cat /etc/rc.local /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 至此tracker上的安装与配置结束。

2、Storage的安装与配置

以下在Storage1机器上进行:

1. 安装 libfastcommon [同Tracker的安装与配置]

2. 安装 FastDFS

[同Tracker的安装与配置]

至此FastDFS在 Storage上安装完成,所有的可执行文件位于 /usr/bin 目录下,以fdfs开头的文件 # ll /usr/bin/fd* -rwxr-xr-x 1 root root 292082 3月 31 18:01 /usr/bin/fdfs_appender_test -rwxr-xr-x 1 root root 292043 3月 31 18:01 /usr/bin/fdfs_appender_test1 -rwxr-xr-x 1 root root 278763 3月 31 18:01 /usr/bin/fdfs_append_file -rwxr-xr-x 1 root root 277887 3月 31 18:01 /usr/bin/fdfs_crc32 -rwxr-xr-x 1 root root 278750 3月 31 18:01 /usr/bin/fdfs_delete_file -rwxr-xr-x 1 root root 279213 3月 31 18:01 /usr/bin/fdfs_download_file -rwxr-xr-x 1 root root 279027 3月 31 18:01 /usr/bin/fdfs_file_info -rwxr-xr-x 1 root root 294067 3月 31 18:01 /usr/bin/fdfs_monitor -rwxr-xr-x 1 root root 966198 3月 31 18:01 /usr/bin/fdfs_storaged -rwxr-xr-x 1 root root 295074 3月 31 18:01 /usr/bin/fdfs_test -rwxr-xr-x 1 root root 294859 3月 31 18:01 /usr/bin/fdfs_test1 -rwxr-xr-x 1 root root 414275 3月 31 18:01 /usr/bin/fdfs_trackerd -rwxr-xr-x 1 root root 283237 3月 31 18:01 /usr/bin/fdfs_upload_appender -rwxr-xr-x 1 root root 284087 3月 31 18:01 /usr/bin/fdfs_upload_file

所有的配置文件在 /etc/fdfs/ 目录下 # ll /etc/fdfs/ 总用量 20 -rw-r--r--. 1 root root 1461 10月 28 11:29 client.conf.sample -rw-r--r--. 1 root root 7647 10月 28 11:29 storage.conf.sample -rw-r--r--. 1 root root 7102 10月 28 11:29 tracker.conf.sample

至此 FastDFS在Storage上安装完成,以下进行配置

3. 配置FastDFS 进入到 /etc/fdfs 目录下,复制/usr/local/src/FastDFS/conf/* 下面的所有文件到当前目录下(/etc/fdfs) # cd /etc/fdfs/ cp /usr/local/src/FastDFS/conf/* . ※如果Storage与Tracker安装在同一台机器时,注意不要覆盖Tracker安装时已配置好的文件。

编辑配置文件 storage.conf 测试的时候,只需修改以下内容即可。 # vim storage.conf disabled=false #启用配置文件 group_name=group1 #组名,根据实际情况修改 port=23000 #设置 storage 的端口号 base_path=/data/fastdfs/storage #设置 storage 的日志目录(需预先创建) store_path_count=1 #存储路径个数,需要和 store_path0=/data/fastdfs/storage #存储路径 tracker_server=10.10.10.124:22122 #tracker 服务器的 IP 地址和端口号 http.server_port=8080 #设置storage上启动的http服务的端口号,如安装的nginx的端口号 store_path 个数匹配

4. 运行Storage # fdfs_storaged /etc/fdfs/storage.conf restart

查看端口是否起来 # netstat -antp | grep storage tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 21163/fdfs_storaged tcp 0 0 192.168.0.105:35357 192.168.0.105:22122 ESTABLISHED 21163/fdfs_storaged

查看日志 cat /data/fastdfs/storage/logs/storaged.log 看运行情况 mkdir data path: FC ... mkdir data path: FD ... mkdir data path: FE ... mkdir data path: FF ... data path: /data/fastdfs/storage/data, mkdir sub dir done. [2015-04-01 16:58:58] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 192.168.0.105:22122, as a tracker client, my ip is 192.168.0.105 [2015-04-01 16:59:28] INFO - file: tracker_client_thread.c, line: 1235, tracker server 192.168.0.105:22122, set tracker leader: 192.168.0.105:22122 看到先创建二级目录,然后已经成功连接到tracker

可以使用 fdfs_monitor 来查看一下storage的状态,看是否已经成功注册到了tracker # fdfs_monitor /etc/fdfs/storage.conf 也可以以下命令来监控服务器的状态 # fdfs_monitor /etc/fdfs/client.conf

结果如下: [2015-04-01 17:37:15] DEBUG - base_path=/data/fastdfs/storage, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, server_count=1, server_index=0 tracker server is 192.168.0.105:22122 use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

group count: 1

Group 1:

group name = group1

disk total space = 20157 MB disk free space = 9466 MB trunk free space = 0 MB storage server count = 1 active server count = 1 storage server port = 23000 storage HTTP port = 8080 store path count = 1 subdir count per path = 256 current write server index = 0 current trunk file id = 0

Storage 1:

id = 192.168.0.105

ip_addr = 192.168.0.105 (rkhd-opensuse) ACTIVE http domain = version = 5.05

join time = 2015-03-31 18:21:56 up time = 2015-04-01 10:57:27 total storage = 20157 MB free storage = 9466 MB upload priority = 10 store_path_count = 1 subdir_count_per_path = 256 storage_port = 23000 storage_http_port = 8080 current_write_path = 0 source storage id = if_trunk_server = 0

connection.alloc_count = 256 connection.current_count = 0 connection.max_count = 1 total_upload_count = 4 success_upload_count = 4 total_append_count = 0 success_append_count = 0 total_modify_count = 0 success_modify_count = 0 total_truncate_count = 0

已经显示HIT,代表已经命中缓存 至此 FastDFS + nginx 反向代理缓存搭建完毕。 6、优化部分 1.Tracker优化 1) max_connections=10000或更大响应参数增大内存消耗增加该参数需修改单一进程同时可打开文件数量(* soft nofile 65536 * hard nofile 65536)的限制后生效。 2) work_threads=12 cpu数量此处设置cpu核心数量 3) thread_stack_size=256 测试配置如下 work_threads=12 thread_stack_size=256 max_connections=65535 2、Storage优化

work_threads= work_threads + 1 + (disk_reader_threads + disk_writer_threads) * store_path_count= 15

disk_rw_separated:磁盘读写是否分离 disk_reader_threads:单个磁盘读线程数 disk_writer_threads:单个磁盘写线程数

如果磁盘读写混合,单个磁盘读写线程数为读线程数和写线程数之后 对于单盘挂载方式,磁盘读写线程分别设置为1即可

如果磁盘做了RAID,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘性能 buff_size=512增大提升磁盘IO的另外一个技巧,一次尽可能多写入或多读取。也就是说,将程序的读写buffer设置得尽可能大一些。例如日志或者redo log的写入,不是每次调用都直接写磁盘,而是先缓存到内存中,等buffer满了再写入磁盘,也可以定时写入磁盘。 测试配置如下

thread_stack_size=512KB disk_reader_threads = 4 disk_writer_threads = 4 buff_size=512 max_connections=65535 accept_threads=10 work_threads=16a

以上配置压力测试上传并发2w 事务平均响应时间0.46秒,4w事务平均响应时间2.2秒。

四、FastDFS使用

1.上传文件

1. client询问tracker上传到的storage; 2. tracker返回一台可用的storage;

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

上传文件时,文件ID由storage server生成并返回给client

文件ID包含了组名和文件名,storage server可以直接根据该文件名定位到文件

FastDFS 提供了多种方式上传文件: 使用 fdfs_upload_file 上传 使用 C 语言客户端接口上传 使用 PHP 客户端接口上传 使用 Java 客户端接口上传 使用 Python 客户端接口上传 使用.NET 客户端接口上传

根据具体情况选择使用,上传均支持断点续传。

如果Java的客户端,在API的配置文件中配置 tracker服务器,如果有多个tracker服务器,就配置多台.

WEB-INF/classes/fdfs_client.conf

connect_timeout = 2 network_timeout = 30 charset = UTF-8 http.tracker_http_port = 8080 http.anti_steal_token = no http.secret_key = FastDFS1234567890 tracker_server =192.168.10.27:22122 tracker_server = 192.168.10.28:22122 2.下载文件

1. client询问tracker可下载指定文件的storage,参数为文件ID(组名和文件名); 2. tracker返回一台可用的storage; 3. client直接和storage通信完成文件下载。 使用 fdfs_download_file 通过 tracker 服务器下载 使用 nginx 通过 http 方式直接从 storage 下载(支持断点续传,作者推荐) 3.监视服务器资源

使用 fdfs_monitor 查看 tracker 和所有 group 的运行情况

fdfs_monitor /etc/fdfs/client.conf

[2015-04-02 09:48:26] DEBUG - base_path=/data/fastdfs/client, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0,

server_count=1, server_index=0

tracker server is 192.168.0.105:22122

group count: 1

Group 1:

group name = group1

disk total space = 20157 MB disk free space = 9466 MB trunk free space = 0 MB storage server count = 1 active server count = 1 storage server port = 23000 storage HTTP port = 8080 store path count = 1 subdir count per path = 256 current write server index = 0 current trunk file id = 0

Storage 1:

id = 192.168.0.105

ip_addr = 192.168.0.105 (rkhd-opensuse) ACTIVE http domain = version = 5.05

join time = 2015-03-31 18:21:56 up time = 2015-04-01 10:57:27 total storage = 20157 MB free storage = 9466 MB upload priority = 10 store_path_count = 1 subdir_count_per_path = 256 storage_port = 23000 storage_http_port = 8080 current_write_path = 0

use_connection_pool=0,

g_connection_pool_max_idle_time=3600s,

use_storage_id=0, storage server id count: 0

本文来源:https://www.bwwdw.com/article/fu6d.html

Top