FastDFS学习笔记

匿名 (未验证) 提交于 2019-12-03 00:27:02

linux发行版为:centos6.5

  FastDFS是用c语言编写的一款开源的分布式文件系统。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称为存储服务器。
  如下图:
  

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

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

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

  
  客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
  



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

  

  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/

  在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是C语言开发,建议在linux上运行,这里使用Centos6.5作为安装环境。

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

yum install gcc-c++

  FastDFS依赖libevent库,需要安装:

yum -y install libevent

  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下。
  要拷贝的文件如下:
  
  

  将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

在192.168.8.30 和 192.168.8.31 上安装storage。

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

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

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

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

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

    yum install gcc-c++ 


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

 yum install -y pcre pcre-devel  

  注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

  zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

  yum install -y zlib zlib-devel


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

  yum install -y openssl openssl-devel

  创建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解压后的安装包,中,执行如下: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的安装目录下的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

这里使用的是编写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就默认启动了

vi /etc/rc.local

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

/etc/init.d/nginx start   

  在每个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 并解压缩。

ngx_cache_purge

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

  进入每台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的安装目录的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

文章来源: FastDFS学习笔记
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!