Fastdfs 单节点安装使用教程整理

1 简介

Fastdfs的具体介绍看这里:http://www.jianshu.com/p/af10e44b0fb6

2 安装准备

名称 版本 地址 作用
系统 CentOS-7-x86_64-DVD-1708.iso 点击这里 系统
Fastdfs Fastdfs_v5.11 点击这里 分布式系统
libfastcommon libfastcommon_1.0.36 点击这里 公共 C 函数库
fastdfs-nginx-module fastdfs-nginx-module-master 点击这里 storage节点http服务nginx模块
nginx nginx-1.12.2 点击这里 反响代理服务器

此处有安装包集合,一键下载:点击这里

Fastdfs 单节点安装使用教程整理_第1张图片

安装包集合

 

准备好虚拟机和安装运行环境:根据实际情况自行检查安装

$yum -y install unzip zip   #安装解压工具unzip
$systemctl stop firewalld.service    #停止firewall
$systemctl disable firewalld.service    #禁止firewall开机启动
备注:简单之余就关闭防火墙

安装perl环境,后续编译fastdfs会用到

$yum -y install perl*     #yum安装perl相关支持) 
$yum -y install cpan      #perl需要的程序库,需要cpan的支持

3 安装Fastdfs

安装流程

1 安装依赖包gcc
2 安装libfatscommon
3 安装Fastdfs
4 配置Tracker
5 配置Storage

服务器规划

跟踪服务器(Tracker Server):192.168.64.31
存储服务器(Storage Server):192.168.64.31
数据存储目录:/opt
解压目录:/usr/local/src
Nginx解压目录:/usr/local/src

1 安装依赖包

安装gcc编译器,fastdfs是用c语言开发而来的。

$yum -y install gcc-c++  

至此,gcc编译器安装OK!

2 安装libfatscommon

解压--->编译--->安装
解压完毕进入解压目录libfastcommon-1.0.36

$unzip libfastcommon-1.0.36.zip

Fastdfs 单节点安装使用教程整理_第2张图片

libfastcommon目录

 

执行编译和安装

$./make
$./make install

Fastdfs 单节点安装使用教程整理_第3张图片

image.png

 

至此libfastcommon就已经安装ok了,上图中红色框标注的内容---ibfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以此处需要设置软链接,将lib库文件添加到usr/local/bin(用户放置自己的可执行程序)中

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

备注 .so -- shared object,用户层的动态库 。
至此,libfatscommon安装OK!

3 安装Fastdfs

解压--->编译--->安装

#解压
$unzip fastdfs-5.11.zip
#进入解压目录
#编译
$./make
#安装
$./make install

编译成功示图

Fastdfs安装在/etc/fdfs目录下,此目录如下图所示:

 

Fastdfs 单节点安装使用教程整理_第4张图片

/etc/fdfs目录

 

安装成功后就会生成如上的4个.sample文件(示例配置文件),我们再分别拷贝这4个配置文件以备后用:

$cp client.conf.sample client.conf
$cp storage.conf.sample storage.conf
$cp storage_ids.conf.sample storage_ids.conf
$cp tracker.conf.sample tracker.conf

至此,Fastdfs安装OK!

4 配置Tracker

首先创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等。此路径在后续的Tracker文件配置中都用到

$mkdir /opt/fastdfs_tracker

编辑上一步copy的/etc/fdfs目录下的tracker.conf配置文件,打开文件后依次做如下修改:

disabled=false         #启用配置文件(默认启用)
port=22122             #设置tracker的端口号,通常采用22122这个默认端口
base_path=/opt/fastdfs_tracker #设置tracker的数据文件和日志目录
http.server_port=88    #设置http端口号,默认为8080,记住此端口号,对应于后续nginx的listen端口

配置完毕!
启动tracker服务器

#启动
$service fdfs_trackerd start
或者
$/etc/init.d/fdfs_trackerd start

Fastdfs 单节点安装使用教程整理_第5张图片

启动tracker服务器

 

关闭tracker服务器

#关闭
$service fdfs_trackerd stop
或者
$/etc/init.d/fdfs_trackerd stop

Fastdfs 单节点安装使用教程整理_第6张图片

关闭tracker服务器

如果启动命令执行成功,那么在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也被正常监听

Fastdfs 单节点安装使用教程整理_第7张图片

data和logs目录以及监听


正常启动后,可以将tracker设置为开机启动,打开/etc/rc.d/目录,在rc.local中添加service fdfs_trackerd start,并且对rc.local进行授权。

 

$chmod +x /etc/rc.d/rc.local    #对rc.local进行授权

Fastdfs 单节点安装使用教程整理_第8张图片

对rc.local进行授权

至此,Tracker配置OK!

5 配置Storage

同理,和Tracker配置流程一致。创建Storage服务器的文件目录fastdfs_storage,同时比Tracker多建了一个文件存储路径目录fastdfs_storage_data,用于存放接收的文件。

$mkdir /opt/fastdfs_storage
$mkdir /opt/fastdfs_storage_data

修改目录/etc/fdfs/storage.conf配置文件,打开文件后依次做以下修改:

disabled=false      #启用配置文件(默认启用)
group_name=group1   #组名,根据实际情况修改
port=23000          #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/opt/fastdfs_storage #设置storage数据文件和日志目录
store_path_count=1  #存储路径个数,需要和store_path个数匹配
store_path0=/opt/fastdfs_storage_data   #实际文件存储路径
tracker_server=192.168.64.32:22122 #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功(此处的ip是我的CentOS虚拟机ip)
http.server_port=7777  #设置 http 端口号

配置OK!
启动Storage服务

$service fdfs_storaged start
或者
$/etc/init.d/fdfs_storaged start

关闭Storage服务

$service fdfs_storaged stop
或者
$/etc/init.d/fdfs_storaged stop

备注:启动storage时,要先启动tracker,不然无法启动监视

Fastdfs 单节点安装使用教程整理_第9张图片

启动成功后data目录

 

开启Tracker和Storage服务

 

开启Tracker和Storage服务

如上图,此时已经正常监听tracker的22122端口和storage的23000端口。

确定了storage服务器启动成功后,还有一项工作就是看看storage服务器是否已经登记到 tracker服务器(也可以理解为tracker与storage是否整合成功),运行以下命令:

$/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

Fastdfs 单节点安装使用教程整理_第10张图片

整合成功

看到**192.168.111.11 ACTIVE **字样,即可说明storage服务器已经成功登记到了tracker服务器。

添加storage服务开机启动,打开/etc/rc.d/rc.local文件追加service fdfs_storaged start

至此,storage服务器配置ok!

4 初步测试

测试时需要设置客户端的配置文件,编辑/etc/fdfs/client.conf文件,打开后依次做如下修改:

base_path=/opt/fastdfs_tracker       #tracker服务器文件路径
tracker_server=192.168.64.32:22122  #tracker服务器IP地址和端口号
http.tracker_server_port=88  # tracker 服务器的 http 端口号,必须和tracker的设置对应起来

配置完毕就可以上传文件了。
执行客户端上传命令:

$/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  note.txt

Fastdfs 单节点安装使用教程整理_第11张图片

上传文件

返回的路径就只文件的存储目录,在/opt/fastdfs_storage_data目录下,

 

Fastdfs 单节点安装使用教程整理_第12张图片

存储目录

想在web段查看上次存储的文件,需要安装nginx和fastdfs-nginx-module。

至此,简单测试OK!

5 安装fastdfs-nginx-module

fastdfs-nginx-module 作用说明

FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假Tracker 服务器将文件上传到了 192.168.64.32,上传成功后文件ID已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.64.33,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.64.33 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误

5.1 安装准备

在安装nginx之前需要先安装一些模块依赖的lib库:pcre-devel、zlib-devel、openssl-devel

$yum -y install pcre pcre-devel  
$yum -y install zlib zlib-devel  
$yum -y install openssl openssl-devel

准备完毕,开始分别为tracker和storage安装配置nginx。
安装流程

1 解压fastdfs-nginx-module-master和nginx-1.12.2
2 ./configure配置nginx参数
3 编译安装
4 修改nginx的配置文件nginx.conf
5 copy http.conf和mime.types文件
6 copy mod_fastdfs.conf文件并修改参数
7 启动nginx

5.2 安装storage nginx

1 ) 解压

$unzip fastdfs-nginx-module-master.zip
$tar -zxvf nginx-1.12.2.tar.gz

2 ) ./configure配置
解压完毕后进入nginx目录,在执行./configure配置nginx参数的时候,需要将fastdfs-nginx-moudle源码作为模块编译进去,执行以下命令:

$./configure --prefix=/usr/local/src/nginx --add-module=/usr/local/src/fastdfs-nginx-module-master/src

配置成功!

 

Fastdfs 单节点安装使用教程整理_第13张图片

./configure配置

3 )编译安装

$make
$make install

安装完成后再指定路径/usr/local/src/nginx可查看到安装的目录

 

Fastdfs 单节点安装使用教程整理_第14张图片

nginx安装目录

4 )修改nginx.conf
修改nginx的配置文件,打开/conf/nginx.conf文件,修改http中server的listen,添加location, 具体如下:

listen   7777; #注意,此处的listen对应于/etc/fdfs/storage.conf中的http.server_port=7777

#location放在server里面
location ~/group1/M00 {
      root /opt/fastdfs_storage_data/data;
      ngx_fastdfs_module;
}

5 ) copy http.conf和mime.types

$cp -r /usr/local/src/fastdfs-5.05/conf/http.conf /etc/fdfs/
$cp -r /usr/local/src/fastdfs-5.05/conf/mime.types /etc/fdfs/

6 ) 配置mod_fastdfs.conf文件
将fastdfs-nginx-module-master/src/mod_fastdfs.conf拷贝到/etc/fdfs目录下

$cp -r /usr/local/src/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/

编辑刚拷贝的mod_fastdfs.conf文件,打开并按顺序依次编译以下内容:

base_path=/opt/fastdfs_storage        #保存日志目录
tracker_server=192.168.64.32:22122   #tracker服务器的IP地址以及端口号
storage_server_port=23000             #storage服务器的端口号
url_have_group_name = true            #文件url中是否有 group 名
store_path0=/opt/fastdfs_storage_data # 存储路径
group_count = 3                       #设置组的个数,事实上这次只使用了group1

设置group_count = 3,需要在文件尾部追加这3个group setting

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

7 ) 启动nginx

$/usr/local/src/nginx/sbin/nginx            #启动
$/usr/local/src/nginx/sbin/nginx -s reload  #重新启动
$/usr/local/src/nginx/sbin/nginx -s stop    #停止

显示如下信息说明nginx已启动成功:

 

nginx启动成功

通过浏览器看到nginx的主页:端口为7777

 

Fastdfs 单节点安装使用教程整理_第15张图片

image.png

5.3 安装tracker nginx

步骤和安装storage nginx一样

$mkdir tracker_nginx
$cd nginx-1.12.2/
$./configure --prefix=/usr/local/src/tracker_nginx --add-module=/usr/local/src/fastdfs-nginx-module-master/src
$make
$make install

#安装完毕,修改tracker_nginx/conf/nginx.conf的配置文件
#listen端口和tracker.conf的http.server_port=88一致
#添加upstream和location :
#upstream 命令要放在http里面 server外面,location 在server里面,7777对应于storage的server_port

listen    88;
upstream fdfs_group1 {
     server 127.0.0.1:7777;   
}
#location放在server里面
location /group1/M00 {
     proxy_pass http://fdfs_group1;
}

#启动tracker_nginx
$/usr/local/src/tracker_nginx/sbin/nginx

Fastdfs 单节点安装使用教程整理_第16张图片

tracker_nginx的主页

6 HTTP测试

查看/etc/fdfs/client.conf文件配置是否正确:

base_path=/data/fastdfs_storage     #日志存放路径
tracker_server=192.168.64.32:22122  #tracker 服务器 IP 地址和端口号
http.tracker_server_port=88       # tracker 服务器的 http 端口号,必须和tracker的设置对应起来

通过客户端命令测试上传:

$/usr/bin/fdfs_upload_file /etc/fdfs/client.conf data/20170131.jpg

上传图片

如上图,上传成功,通过HTTP测试文件访问,打开浏览器输入ip地址+文件名看看是否能正常访问该图片:

 

Fastdfs 单节点安装使用教程整理_第17张图片

HTTP测试文件访问

至此,HTTP测试OK!

请求Tracker服务器下载图片,其实请求的是Tracker服务器上的nginx服务,因为nginx服务的端口是88端口,而tracker服务端口是22122。

tracker上的nginx起到http访问的反向代理作用,反向代理到group对应的所有storage上的nginx服务。客户端请求tracker上的nginx服务,根据配置的location /group1找到对应的group1下所有的storage服务器上的nginx服务的ip和端口(提供下载接口),然后由tracker决定使用哪台storage,最后将该storage的ngnix服务的ip和port返回给客户端。客户端拿到storage的nginx服务的ip和端口,去请求这个nginx服务,根据请求中的group1/M00与storage的nginx配置的

location ~/group1/M00 {
root /opt/fastdfs_storage_data/data;
ngx_fastdfs_module;
}

进行匹配,然后获取到文件的存储目录,然后在根据两级目录和文件名来获取到文件。

nginx 最终配置文件


user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http{

        include       mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        #access_log  logs/access.log  main;

        sendfile        on;
        #tcp_nopush     on;
        #post_entry_max_size
        client_max_body_size 200m;
        #keepalive_timeout  0;
        keepalive_timeout  15s;

        gzip  on;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_proxied any;
        gzip_min_length 1100;
        gzip_buffers 16 8k;
        gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png;
        # Some version of IE 6 don't handle compression well on some mime-types,
        # so just disable for them
        gzip_disable "MSIE [1-6].(?!.*SV1)";
        # Set a vary header so downstream proxies don't send cached gzipped
        # content to IE6
        gzip_vary on;
        #end gzip

        #cache begin
        proxy_buffering on;
        proxy_cache_valid any 10m;
        proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
        proxy_temp_path /home/temp;
        proxy_buffer_size 4k;
        proxy_buffers 100 8k;
        #cache end

        #https server设置实际操作
    server {
            listen       80;
            server_name  mee.dongfeng-nissan.com.cn;
            charset utf-8;
            access_log  logs/host.access.log  main;

         location / {
                root /home/dist;
                try_files $uri $uri/ /index.html last;
                index index.html;
         }
        location /api {
                proxy_pass http://127.0.0.1:8084/;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
                         rewrite /wss/(.*) /$1 break;
                        proxy_redirect off;
                        proxy_connect_timeout 4s;
                        proxy_read_timeout 7200s;
                        proxy_send_timeout 12s;

        }
        location /wxqyh/ {
                proxy_pass http://127.0.0.1:8080/wxqyh/;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
                        rewrite /wss/(.*) /$1 break;
                        proxy_redirect off;
                        proxy_connect_timeout 4s;
                        proxy_read_timeout 7200s;
                        proxy_send_timeout 12s;

        }
        location /admin/ {
                proxy_pass http://127.0.0.1:8081/admin/;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #add_header Access-Control-Allow-Origin *;
        }
        location /fileweb/ {
                proxy_pass http://127.0.0.1:8082/fileweb/;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #add_header Access-Control-Allow-Origin *;
        }
        #location /fastdfs/ {
        #        proxy_pass http://127.0.0.1:88;
        #        proxy_set_header Host $http_host;
        #        proxy_set_header X-Real-IP $remote_addr;
        #        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #        #add_header Access-Control-Allow-Origin *;
        # }
         location ~/group1/M00{
               #proxy_pass http://fdfs_group1;
               root /opt/fastdfs_storage_data/data;
               ngx_fastdfs_module;
         }
        #error_page  404              /404.html;
            #redirect server error pages to the static page /50x.html
            #error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    }
}

 

 

 

7 总结

要提前安装好依赖包和运行环境,关闭防火墙,做笔记整理资料。

8 参考资料

1.分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置
2.FastDFS分布式文件系统安装与使用(单节点)
3.CENTOS 7 安装perl环境
4.Centos7网络配置( 网关、dns、ip地址配置)
5.FastDFS学习笔记
6.Centos7 Linux安装命令


                                   20171107

你可能感兴趣的:(fastdfs)