centos7下安装FastDFS分布式文件存储系统

前言:该篇博客需要使用到的安装包有:FastDFS_v5.08.tar.gz,fastdfs-nginx-module_v1.16.tar.gz,libfastcommon-master.zip,nginx-1.10.0.tar.gz(这四个是必须的),若没有请自行下载。或者联系作者微信免费提供:微信昵称 unhejing

1.安装依赖

(1)GCC用来对C语言代码进行编译运行(FastDFS是由c语言写的),使用yum命令安装:

sudo yum -y install gcc

(2)安装unzip工具(用于解压安装包)

sudo yum install -y unzip zip

(3)安装libevent

sudo yum -y install libevent

(4)安装Nginx所需依赖

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

(5)安装libfastcommon-master(这个没有yum包,只能通过编译安装)

unzip libfastcommon-master.zip

进入解压完成的目录:

cd libfastcommon-master

 编译并且安装:

sudo ./make.sh 
sudo ./make.sh install

由此结束,所有依赖都安装完了,接来下是安装FastDFS

2. 安装FastDFS

(1)编译安装(解压安装包)

tar -xvf FastDFS_v5.08.tar.gz

(2)进入解压目录

扫描二维码关注公众号,回复: 9286833 查看本文章
 cd FastDFS

(3)编译安装

sudo ./make.sh 
sudo ./make.sh install

(4)校验安装结果

        1)安装完成,我们就可以在`/etc/init.d/`目录,通过命令`ll /etc/init.d/ | grep fdfs`,如图:

        fdfs_trackerd 是tracker启动脚本
        fdfs_storaged 是storage启动脚本

        2) 配置文件在/etc/fdfs

        

        tarcker.conf.sample 是tracker的配置文件模板
        storage.conf.sample 是storage的配置文件模板
        client.conf.sample 是客户端的配置文件模板 

3.启动tracker

    编辑tracker配置

(1)模板文件进行赋值和重命名:

cd /etc/fdfs
sudo cp tracker.conf.sample tracker.conf

(2)编辑配置文件

sudo vim tracker.conf

    指定日志输出目录:base_path=/home/fastdfs/tracker

(3) 创建目录    

sudo mkdir -p /home/fastdfs/tracker

(4)启动tracker

    可以使用 sh /etc/init.d/fdfs_trackerd 启动,不过安装过程中,fdfs已经被设置为系统服务,我们可以采用熟悉的服务启动方式

sudo service fdfs_trackerd start

    # 启动fdfs_trackerd服务,停止用stop 

(5)设置开机自启

sudo chkconfig fdfs_trackerd on

4.启动storage

编辑storage配置

(1)模板文件进行赋值和重命名:

cd /etc/fdfs
sudo cp storage.conf.sample storage.conf

(2)编辑配置文件

sudo vim storage.conf

    指定日志输出目录:

    base_path=/home/fastdfs/storage # storage的数据和日志存放目录
    store_path0=/home/fastdfs/storage # storage的上传文件存放路径
    tracker_server=192.168.56.101:22122 # tracker的地址

(3)创建目录

sudo mkdir -p /home/fastdfs/storage

(4)启动storage

sudo service fdfs_storaged start

(5)开机自启

sudo chkconfig fdfs_storaged on

由此tracker和storage启动完成,查看进程

ps -ef | grep fdfs

5.安装Nginx及FastDFS模块

(1)FastDFS的Nginx模块

    解压:

tar -xvf fastdfs-nginx-module_v1.16.tar.gz

    1)配置config文件

    # 进入配置目录

    cd /home/fastdfs-nginx-module/src

    # 修改配置

    vim config

    # 执行下面命令(将配置中的/usr/local改为/usr):

     :%s+/usr/local/+/usr/+g

   2) 配置mod_fastdfs.conf

    # 将src目录下的mod_fastdfs.conf复制到 /etc/fdfs目录:

    sudo cp mod_fastdfs.conf /etc/fdfs/

    # 编辑该文件

    sudo vim /etc/fdfs/mod_fastdfs.conf

    修改一下配置:

    connect_timeout=10                          # 客户端访问文件连接超时时长(单位:秒)
    tracker_server=192.168.56.101:22122      # tracker服务IP和端口
    url_have_group_name=true                    # 访问链接前缀加上组名
    store_path0=/home/fastdfs/storage                # 文件存储路径

    复制 FastDFS的部分配置文件到/etc/fdfs目录 

cd /home/FastDFS/conf/
cp http.conf mime.types /etc/fdfs/

6.安装Nginx

(1)解压

tar -xvf nginx-1.10.0.tar.gz

(2)配置

cd /home/nginx-1.10.0/
sudo ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/home/fastdfs-nginx-module/src

(3)编译安装

sudo make && sudo make install

(4)配置nginx整合fastdfs-module模块

    我们需要修改nginx配置文件,在/opt/nginx/config/nginx.conf文件中:

sudo vim /opt/nginx/conf/nginx.conf

    在service下添加:

    # 监听域名中带有group的,交给FastDFS模块处理
    location ~/group([0-9])/ {
            ngx_fastdfs_module;
    } 

(5)启动nginx

  nginx # 启动
  nginx -s stop # 停止
  nginx -s reload # 重新加载配置 

综上就是所有fastDFS所有的配置。

注:

1.所有 Storage 节点都启动之后,可以在 Storage的任何 节点上使用如下命令查看集群信息:

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

2.集群配置

说明:

192.168.31.51 group1 #需开启storage和nginx,tracker服务不用启动(配置成功后可通过http://192.168.31.51/group1/M00/00/XXXXX.jpg访问)

192.168.31.52 group2 #需开启storage和nginx,tracker服务不用启动(配置成功后可通过http://192.168.31.52/group2/M00/00/XXXXX.jpg访问)

192.168.31.46 tracker1 对应group1

192.168.31.47 tracker2 对应group2

(1)编辑每个storage服务器上的 mod_fastdfs.conf配置文件

vim /etc/fdfs/mod_fastdfs.conf
#修改内容
connect_timeout=10
#(51为group1)、(52为group2)--后期加入其他集群直接复制该配置即可。只需修改分组,若是添加分组的话,需要修改其他storage服务器上的该配置文件。新增group和tracker。
group_name=group1  #当前storage的分组
tracker_server=192.168.31.46:22122
tracker_server=192.168.31.47:22122
url_have_group_name = true
store_path0=/home/fastdfs/storage

group_count=2  #设置分组数

#下面注释打开并设置如下

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/home/fastdfs/storage

#store_path1=/home/yuqing/fastdfs1



# group settings for group #2

# since v1.14

# when support multi-group, uncomment following section as neccessary

[group2]

group_name=group2

storage_server_port=23000

store_path_count=1

store_path0=/home/fastdfs/storage

(2)配置跟踪服务器的反向代理

        1)安装ngx_cache_purge模块,ngx_cache_purge的作用:用于清除指定url的缓存(按需安装,如果图片会随时更新则建议安装,不经常更新则可以不用安装)

        下载地址:http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

        2)安装nginx,(编译时不用添加fastdfs-nginx-module模块,直接:sudo ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx即可)

        3)配置nginx(部分配置如下),然后就可以访问了192.168.31.46和192.168.31.47会自动代理到51,52storage存储服务器上。记得打开端口!

    #group1的服务设置
    upstream fdfs_group1 {
        server 192.168.31.51 weight=1 max_fails=2 fail_timeout=30s;
        #server 192.168.156.8:8888 weight=1 max_fails=2 fail_timeout=30s;
    }

    #group2的服务设置
    upstream fdfs_group2 {
        server 192.168.31.52 weight=1 max_fails=2 fail_timeout=30s;
        #server 192.168.156.10:8888 weight=1 max_fails=2 fail_timeout=30s;
    }
    

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

	    location /group1/M00 {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            #proxy_cache http-cache;
            #proxy_cache_valid 200 304 12h;
            #proxy_cache_key $uri$is_args$args;
            #对应group1的服务设置
            proxy_pass http://fdfs_group1;
            expires 30d;
        }

        location /group2/M00 {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            #proxy_cache http-cache;
            #proxy_cache_valid 200 304 12h;
	    #proxy_cache_key $uri$is_args$args;
            #对应group2的服务设置
            proxy_pass http://fdfs_group2;
	    expires 30d;            
        }
            

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

        4)VIP虚拟代理转发到tracker。(目的是由一个请求地址,自动代理到其他tracker)

        192.168.11.20用于转发 nginx配置:

upstream fastdfs_tracker {
    server 192.168.31.46 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.31.47 weight=1 max_fails=2 fail_timeout=30s;
}


server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location ~/group([0-9])/ {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://fastdfs_tracker;
        }
}

3.若访问日志图片报错:

ERROR - file: /root/fastdfs/fastdfs-nginx-module/src/common.c, line: 877, stat file: /root/fastdfs/storage/data/00/00/wKgLGl4FZAeAbKLsAARRFe73PtQ404.png fail, errno: 13, error info: Permission denied

此问题是nginx权限造成的,在nginx配置文件头部加上user root;即可,如图:

4.java代码上传部分图片报错 

java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components

引入依赖:

<dependency>
	 <groupId>com.twelvemonkeys.imageio</groupId>
	 <artifactId>imageio-jpeg</artifactId>
	 <version>3.4.1</version>
</dependency>

未解决的疑问?

192.168.31.51(group1),192.168.31.51(group2) storage,这两台分别设置mod_fastdfs.conf为group1和group2,并且关联两个tracker。那么从192.168.31.46,192.168.31.47 两个traker都可以访问到group1和group2的资源,此种情况我认为是正常。

但是我新建了一个192.168.11.26的文件服务器用于测试,tracker和storage,nginx都在同一台服务器上,配置mod_fastdfs.conf与192.168.31.46,47,51,52这四台服务器没有任何相关的。此时上传图片正常也在此台服务器上。但是此台服务器竟然可以访问192.168.31.51上group1的资源。从192.168.31.46,47,51,52这四台上也能访问192.168.11.26上的图片资源。难道分组group相同,tracker不同也可以互相访问吗?难道可以直接通过group相同就互通?

发布了49 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/unhejing/article/details/103694762