FastDFS学习笔记

linux发行版为:centos6.5

FastDFS介绍

什么是FastDFS

  FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
  

FastDFS架构

  FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
  Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
  Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。
  如下图:
  这里写图片描述

Tracker 集群

  FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。
  

Storage集群

  Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
  采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。

Storage状态收集

  Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。

文件上传流程

  这里写图片描述
  客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
  这里写图片描述
  ▅ 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
  ▅ 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
  ▅ 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
  ▅ 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

文件下载流程

  这里写图片描述
  tracker根据请求的文件路径即文件ID 来快速定义文件。
  比如请求下边的文件:
  这里写图片描述
  1.通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。
  2.存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。

FastDFS+Nginx实现文件服务器

架构图

  这里写图片描述

规划:

  tracker: 192.168.8.20
  tracker: 192.168.8.21
 group1:
  storage: 192.168.8.30
  storage: 192.168.8.31
 group2:
  storage: 192.168.8.32
  storage: 192.168.8.33

安装前需要注意的几点

在centos6.5下:

  • FastDFS 主程序程序引用 usr/lib 目录
  • 一般 fdfs_storagefdfs_tracker 等命令在/usr/local/bin中没有,而是在 /usr/bin 路径下
#可用这个命令查看
ll /usr/local/bin/fdfs*
  • FastDFS 的配置文件所在目录 /etc/fdfs/

安装tracker

  在192.168.8.20和192.168.8.21上安装tracker。

下载

  tracker和storage使用相同的安装包,
  下载地址:http://sourceforge.net/projects/FastDFS/
  或https://github.com/happyfish100/FastDFS(推荐)
  
  这里使用版本:FastDFS_v5.05.tar.gz
  

FastDFS安装环境

准备 centos

  FastDFS是C语言开发,建议在linux上运行,这里使用Centos6.5作为安装环境。

安装 gcc

  安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:

yum install gcc-c++

安装 libevent

  FastDFS依赖libevent库,需要安装:

yum -y install libevent

安装 libfastcommon

  libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
  将libfastcommonV1.0.7.tar.gz拷贝至/usr/local/下

cd /usr/local
tar -zxvf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install

  注意:`libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。
  要拷贝的文件如下:
  这里写图片描述
  

tracker 编译安装

  将FastDFS_v5.05.tar.gz拷贝至/usr/local/

tar -zxvf FastDFS_v5.05.tar.gz
cd FastDFS

./make.sh
./make.sh install

  安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下。

配置

  前边步骤中无论是配置tracker还是配置storage都是必须的,而tracker和storage的区别主要是在安装完fastdfs之后的配置 过程中。
  安装成功后进入/etc/fdfs目录:
  这里写图片描述
  拷贝一份新的tracker配置文件,或者直接修改从安装目录下的conf 中拷贝过来的 tracker.conf 文件:

cp tracker.conf.sample tracker.conf

  修改tracker.conf

vi tracker.conf
base_path=/home/yuqing/FastDFS   
#改为:
base_path=/home/FastDFS

启动

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

设置开机自动启动

 vim /etc/rc.d/rc.local

  将运行命令行添加进文件末尾:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

安装storage

在192.168.8.30 和 192.168.8.31 上安装storage。

FastDFS安装环境

  同tracker一样,在需要安装storage的机子上,安装libevent,libfastcommon

storage 编译安装

  同安装tracker时候操作一样

配置

  其实配置storage和配置tracker类似,只不过配置文件和配置内容不一样。
  安装成功后进入/etc/fdfs目录:
  拷贝一份新的storage配置文件:或者直接修改从安装目录下的conf 中拷贝过来的 storage.conf 文件:

cp storage.conf.sample storage.conf

  修改storage.conf
  base_path=/home/yuqing/FastDFS 改为:base_path=/home/FastDFS
  store_path0=/home/yuqing/FastDFS 改为:store_path0=/home/FastDFS/fdfs_storage

vi storage.conf
group_name=group1
base_path=/home/FastDFS
store_path0=/home/FastDFS/fdfs_storage
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=.....
#store_path2=......
tracker_server=192.168.8.20:22122   #配置tracker服务器:IP
#如果有多个则配置多个tracker
tracker_server=192.168.8.21:22122

补充:
  其实配置storage和配置tracker类似,只不过配置文件和配置内容不一样。我们以配置192.168.8.30配置storage为例。

 #1. 进入/etc/fdfs文件夹,执行命令: 
  cp  storage.conf.sample  storage.conf。

 #2. 编辑storage.conf,执行命令: 
  vi  storage.conf ,#将以下几个选项进行编辑:

       a. disabled=false            #启用配置文件

       b. group_name=group2    #组名,根据实际情况修改

       c. port=23001     #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致

       d. base_path=/home/FastDFS    #设置storage的日志目录(需预先创建)

       e. store_path_count=1   #存储路径个数,需要和store_path个数匹配

       f.  store_path0=/home/FastDFS/fdfs_storage   #存储路径

       g. tracker_server=192.168.224.20:22122   #tracker服务器的IP地址和端口号

       h. http.server_port=8080     #设置http端口号   注意,这个配置在fastdfs5.05这个版本中已经不用配置,不用管这个!

启动

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

设置开机自动启动

vim /etc/rc.d/rc.local

  将运行命令行添加进文件:

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

FastDFS 和nginx整合

  其实,storage中安装nginx,主要是为了为提供http的访问服务,同时解决group中storage服务器的同步延迟问题。而tracker中安装nginx,主要是为了提供http访问的反向代理、负载均衡以及缓存服务

安装nginx的准备

  nginx是C语言开发,建议在linux上运行,这里使用Centos6.5作为安装环境。
  ▅ gcc
   安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:

    yum install gcc-c++ 

  ▅ PCRE
  PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

 yum install -y pcre pcre-devel  

  注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
  ▅ zlib
  zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

  yum install -y zlib zlib-devel

  ▅ openssl
   OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
  nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

  yum install -y openssl openssl-devel

storage中安装nginx

  创建nginx默认的安装文件夹: /usr/local/nginx

  mkdir /usr/local/nginx

  将 nginx1.7.8.tar.gz 和 fastdfs-nginx-module_v1.16.tar.gz(安装包)上传至/user/local/,并解压

FastDFS-nginx-module

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

cd /usr/local
tar -zxvf FastDFS-nginx-module_v1.16.tar.gz
cd FastDFS-nginx-module/src

注意:修改config文件将/usr/local/路径改为/usr/
  这里写图片描述
  将FastDFS-nginx-module/src下的mod_FastDFS.conf拷贝至/etc/fdfs/下

cp mod_FastDFS.conf /etc/fdfs/

  修改mod_FastDFS.conf的内容:

vi /etc/fdfs/mod_FastDFS.conf
base_path=/home/FastDFS
tracker_server=192.168.8.20:22122
#tracker_server=192.168.8.21:22122(多个tracker配置多行)
url_have_group_name=true        #url中包含group名称
store_path0=/home/FastDFS/fdfs_storage   #指定文件存储路径

  将libfdfsclient.so拷贝至/usr/lib下

cp /usr/lib64/libfdfsclient.so /usr/lib/

  创建nginx/client目录

mkdir -p /var/temp/nginx/client

nginx安装

  进去nginx解压后的安装包,中,执行如下:configure命令
  添加FastDFS-nginx-module模块

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs-nginx-module/src

  make(编译)
  make install(安装)
  

nginx配置文件

  进入nginx的安装目录下的conf下

/usr/local/nginx/conf

修改配置文件 nginx.conf,添加server

vi nginx.conf
server {
        listen       80;
        server_name  192.168.8.30;

        location /group1/M00/{
                #root /home/FastDFS/fdfs_storage/data;
                ngx_fastdfs_module;
        }
}

注意,如果配置的storage是在group2组,则上面的location应该是 /group2/M00
   fastdfs的安装文件夹的conf目录下的http.conf和mime.types需拷贝到/etc/fdfs/下,如果不执行这一步,后边在启动nginx时会报错(我们已经在安装完FastDFS的时候就copy过去了)。
   
说明:
  server_name指定本机ip
  location /group1/M00/:group1为nginx 服务FastDFS的分组名称,M00是FastDFS自动生成编号,对应store_path0=/home/FastDFS/fdfs_storage,如果FastDFS定义store_path1,这里就是M01

开机自动启动nginx

编写shell脚本

这里使用的是编写shell脚本的方式来处理

vi /etc/init.d/nginx (输入下面的代码)

#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
   echo "nginx already running...."
   exit 1
fi
   echo -n $"Starting $prog: "
   daemon $nginxd -c ${nginx_config}
   RETVAL=$?
   echo
   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
   return $RETVAL
}
# Stop nginx daemons functions.
stop() {
        echo -n $"Stopping $prog: "
        killproc $nginxd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
    echo -n $"Reloading $prog: "
    #kill -HUP `cat ${nginx_pid}`
    killproc $nginxd -HUP
    RETVAL=$?
    echo
}
# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
reload)
        reload
        ;;
restart)
        stop
        start
        ;;
status)
        status $prog
        RETVAL=$?
        ;;
*)
        echo $"Usage: $prog {start|stop|restart|reload|status|help}"
        exit 1
esac
exit $RETVAL

设置文件的访问权限

chmod a+x /etc/init.d/nginx   #(a+x ==> all user can execute  所有用户可执行)

  这样在控制台就很容易的操作nginx了:查看Nginx当前状态、启动Nginx、停止Nginx、重启Nginx…
  这里写图片描述
  如果修改了nginx的配置文件nginx.conf,也可以使用上面的命令重新加载新的配置文件并运行,可以将此命令加入到rc.local文件中,这样开机的时候nginx就默认启动了

加入到rc.local文件中

vi /etc/rc.local

加入一行 如下代码 保存并退出,下次重启会生效

/etc/init.d/nginx start   

tracker中安装nginx

  在每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用。如果只有一台tracker服务器可以不配置nginx。

  注意: tracker中nginx安装时比storage中的nginx安装时需要安装一个nginx的缓存模块,不需要安装fastdfs-nginx-module,同时在配置的时候有很大的不同。

1. 创建nginx默认的安装文件夹: mkdir /usr/local/nginx

2. 提前将 nginx1.7.8.tar.gz、(fastdfs-nginx-module_v1.16.tar.gz,不安装)、ngx_cache_purge-2.1.tar.gz上传至/user/local 并解压缩。

安装nginx,以及缓存插件

ngx_cache_purge

  没有配置,默认解压就可以。

安装nginx

  进入每台tracker的nginx的安装目录

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/myself_settings/ngx_cache_purge/ngx_cache_purge-2.1

make
make install
  

nginx配置文件

  进入nginx的安装目录的conf目录下,修改给个tracker上的nginx.conf 文件

#user  nobody;  
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;  
    use epoll;  
}  


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;  
    #tcp_nopush     on;  

    #keepalive_timeout  0;  
    keepalive_timeout  65;  

    #gzip  on;  
    #设置缓存  
    server_names_hash_bucket_size 128;  
    client_header_buffer_size 32k;  
    large_client_header_buffers 4 32k;  
    client_max_body_size 300m;  

    proxy_redirect off;  
    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;  
    proxy_connect_timeout 90;  
    proxy_send_timeout 90;  
    proxy_read_timeout 90;  
    proxy_buffer_size 16k;  
    proxy_buffers 4 64k;  
    proxy_busy_buffers_size 128k;  
    proxy_temp_file_write_size 128k;  
    #设置缓存存储路径,存储方式,分别内存大小,磁盘最大空间,缓存期限  
    proxy_cache_path /fastdfs/cache/nginx/proxy_cache levels=1:2  
    keys_zone=http-cache:200m max_size=1g inactive=30d;  
    proxy_temp_path /fastdfs/cache/nginx/proxy_cache/tmp;  
    #group1的服务设置  
    upstream fdfs_group1 {  
         server 192.168.8.30:8888 weight=1 max_fails=2 fail_timeout=30s;  
         server 192.168.8.31:8888 weight=1 max_fails=2 fail_timeout=30s;  
    }  
    #group2的服务设置  
    upstream fdfs_group2 {  
         server 192.168.8.32:8888 weight=1 max_fails=2 fail_timeout=30s;  
         server 192.168.8.33:8888 weight=1 max_fails=2 fail_timeout=30s;  
    }  

    server {  
        listen       80;  
        server_name  localhost;  

        #charset koi8-r;  

        #access_log  logs/host.access.log  main;  
        #group1的负载均衡配置  
        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 ~/purge(/.*) {  
            allow 127.0.0.1;  
            allow 192.168.156.0/24;  
            deny all;  
            proxy_cache_purge http-cache $1$is_args$args;  
        }  

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

        #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;  
        }  

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80  
        #  
        #location ~ \.php$ {  
        #    proxy_pass   http://127.0.0.1;  
        #}  

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
        #  
        #location ~ \.php$ {  
        #    root           html;  
        #    fastcgi_pass   127.0.0.1:9000;  
        #    fastcgi_index  index.php;  
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  
        #    include        fastcgi_params;  
        #}  

        # deny access to .htaccess files, if Apache's document root  
        # concurs with nginx's one  
        #  
        #location ~ /\.ht {  
        #    deny  all;  
        #}  
    }  


    # another virtual host using mix of IP-, name-, and port-based configuration  
    #  
    #server {  
    #    listen       8000;  
    #    listen       somename:8080;  
    #    server_name  somename  alias  another.alias;  

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


    # HTTPS server  
    #  
    #server {  
    #    listen       443 ssl;  
    #    server_name  localhost;  

    #    ssl_certificate      cert.pem;  
    #    ssl_certificate_key  cert.key;  

    #    ssl_session_cache    shared:SSL:1m;  
    #    ssl_session_timeout  5m;  

    #    ssl_ciphers  HIGH:!aNULL:!MD5;  
    #    ssl_prefer_server_ciphers  on;  

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

}                               

  修改完nginx.conf文件之后,我们下面需要创建/fastdfs/cache/nginx/proxy_cache/fastdfs/cache/nginx/proxy_cache/tmp目录,这是因为我们在nginx.conf文件中配置缓存路径时指定了该目录,但是这两个目录目前还不存在。

到这里tracker上的反向代理已经配置完成了,下一步配置nginx的高可用。


附录

tracker.conf

1 基本配置
disable
#func:配置是否生效
#valu:true、false
disable=false
bind_addr
#func:绑定IP
#valu:IP地址
bind_addr=192.168.6.102
port
#func:服务端口
#valu:端口整数值
port=22122
connect_timeout
#func:连接超时
#valu:秒单位正整数值
connect_timeout=30
network_timeout
#func:网络超时
#valu:秒单位正整数值
network_timeout=60
base_path
#func:Tracker数据/日志目录地址
#valu:路径
base_path=/home/michael/fdfs/base4tracker
max_connections
#func:最大连接数
#valu:正整数值
max_connections=256
work_threads
#func:线程数,通常设置CPU数
#valu:正整数值
work_threads=4
store_lookup
#func:上传文件的选组方式。
#valu:0、1或2。
# 0:表示轮询
# 1:表示指定组
# 2:表示存储负载均衡(选择剩余空间最大的组)
store_lookup=2
store_group
#func:指定上传的组,如果在应用层指定了具体的组,那么这个参数将不会起效。另外如果store_lookup如果是0或2,则此参数无效。
#valu:group1等
store_group=group1
store_server
#func:上传服务器的选择方式。(一个文件被上传后,这个storage server就相当于这个文件的storage server源,会对同组的storage server推送这个文件达到同步效果)
#valu:0、1或2
# 0: 轮询方式(默认)
# 1: 根据ip 地址进行排序选择第一个服务器(IP地址最小者)
# 2: 根据优先级进行排序(上传优先级由storage server来设置,参数名为upload_priority),优先级值越小优先级越高。
store_server=0
store_path
#func:上传路径的选择方式。storage server可以有多个存放文件的base path(可以理解为多个磁盘)。
#valu:
# 0: 轮流方式,多个目录依次存放文件
# 2: 存储负载均衡。选择剩余空间最大的目录存放文件(注意:剩余磁盘空间是动态的,因此存储到的目录或磁盘可能也是变化的)
store_path=0
download_server
#func:下载服务器的选择方式。
#valu:
# 0:轮询(默认)
# 1:IP最小者
# 2:优先级排序(值最小的,优先级最高。)
download_server=0
reserved_storage_space
#func:保留空间值。如果某个组中的某个服务器的剩余自由空间小于设定值,则文件不会被上传到这个组。
#valu:
# G or g for gigabyte
# M or m for megabyte
# K or k for kilobyte
reserved_storage_space=1GB
log_level
#func:日志级别
#valu:
# emerg for emergency
# alert
# crit for critical
# error
# warn for warning
# notice
# info for information
# debug for debugging
log_level=info
run_by_group / run_by_user
#func:指定运行该程序的用户组
#valu:用户组名或空
run_by_group=

#func:
#valu:
run_by_user=
allow_hosts
#func:可以连接到tracker server的ip范围。可设定多个值。
#valu
allow_hosts=
check_active_interval
#func:检测 storage server 存活的时间隔,单位为秒。
#      storage server定期向tracker server 发心跳,
#      如果tracker server在一个check_active_interval内还没有收到storage server的一次心跳,
#      那边将认为该storage server已经下线。所以本参数值必须大于storage server配置的心跳时间间隔。
#      通常配置为storage server心跳时间间隔的2倍或3倍。
check_active_interval=120
thread_stack_size
#func:设定线程栈的大小。 线程栈越大,一个线程占用的系统资源就越多。
#      如果要启动更多的线程(V1.x对应的参数为max_connections,V2.0为work_threads),可以适当降低本参数值。
#valu:如64KB,默认值为64,tracker server线程栈不应小于64KB
thread_stack_size=64KB
storage_ip_changed_auto_adjust
#func:这个参数控制当storage server IP地址改变时,集群是否自动调整。注:只有在storage server进程重启时才完成自动调整。
#valu:true或false
storage_ip_changed_auto_adjust=true
2 同步
storage_sync_file_max_delay
#func:同组storage服务器之间同步的最大延迟时间。存储服务器之间同步文件的最大延迟时间,根据实际情况进行调整
#valu:秒为单位,默认值为1天(24*3600)
#sinc:v2.0
storage_sync_file_max_delay=86400
storage_sync_file_max_time
#func:存储服务器同步一个文件需要消耗的最大时间,缺省为300s,即5分钟。
#sinc:v2.0
storage_sync_file_max_time=300
sync_log_buff_interval
#func:同步或刷新日志信息到硬盘的时间间隔。注意:tracker server 的日志不是时时写硬盘的,而是先写内存。
#valu:以秒为单位
sync_log_buff_interval=10
3 trunk 和 slot
#func:是否使用trunk文件来存储几个小文件
#valu:true或false
#sinc:v3.0
use_trunk_file=false

#func:最小slot大小
#valu:<= 4KB,默认为256字节
#sinc:v3.0
slot_min_size=256

#func:最大slot大小
#valu:>= slot_min_size,当小于这个值的时候就存储到trunk file中。默认为16MB。
#sinc:v3.0
slot_max_size=16MB

#func:trunk file的size
#valu:>= 4MB,默认为64MB
#sinc:v3.0
trunk_file_size=64MB
4 HTTP 相关
是否启用 HTTP
#func:HTTP是否生效
#valu:true或false
http.disabled=false
HTTP 服务器端口号
#func:tracker server上的http port
#valu:
#note:只有http.disabled=false时才生效
http.server_port=7271
检查Storage存活状态的间隔时间(心跳检测)
#func:检查storage http server存活的间隔时间
#valu:单位为秒
#note:只有http.disabled=false时才生效
http.check_alive_interval=30
心跳检测使用的协议方式
#func:检查storage http server存活的方式
#valu:
# tcp:连接到storage server的http端口,不进行request和response。
# http:storage check alive url must return http status 200.
#note:只有http.disabled=false时才生效
http.check_alive_type=tcp
检查 Storage 状态的 URI
#func:检查storage http server是否alive的uri/url
#note:只有http.disabled=false时才生效
http.check_alive_uri=/status.html

一些不错的文章

分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群
http://www.open-open.com/lib/view/open1435468300700.html

fastdfs集群的配置教程
http://blog.csdn.net/lynnlovemin/article/details/39398043

fastdfs系列教程
http://blog.csdn.net/poechant/article/details/6977407

tracker-leader的选举
http://m.blog.csdn.net/blog/hfty290/42030339

手把手教你搭建FastDFS集群(上)
https://blog.csdn.net/u012453843/article/details/68957209

手把手教你搭建FastDFS集群(中)
https://blog.csdn.net/u012453843/article/details/69055570

手把手教你搭建FastDFS集群(下)
https://blog.csdn.net/u012453843/article/details/69172423

猜你喜欢

转载自blog.csdn.net/u010758410/article/details/80663097