安装FastDFS+Nginx

时间:2022-07-24
本文章向大家介绍安装FastDFS+Nginx,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

安装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