安装 FastDFS
FastDFS 开发者的 GitHub 地址为: https://github.com/happyfish100
打开上述链接, 我们点击 fastdfs->release, 发现最新版的 FastDFS 为 2017 年上传的 V5.11, 接下来我们来安装最新版的 FastDFS.
在安装前, 我们新建一个目录, 用来存储所有下载文件: mkdir /download, 进入 download 目录完成接下来操作: cd /download
1. 下载安装 libfastcommon
libfastcommon 是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库, 是 FastDFS 的基础环境, 安装即可 .
1.1 下载 libfastcommon 压缩包: wget https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz
1.2 解压 libfastcommon 压缩包: tar -zxvf V1.0.36.tar.gz
1.3 进入解压目录编译安装:
cd libfastcommon-1.0.36/
编译:./make.sh
在上面这步中报错: gcc: 未找到命令, 即没有 gcc 命令, 那就安装 gcc 命令: sudo yum -y install gcc gcc-c++, 然后重新编译.
安装: sudo ./make.sh install
从安装日志中可以找到 usr/include/fastcommon common_define.h 两个路径, 先记录下来(之后用)
2. 下载安装 FastDFS
2.1 下载 FastDFS 压缩包: wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
2.2 解压: tar -zxvf V5.11.tar.gz
2.3 进入解压目录编译安装:
cd fastdfs-5.11/
编译:./make.sh (注意: 需要 perl 的支持, 否则不能运行, 可以参考此文章 https://blog.csdn.net/wtwshui/article/details/79415799 安装)
安装: sudo ./make.sh install
从安装日志中可以找到 /usr/include/fastdfs fdfs_define.h 两个路径, 先记录下来(之后用)
2.4 查看安装后的相应文件与目录
2.4.1 服务脚本: ll /etc/init.d/ | grep fdfs
2.4.2 配置文件(这四个是开发者给的样例配置文件):ll /etc/fdfs/
2.4.3 命令工具: ll /usr/bin/ | grep fdfs
3. 配置 FastDFS 跟踪器(Tracker)
首先, 将 /etc/fdfs / 目录下开发者给的样例配置文件复制并重命名:
进入目录: cd /etc/fdfs/
复制文件:
- sudo cp client.conf.sample client.conf
- sudo cp storage.conf.sample storage.conf
- sudo cp tracker.conf.sample tracker.conf
- sudo cp storage_ids.conf.sample storage_ids.conf
1. 编辑配置文件: vim tracker.conf
2. 修改配置文件: 其余的默认即可
配置文件是否不生效, false 为生效, 不变即可:
disabled=false
提供服务的端口, 不变即可:
port=22122
Tracker 数据和日志目录地址, 该目录必须手动创建:
base_path=/root/data/fastdfs/tracker
HTTP 服务端口, 修改为 80:
http.server_port=80
3. 创建 tracker 基础数据目录, 即 base_path 对应的目录
mkdir -p /root/data/fastdfs/tracker
4. 防火墙中打开跟踪端口(默认的 22122):
sudo firewall-cmd --permanent --zone=public --add-port=22122/tcp
5. 重启防火墙:
sudo firewall-cmd --reload
6. 查看防火墙中开启的端口:
sudo firewall-cmd --list-port
注意: CentOS7 以上使用 4.5.6 方式开启防火墙, CentOS6 版本参考 http://www.mamicode.com/info-detail-971703.html 做相应操作
7. 启动 Tracker, 初次成功启动, 会在 /home/bdc/data/fastdfs/ (配置的 base_path)下创建 data,logs 两个目录.
sudo service fdfs_trackerd start
8. 查看 FastDFS Tracker 是否已成功启动 ,22122 端口正在被监听, 则算是 Tracker 服务安装启动成功.
sudo netstat -ntlp | grep 22122 或 sudo lsof -i:22122
9. 关闭 Tracker 命令:
sudo service fdfs_trackerd stop
10. 设置 Tracker 开机启动
sudo chkconfig --add fdfs_trackerd
11. 查看开机启动任务:
sudo chkconfig --list
4. 配置 FastDFS 存储器(Storage)
编辑配置文件: sudo vim storage.conf
修改配置文件: 其余的默认即可
配置文件是否不生效, false 为生效, 不变即可:
disabled=false
指定此 storage server 所在组(卷), 根据自身需求更改:
group_name=group1
指定 storage server 服务端口, 默认即可:
port=23000
心跳间隔时间, 单位为秒 (这里是指主动向 tracker server 发送心跳), 默认即可:
heart_beat_interval=30
Storage 数据和日志目录地址, 该目录必须手动创建:
base_path=/root/data/fastdfs/storage
存放文件时 storage server 支持多个路径. 这里配置存放文件的基路径数目, 通常只配一个目录.
store_path_count=1
逐一配置 store_path_count 个路径, 索引号基于 0. 如果不配置 store_path0, 那它就和 base_path 对应的路径一样.
store_path0=/root/data/fastdfs/storage
FastDFS 存储文件时, 采用了两级目录. 这里配置存放文件的目录个数. 如果本参数只为 N(如: 256), 那么 storage server 在初次运行时, 会在 store_path 下自动创建 N * N 个存放文件的子目录.
subdir_count_per_path=256
tracker_server 的列表 , 会主动连接 tracker_server, 有多个 tracker server 时, 每个 tracker server 写一行.
tracker_server=bdcTracker:22122
允许系统同步的时间段 (默认是全天) . 一般用于避免高峰同步产生一些问题而设定.
- sync_start_time=00:00
- sync_end_time=23:59
访问端口
http.server_port=80
注意: 需要重启 tracker 后, 配置才会生效
创建 Storage 基础数据目录, 对应 base_path 目录及 store_path0 路径
mkdir -p /root/data/fastdfs/storage
防火墙中打开存储器端口(默认的 23000)
sudo firewall-cmd --permanent --zone=public --add-port=23000/tcp
重启防火墙:
sudo firewall-cmd --reload
查看防火墙中开启的端口:
sudo firewall-cmd --list-port '
补充: 由于上面 tracker 地址配置的不是 ip 地址, 所以我们要修改 host 文件, 使之与 ip 对应:
sudo vim /etc/hosts
添加如下内容, 下面 ip 为虚拟机 ip:
192.168.105.133 bdcTracker
启动 Storage, 启动 Storage 前确保 Tracker 是启动的. 初次启动成功, 会在 / root/data/fastdfs/storage 目录下创建 data, logs 两个目录.
sudo service fdfs_storaged start
查看 Storage 是否成功启动, 23000 端口正在被监听, 则 Storage 启动成功.
sudo netstat -ntlp | grep 23000 或 sudo lsof -i:23000 或 sudo netstat -ntlp | grep fdfs
关闭 Storage:
sudo service fdfs_storaged stop
查看 Storage 和 Tracker 是否在通信:
fdfs_monitor /etc/fdfs/storage.conf
在打印结果中, 看到 ip_addr = 192.168.105.133 (bdcTracker) ACTIVE , 表示正在通信.
设置 Storage 开机启动
sudo chkconfig fdfs_storaged on
Storage 目录, 同 Tracker,Storage 启动成功后, 在 base_path 下创建了 data,logs 两个目录, 记录着 Storage Server 的信息. 在 store_path0 目录下, 创建了 N*N 个子目录, 用于存储文件.
5. 文件上传测试
修改 Tracker 服务器中的客户端配置文件: sudo vim client.conf
修改配置, 未列出的默认即可:
Client 的数据和日志目录, 该目录必须手动创建:
base_path=/root/data/fastdfs/client
Tracker 端口
tracker_server=bdcTracker:22122
Http 访问端口
http.tracker_server_port=80
创建 Client 数据目录:
mkdir -p /root/data/fastdfs/client
上传测试
在 linux 内部执行如下命令上传 02.jpg 图片
fdfs_upload_file /etc/fdfs/client.conf /home/bdc / 图片 / 02.jpg
上传成功后返回文件 ID 号: group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg, 返回的文件 ID 由 group, 存储目录, 两级子目录, fileid, 文件后缀名 (由客户端指定, 主要用于区分文件类型) 拼接而成.
查看文件:
ll /root/data/fastdfs/storage/data/00/00
安装 Nginx
前言: Nginx 安装环境准备工作
1) gcc 准备: 安装 nginx 需要先将官网下载的源码进行编译, 编译依赖 gcc 环境, 查看是否安装 gcc:
yum list installed | grep gcc
如果没有 gcc 环境, 需要安装 gcc, 执行命令安装:
sudo yum -y install gcc gcc-c++
2) PCRE 准备: PCRE 是一个 Perl 库, 包括 Perl 兼容的正则表达式库. nginx 的 http 模块使用 PCRE 来解析正则表达式, 所以需要在 Linux 上安装 PCRE 库, 执行安装命令:
sudo yum -y install pcre pcre-devel
3) zlib 准备: zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip, 所以需要在 linux 上安装 zlib 库, 运行安装命令:
sudo yum -y install zlib zlib-devel
4) openssl 准备: OpenSSL 是一个强大的安全套接字层密码库, 囊括主要的密码算法, 常用的密钥和证书封装管理功能及 SSL 协议, 并提供丰富的应用程序供测试或其它目的使用.
nginx 不仅支持 http 协议, 还支持 https(即在 ssl 协议上传输 http), 所以需要在 linux 安装 openssl 库. 运行安装命令:
sudo yum -y install openssl openssl-devel
正式安装 Nginx
目前版本的 FastDFS 还不支持 http 访问文件, 所以要想通过 http 来访问已经上传成功的文件, 需要安装 Nginx 支持; Nginx 只需要安装到 StorageServer 所在的服务器即可, 用于支持 http 访问文件.
1. 下载 Nginx:
wget https://nginx.org/download/nginx-1.14.0.tar.gz
2. 解压
tar -zxvf nginx-1.14.0.tar.gz
3. 进入解压目录编译安装:
3.1 进入目录:
cd nginx-1.14.0
3.2 配置 Nginx: 启用 openssl 密码库, 并使用当前用户启动 nginx, 其余默认即可
./configure --with-http_ssl_module --user=root
3.3 编译 Nginx:
make -j 4
3.4 安装:
sudo make install
3.5 创建软链接(类似快捷方式), 并启动 Nginx:
- sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/
- sudo nginx
其他命令:
- sudo nginx -s stop
- sudo nginx -s reload
3.6 查看是否启动成功:
sudo netstat -anp | grep nginx
3.7 设置 nginx 开机启动
sudo vim /etc/rc.local
添加下面一行:
/usr/local/nginx/sbin/nginx
然后更改文件权限
sudo chmod 744 /etc/rc.d/rc.local
3.8 查看 nginx 的版本及模块
nginx -V
3.9 访问刚刚上传的图片
1)修改 nginx.conf 配置
编辑文件: sudo vim /usr/local/nginx/conf/nginx.conf
注: 原配置文件中有很多注释掉的内容, 这里不再粘贴,, 并且需要改动的地方已经加注释标示出来了
- # 修改 nginx 启动用户, 和系统启动用户一致, nginx 默认启动用户为 nobody, 在 nginx 安装的时候已经指定为 root 用户
- user root;
- worker_processes 1;
- events {
- worker_connections 1024;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- sendfile on;
- server {
- # 侦听端口
- listen 80;
- server_name localhost;
- # 修改映射地址, 将 http 中的地址 / group1/M00 / 映射为系统实际地址 / home/bdc/data/fastdfs/storage/data/
- location /group1/M00/ {
- alias /root/data/fastdfs/storage/data/;
- }
- location / {
- root html;
- index index.html index.htm;
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
- }
重启 nginx:sudo nginx -s reload
访问文件:
方式一: http://ip:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
注意这里可能出现问题: Centos7 自带的最初版火狐浏览器解析上面地址的时候可能解析为一个目录, 即: http://bdctracker:8081/group1/M00/00/00/wKhphFrhIVuADqfzAASB-wpUaac425.jpg / 这种形式, 导致访问不到文件, 问题出在 wKhphFrhIVuADqfzAASB-wpUaac425.jpg 这个位置, 把文件和访问地址的后缀名改为. jpeg 就可以访问到, 具体原因不太清楚, 不过谷歌浏览器或者更新后的火狐浏览器又不会出现问题, 按上面地址又可以访问到文件, 学艺不精, 不再研究....
另外注意: 防火墙要放行 80 端口
方式二: wget http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg, 可以获取到文件则 nginx 配置成功.
FastDFS 配置 Nginx 模块
前言: fastdfs-nginx-module 模块说明
FastDFS 通过 Tracker 服务器, 将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 数据同步有延迟的问题.
假设 Tracker 服务器将文件上传到了 Stroage1, 上传成功后文件 ID 已经返回给客户端. 此时 FastDFS 存储集群机制会将这个文件同步到同组存储 Stroage2, 在文件还没有复制完成的情况下, 客户端如果用这个文件 ID 在 Stroage2 上取文件, 就会出现文件无法访问的错误. 而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件, 避免客户端由于复制延迟导致的文件无法访问错误.
安装配置 fastdfs-nginx-module 模块
1) 下载 fastdfs-nginx-module
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip
2) 解压
unzip master.zip
3) 停止 nginx 服务
sudo nginx -s stop
4) nginx 添加 fastdfs-nginx-module 模块重新编译安装
进入 nginx 解压目录
cd nginx-1.14.0/
nginx 配置 fastdfs-nginx-module 模块
./configure --with-http_ssl_module --user=root --add-module=../fastdfs-nginx-module-master/src/
编译
make
注意: 编译时可能会出现错误, 如出现, 解决方式如下:
- cd fastdfs-nginx-module-master/src/
- vim config
修改文件内容如下:
ngx_module_incs="/usr/include/fastcommon /usr/include/fastdfs" 说明: 里面两个路径是上文中记录的
CORE_INCS="$CORE_INCS /usr/include/fastcommon /usr/include/fastdfs"
修改后重新 nginx 配置 fastdfs-nginx-module 模块
安装
sudo make install
5) 查看 Nginx 的模块
nginx -V
若有下面配置则证明模块添加成功:
configure arguments: --add-module=../fastdfs-nginx-module-master/src/
6) 修改配置文件 1
复制 fastdfs-nginx-module 源码中的配置文件 mod_fastdfs.conf, 并修改配置
sudo cp ~/download/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
编辑 mod_fastdfs.conf 文件:
sudo vim /etc/fdfs/mod_fastdfs.conf
修改如下配置, 其余默认即可:
- # 连接超时时间
- connect_timeout=15
- # TrackerServer 的 IP 和端口
- tracker_server=bdcTracker:22122
- # StorageServer 端口
- storage_server_port=23000
- # 如果文件 ID 的 uri 中包含 group 分组信息, 则要设置为 true
- url_have_group_name = true
- # Storage 配置的 store_path0 路径, 必须和 storage.conf 中的一致
- store_path0=/root/data/fastdfs/storage
7) 修改配置文件 2
复制 FastDFS 源码中的配置文件到 / etc/fdfs 目录:
- cd ~/download/fastdfs-5.11/conf/
- sudo cp anti-steal.jpg http.conf mime.types /etc/fdfs/
8) 修改配置文件 3
修改 nginx 的配置文件 nginx.conf, 修改下面配置, 其它不变:
- sudo vim /usr/local/nginx/conf/nginx.conf
- #location /group1/M00/ {
- #alias /home/bdc/data/fastdfs/storage/data/;
- #}
- # 添加 fastdfs-nginx-module 模块
- location ~/group([0-9])/M00/ {
- ngx_fastdfs_module;
- }
注意:
1) nginx.conf 配置中的 listen 80 端口值要与 / etc/fdfs/storage.conf 中的 http.server_port=80 (前面配置为 80 了)端口值相对应; 如果改成其它端口, 则需要统一, 同时在防火墙中打开该端口.
2) location 的配置, 在集群模式中, 有多个 group, 所以这里以正则的方式配置, 如果是单一节点可以只配置指定 group.
9) 启动 Nginx
sudo nginx
打印类似如下信息, 则配置成功:
ngx_http_fastdfs_set pid=119826
10) http 访问
能获取到文件, 则 nginx 配置成功; 注意和前面中直接使用 nginx 路由访问不同的是, 这里配置 fastdfs-nginx-module 模块, 可以重定向文件链接到源服务器取文件.
- http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
- wget http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
好了, 到此 FastDFS 单节点安装配置成功, 接下来我们使用 Java 操作 FastDFS 实现文件上传和下载, 最后将单节点模式改为集群模式
JAVA 代码上传
- package com.fdfs.demo;
- import org.csource.fastdfs.ClientGlobal;
- import org.csource.fastdfs.StorageClient;
- import org.csource.fastdfs.StorageServer;
- import org.csource.fastdfs.TrackerClient;
- import org.csource.fastdfs.TrackerServer;
- public class Demo1 {
- public static void main(String[] args) throws Exception {
- // 加载配置文件, 配置文件中的内容就是 tracker 服务的地址
- ClientGlobal.init("fdfs_client.conf");
- // 创建一个 TrackerClient 对象
- TrackerClient trackerClient = new TrackerClient();
- // 使用 TrackerClient 对象创建连接, 获得一个 TrackerServer 对象
- TrackerServer trackerServer = trackerClient.getConnection();
- // 定义存储服务器对象句柄
- StorageServer storageServer = null;
- StorageClient storageClient = new StorageClient(trackerServer, storageServer);
- String[] strings = storageClient.upload_file("D:/log.txt", "txt", null);
- for (String str : strings) {
- System.out.println(str);
- }
- }
- }
- connect_timeout = 2
- network_timeout = 30
- charSet = UTF-8
- http.tracker_http_port = 80
- http.anti_steal_token = no
- http.secret_key = FastDFS1234567890
- tracker_server = 192.168.220.128:22122
来源: http://www.bubuko.com/infodetail-2768454.html