FastDFS 是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。适合以文件为载体的在线服务,如图片网站、视频网站等等。
1. 环境和软件安装包清单
2. FastDFS 安装
FastDFS 服务端有两个重要的角色:跟踪器(tracker)和存储器(storage)。客户端通过 tracker 将文件存储在 storage 服务器。在访问量不大情况下,可将 tracker 和 storage 都部署在同一台服务器上,后期根据业务需要进行扩展。以下是安装所需的软件包:
1 2 3 4 5 6 7 8 9
| total 10552 -rw-r--r-- 1 gw gw 17510 Sep 20 2017 fastdfs-nginx-module_v1.16.tar.gz -rw-r--r-- 1 gw gw 344620 Sep 22 2017 FastDFS_v5.08.tar.gz -rw-r--r-- 1 gw gw 434873 Sep 20 2017 libfastcommon-1.0.36.tar.gz -rw-r--r-- 1 gw gw 981093 Sep 20 2017 nginx-1.12.1.tar.gz -rw-r--r-- 1 gw gw 5365054 Sep 20 2017 openssl-1.0.2l.tar.gz -rw-r--r-- 1 gw gw 2009464 Sep 20 2017 pcre-8.36.tar.gz -rw-r--r-- 1 gw gw 607698 Sep 20 2017 zlib-1.2.11.tar.gz
|
2.1 libfastcommon 安装
| libfastcommon 是从FastDFS 和FastDHT 中提取出来的公共C函数库,FastDFS 依赖该模块,需要首先安装它。
|
解压缩并进入解压缩后的文件夹的根目录:
1
| # tar zxvf libfastcommon-1.0.36.tar.gz && cd libfastcommon-1.0.36
|
执行编译安装:
1
| # ./make.sh && ./make.sh install
|
| 如果报 gcc: command not found 错误,说明系统缺少gcc 编译环境。先安装gcc 环境:
重新编译安装:
|
安装完成后,返回到上一级目录(软件包所在的根目录):
2.2 fastdfs 安装
解压缩并进入解压缩后的文件夹的根目录:
1
| # tar zxvf fastdfs-5.10.tar.gz && cd fastdfs-5.10
|
执行编译安装:
1
| # ./make.sh && ./make.sh install
|
| 如果报 perl: command not found 错误,说明系统缺少perl 编译环境。先安装perl 环境:
重新编译安装:
|
| 安装成功后,在系统/etc 路径下会生成一个/fdfs 目录,该目录下是FastDFS 相关的一些示例配置文件内容。 1 2 3 4 5 6
| total 24 -rw-r--r-- 1 root root 1461 Jun 5 16:46 client.conf.sample -rw-r--r-- 1 root root 7927 Jun 5 16:46 storage.conf.sample -rw-r--r-- 1 root root 105 Jun 5 16:46 storage_ids.conf.sample -rw-r--r-- 1 root root 7200 Jun 5 16:46 tracker.conf.sample
|
|
将当前路径下 conf 目录里面的 anti-steal.jpg,http.conf,mime.types 复制到 /etc/fdfs 目录中:
1
| # cp conf/anti-steal.jpg conf/http.conf conf/mime.types /etc/fdfs/
|
安装完成后,返回到上一级目录(软件包所在的根目录):
2.2.1 tracker 配置
将/etc/fdfs/tracker.conf.sample
重命名为/etc/fdfs/tracker.conf
并编辑它:
1
| # mv /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf && vi /etc/fdfs/tracker.conf
|
找到base_path
的配置行,将其修改为:
1
| base_path=/home/fanlychie/fastdfs
|
| 这里的base_path 是tracker 用于存储数据文件(其路径为:base_path/data)以及日志文件(其路径为:base_path/logs)的基路径。如果配置的目录尚未存在,需要先创建该路径:
|
启动命令:
停止命令:
重启命令:
2.2.2 storage 配置
将/etc/fdfs/storage.conf.sample
重命名为/etc/fdfs/storage.conf
并编辑它:
1
| # mv /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf && vi /etc/fdfs/storage.conf
|
找到base_path
的配置行,将其修改为:
1
| base_path=/home/fanlychie/fastdfs/storage
|
| 这里的base_path 是storage 用于存储数据文件(其路径为:base_path/data)以及日志文件(其路径为:base_path/logs)的基路径。如果配置的目录尚未存在,需要先创建该路径:
|
找到store_path0
的配置行,将其修改为:
1
| store_path0=/home/fanlychie/fastdfs/storage
|
| store_path0 如果配置的路径不存在,则会使用base_path 配置的路径。
|
找到tracker_server
的配置行,将其修改为tracker
服务器的地址:
1
| tracker_server=192.168.1.102:22122
|
启动命令:
停止命令:
重启命令:
2.2.3 client 配置
将/etc/fdfs/client.conf.sample
重命名为/etc/fdfs/client.conf
并编辑它:
1
| # mv /etc/fdfs/client.conf.sample /etc/fdfs/client.conf && vi /etc/fdfs/client.conf
|
找到base_path
的配置行,将其修改为:
1
| base_path=/home/fanlychie/fastdfs
|
| 这里的base_path 是storage 用于存储数据文件(其路径为:base_path/data)以及日志文件(其路径为:base_path/logs)的基路径。如果配置的目录尚未存在,需要先创建该路径:
|
找到tracker_server
的配置行,将其修改为tracker
服务器的地址:
1
| tracker_server=192.168.1.102:22122
|
2.3 fastdfs-nginx-module 安装
解压缩并进入解压缩后的文件夹的根目录:
1
| # tar zxvf fastdfs-nginx-module_v1.16.tar.gz && cd fastdfs-nginx-module
|
编辑src/mod_fastdfs.conf
:
1
| # vi src/mod_fastdfs.conf
|
找到tracker_server
的配置行,将其修改为tracker
服务器的地址:
1
| tracker_server=192.168.1.102:22122
|
找到url_have_group_name
的配置行,将其改为:
1
| url_have_group_name = true
|
| 如果请求的url地址中包含了group_name (如“group1/M00/00/00/xxx”)则应设为true。 如果请求的url地址中不包含group_name (如“/M00/00/00/xxx”)则应设为false。 |
找到store_path0
的配置行,将其改为:
1
| store_path0=/home/fanlychie/fastdfs/storage
|
| 必须配置与本机storage.conf 中配置的store_path0 路径相同。 |
复制文件src/mod_fastdfs.conf
到/etc/fdfs/
目录下:
1
| # cp src/mod_fastdfs.conf /etc/fdfs/
|
编辑src/config
:
找到CORE_INCS
的配置行:
1
| CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
|
去掉路径中的/local
,改为如下并保存退出:
1
| CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
|
2.4 nginx 安装
由于FastDFS
提供的HTTP服务较为简单,它无法提供负载均衡等高性能的服务。因此,FastDFS
通常会结合Nginx
来使用。安装Nginx
所需的依赖有:
- nginx 的 gzip 模块(压缩)需要依赖 zlib 库
- nginx 的 ssl 模块(支持 HTTPS)需要依赖 openssl 库
- nginx 的 rewrite 模块(支持 URL 重写)需要依赖 pcre 库
2.5.1 pcre 安装
解压缩并进入解压缩后的文件夹的根目录:
1
| # tar zxvf pcre-8.36.tar.gz && cd pcre-8.36
|
执行编译安装:
1
| # ./configure && make && make install
|
创建软连接(64位系统):
1
| # ln -s /usr/local/lib/libpcre.so.1 /lib64
|
创建软连接(32位系统):
1
| # ln -s /usr/local/lib/libpcre.so.1 /lib
|
回到上一级目录(软件包所在的根目录):
2.4.2 zlib 安装
解压缩并进入解压缩后的文件夹的根目录:
1
| # tar zxvf zlib-1.2.11.tar.gz && cd zlib-1.2.11
|
执行编译安装:
1
| # ./configure && make && make install
|
回到上一级目录(软件包所在的根目录):
2.5.3 openssl 安装
解压缩并进入解压缩后的文件夹的根目录:
1
| # tar zxvf openssl-1.0.2l.tar.gz && cd openssl-1.0.2l
|
执行编译安装:
1
| # ./config && make && make install
|
回到上一级目录(软件包所在的根目录):
2.5.4 nginx 安装
解压缩并进入解压缩后的文件夹的根目录:
1
| # tar zxvf nginx-1.12.1.tar.gz && cd nginx-1.12.1
|
编译安装(注意修改--add-module
的路径):
1
| # ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src/ && make && make install
|
| –add-module 的路径需要改成你服务上上面配置好的fastdfs-nginx-module 对应的路径。
|
编辑 nginx 配置文件:
1
| # vi /usr/local/nginx/conf/nginx.conf
|
配置如下:
1 2 3 4 5 6 7 8
| user root; ... ... location /group1/M00 { root /home/fanlychie/fastdfs/storage/data/; ngx_fastdfs_module; }
|
| root 指定到storage 配置的${base_path}/data/ 目录下。
|
启动命令:
1
| # /usr/local/nginx/sbin/nginx
|
停止命令:
1
| # /usr/local/nginx/sbin/nginx -s stop
|
重新加载命令:
1
| # /usr/local/nginx/sbin/nginx -s reload
|
3. FastDFS 测试
新建测试文件:
1
| $ echo 'Hello World!' > hello.txt
|
测试上传:
1
| $ fdfs_test /etc/fdfs/client.conf upload hello.txt
|
上传成功之后返回类似信息:
1
| example file url: http://192.168.1.102/group1/M00/00/00/CgoKgFsXN6qAWGyzAAAADT9THu8575.txt
|
访问测试:
1
| $ curl http://192.168.1.102/group1/M00/00/00/CgoKgFsXN6qAWGyzAAAADT9THu8575.txt
|
4. 开启服务端口
对外开启 80、8080、22122、23000 端口。
CentOS7 firewall 防火墙配置:
1 2 3 4
| firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --permanent --add-port=22122/tcp firewall-cmd --permanent --add-port=23000/tcp
|
重加载:
CentOS6 iptables 防火墙配置:
1 2 3 4
| -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
|
重加载: