人若无名,便可专心练剑

分布式文件系统fastDFS+Nginx 集成

  |   0 评论   |   8,533 浏览
    架构:
    跟踪节点(tracker) :跟踪器主要做调度工作,在访问上起负载均衡的作用
                                       比如我们上传文件时需先向tacker节点申请存储节点,tracker根据资源情况给我们返回一台存储节点,并通过返回的存储节点上传到存储节点服务器(存储节点间数据自动同步)

    存储节点(storager):存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,
                                       FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,
                                       以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。
                                       文件metadata是文件属性列表,可以 包含多个键值对


    环境:Centos6.5
    tracker:192.168.3.111 cluster1  nginx1:用作负载
    storager:   192.168.3.112 cluster2  nginx2:用于存储节点1文件获取  192.168.3.113 cluster3 nginx3:用于存储节点2文件获取 


    环境准备:
     yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel git libevent

     另外需要安装额外的commonlib包:



     需要准备一个用户和一个用户组:
     useradd fastdfs -M -s /sbin/nologin (默认会创建一个用户组)
     
     useradd nginx -M -s /sbin/nologin (默认会创建一个用户组) 

    安装:
    (注:无论tracker节点,还是storager节点安装都一样 ,安装记录只以tracker为准 。但是如果安装nginx集成则有点不一样,nginx只需在storage节点安装fastdfs-nginx-module模块
           下载安装文件: fastdfs:

    1,下载
    当前目录:/home/cluster1
    [root@localhost cluster1]# git clone https://github.com/happyfish100/fastdfs.git 
    下载nginx 
    [root@localhost cluster1]# git clone https://github.com/nginx/nginx.git
    下载fastdfs-nginx-module 模块
    [root@localhost cluster1]# git clone https://github.com/happyfish100/fastdfs-nginx-module.git
     2,安装
       [root@localhost cluster1]#  cd fastdfs
       [root@localhost cluster1]# ./make.sh && ./make.sh install
    安装nginx:
      [root@localhost cluster1]#cd nginx
      [root@localhost cluster1]#    ./configure --user=nginx --group=nginx 
      如果为存储节点编译安装时需要加载集成插件
      [root@localhost cluster2]#    ./configure --user=nginx --group=nginx   --add-module=/home/cluster3/fastdfs-nginx-module/src

    说明:安装后程序会默认安装到系统bin目录下
    3,拷贝几个额外的配置文件(安装后/etc/fdfs/ 目录下已经有这么几个默认文件:client.conf.sample   storage.conf.sample  tracker.conf.sample)
        [root@localhost cluster1]#   cp -rv /home/cluster1/fastdfs/conf/httpd.conf /etc/fdfs/  (如果要用httpserver 或者使用nginx作为文件获取服务器必须要这个文件)
        [root@localhost cluster1]#   cp -rv /home/cluster1/fastdfs/conf/mime.types /etc/fdfs/ 
    4,关闭防火墙或则建立防火墙规则(很重要
          

    配置:
    (注意:配置tracker 和storager 存在区别)

    1,tracker 配置
         a,创建相关数据存放目录
              [root@localhost cluster1]# mkdir -p /data/fastdfs/tracker
         b, copy配置模板文件
               [root@localhost cluster1]#   cp -rv /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
          c, 配置copy的后文件
               [root@localhost cluster1]#   vim  /etc/fdfs/tracker.conf
               将该文件做以下修改:
                   base_path=/data/fastdfs/tracker
                   store_lookup=0
                   store_group=g1 #(上传文件时存放的组名)
                   store_path=0
                   run_by_group=fastdfs
                   run_by_user=fastdfs
                   rotate_error_log=true

                默认会启动自带的httpserver 我们可以注销掉相关配置:
                   # HTTP port on this tracker server
                   #http.server_port=8080
                   # check storage HTTP server alive interval seconds
                   # <= 0 for never check
                   # default value is 30
                   #http.check_alive_interval=30
                   # check storage HTTP server alive type, values are:
                   #   tcp : connect to the storge server with HTTP port only,
                   #        do not request and get response
                   #   http: storage check alive url must return http status 200
                   # default value is tcp
                   #http.check_alive_type=tcp

                   # check storage HTTP server alive uri/url
                   # NOTE: storage embed HTTP server support uri: /status.html
                   #http.check_alive_uri=/status.html
           d:配置服务项并注册为服务
                   [root@localhost  cluster1]# cp /home/cluster1/fastdfs/init.d/fdfs_trackerd /etc/init.d/
                   [root@localhost  cluster1]# chkconfig --add fdfs_trackerd
                   [root@localhost  cluster1]# chkconfig fdfs_trackerd on


    tracker节点nginx配置:
      [root@localhost  cluster1]# vim /usr/local/nginx/conf/nginx.conf
         user nginx nginx;
        pid        /usr/local/nginx/logs/nginx.pid;
        worker_rlimit_nofile 1024;
        events {
        use epoll;
        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  /usr/local/nginx/logs/access.log  main;

        sendfile        on;
        #tcp_nopush     on;

        #keepalive_timeout  0;
        keepalive_timeout  65;

        #gzip  on;
        upstream server_g1{
                    server 192.168.3.112:80;
                    server 192.168.3.113:80;
            }

        server {
            listen       80;
            server_name  localhost;

            #charset koi8-r;

            #access_log  logs/host.access.log  main;

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

            location / {
                    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;
           }
    }
    }
    2,配置storager (使用cluster2,另外cluster3 也如此 )
                 a,创建相关数据存放目录
              [root@localhost cluster2]# mkdir -p /data/fastdfs/storage/data
               b, copy配置模板文件
               [root@localhost cluster2]#   cp -rv /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
               [root@localhost cluster2]#   cp -rv  /home/cluster2/fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/mod_fastdfs.conf
              c, 配置copy的后文件
               [root@localhost cluster2]#   vim  /etc/fdfs/storage.conf
                   将该文件做以下修改:
                        group_name=g1  #(和tracker节点 保持一致性)
                        base_path=/data/fastdfs
                        store_path_count=1
                        store_path0=/data/fastdfs/storage
                        tracker_server=192.168.3.111:22122 #tracker 节点 
                        run_by_group=fastdfs
                        run_by_user=fastdfs
                        file_distribute_path_mode=1 #文件分布式路径模式 开启
                        rotate_error_log=true #开启错误日志

                  默认会启动自带的httpserver 建议注销掉相关配置:  
                           # use the ip address of this storage server if domain_name is empty,
                           # else this domain name will ocur in the url redirected by the tracker server
                           #http.domain_name=
                           # the port of the web server on this storage server
                          #http.server_port=80

             配置mod_fastdfs.conf 插件配置文件其他项保持不变或者根据自己需要配置
         tracker_server=192.168.3.111:22122
         group_name=g1
         url_have_group_name = true
         store_path_count=1
         store_path0=/data/fastdfs/storage  

    注意:mod_fastdfs.conf 先关属性配置必须和storage.conf 配置保持一致

              d:修改httpd.conf 文件 
                   #http.anti_steal.secret_key=FastDFS1234567890
                   #http.anti_steal.token_check_fail=/home/yuqing/fastdfs/conf/anti-steal.jpg


                   配置Nginx 配置
                   [root@localhost cluster2]# vim /usr/local/nginx/conf/nginx.conf
                   user nginx nginx;
                    pid /usr/local/nginx/logs/nginx.pid;
           worker_rlimit_nofile 1024;
         events {
             use epoll;
             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"';

              sendfile        on;
              #tcp_nopush     on;
              #keepalive_timeout  0;
               keepalive_timeout  65;
               #gzip  on;
             server {
            listen       80;
            server_name  localhost;
            #charset koi8-r;
            #access_log  logs/host.access.log  main;
            access_log /usr/local/nginx/logs/access.log main;
            location / {
                root   html;
                index  index.html index.htm;
            }
            location /g1/M00{
                    root /data/fastdfs/storage/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;
            }
     }
          }                         
              e: 配置并注册成为系统服务(我们也可以不注册成为系统服务,使用全路径名启动)
                   [root@localhost cluster2]# cp /home/cluster2/fastdfs/init.d/fdfs_storaged/ /etc/init.d/fdfs_storaged
                   [root@localhost cluster2]# chkconfig --add fdfs_storaged
                   [root@localhost cluster2]# chkconfig fdfs_storaged on
    3,测试
          a, 启动tracker节点
                 [root@localhost cluster1]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
                  查看是否启动成功(我们可以使用ps或者netstat 命令查看端口22122)

                   nginx 启动:
                [root@localhost cluster1] /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
          b, 启动storage节点
                  [root@localhost ~]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
                    查看是否启动成功(我们可以使用ps或者netstat 命令查看端口 23000)
                  nginx 启动:
                [root@localhost cluster1] /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
                    
         配置客户端进行上传或者下载(实例为:命令行上传下载   另外官方提供了 java的lib包 也可以使用java 实现上传下载)
           c:配置客户端配置
                   我们以cluster2 为客户机
                 [root@localhost cluster2]# pwd
                   /home/cluster2
                 [root@localhost cluster2]#vim client.conf
                 加入如下内容并保存:
                   base_path=/data/fastdfs
                   tracker_server=192.168.3.111:22122    
           测试上传文件:
              [root@localhost cluster2]# fdfs_upload_file client.conf nginx.tar.gz   #格式 fdfs_upload_file  配置文件 需要上传的文件
              g1/M00/DC/17/wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz #上传成功后返回的路径
              测试下载文件 
               [root@localhost cluster2]# fdfs_download_file client.conf g1/M00/DC/17/wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
    [root@localhost cluster2]# ls
    client.conf  fastdfs  fastdfs-nginx-module  libfastcommon  mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz  nginx  nginx.tar.gz  wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
    [root@localhost cluster2]# ls -al
    total 531072
    drwx------.  6 cluster2 cluster2      4096 Jan 20 17:54 .
    drwxr-xr-x.  3 root     root          4096 Dec 23 02:59 ..
    -rw-------.  1 cluster2 cluster2       603 Jan 16 06:18 .bash_history
    -rw-r--r--.  1 cluster2 cluster2        18 Oct 16 06:56 .bash_logout
    -rw-r--r--.  1 cluster2 cluster2       176 Oct 16 06:56 .bash_profile
    -rw-r--r--.  1 cluster2 cluster2       124 Oct 16 06:56 .bashrc
    -rw-r--r--   1 root     root            60 Jan 20 17:42 client.conf
    drwxr-xr-x  11 root     root          4096 Jan 20 07:36 fastdfs
    drwxr-xr-x   4 root     root          4096 Jan 20 07:52 fastdfs-nginx-module
    drwxr-xr-x   5 root     root          4096 Jan 20 07:36 libfastcommon
    -rw-rw-r--.  1 cluster2 cluster2 478325708 Jan  5 08:07 mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz
    -rw-------.  1 cluster2 cluster2        23 Jan  6 00:57 .ndb_mgm_history
    drwxr-xr-x  10 root     root          4096 Jan 20 08:00 nginx
    -rw-r--r--   1 root     root      32716800 Jan 20 08:11 nginx.tar.gz  #(先前上传的源文件)
    -rw-r--r--   1 root     root      32716800 Jan 20 17:54 wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz (刚刚下载的文件)

    文件校验:
         [root@localhost cluster2]# md5sum nginx.tar.gz 
         ba70c99623327cf632a45c10ef4bb423  nginx.tar.gz
         [root@localhost cluster2]# md5sum wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
         ba70c99623327cf632a45c10ef4bb423  wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
    我们下载的文件内容和我们原来上传的文件内容一致

    另外我们可以检查运行状态
    [root@localhost cluster2]#fdfs_monitor client.conf

    添加nginx后用图片进行测试:
              [root@localhost cluster2]# fdfs_upload_file client.conf 500fd9f9d72a6059496335a02b34349b033bba1d.jpg 
                        g1/M00/5A/78/wKgDcVS_H7qAJI0OAAF9fgUE8_k688.jpg
                    然后我们直接用浏览器进行访问:
                    nginx1:http://192.168.3.111/g1/M00/5A/78/wKgDcVS_H7qAJI0OAAF9fgUE8_k688.jpg
                             
                             
                    nginx3:http://192.168.3.113/g1/M00/5A/78/wKgDcVS_H7qAJI0OAAF9fgUE8_k688.jpg
                             

    注意:权限很重要,如果你不知道具体权限怎么设置 请强数据存放目录设置为 777 
              如:数据存放路径/data/fastdfs/storage
              我们设置权限: chmod -R 777  /data/fastdfs


    一些常见错误:
    ngx_http_fastdfs_process_init pid=17609
    ERROR - file: ini_file_reader.c, line: 315, include file "http.conf" not exists, line: "#include http.conf"
    ERROR - file: /usr/local/src/fastdfs-nginx-module/src//common.c, line: 155, load conf file
    "/etc/fdfs/mod_fastdfs.conf" fail, ret code: 2
     [alert] 17607#0: worker process 17609 exited with fatal code 2 and cannot be respawned

    解决方案:

    你看下安装包的conf目录下,有几个配置文件,把http.conf,mime.types,拷贝到/etc/fdfs/下,http.conf里有 个配置应该是token验证的功能,如果你要打开

    ,应该把路径配置正确


    dropbox:邀请您的加入,让你随时随地同步您的文件:https://db.tt/wCU4HQq4

    人生格言: 如果说人生是自我编写的程序, 那么青春就是其中意味深长的代码。 或简单,分解成彼此独立的字符: 或复杂, 拼凑成一连串神秘的语句。 我们尝试着不断调试, 不断优化,无论编译结果如何, 过程才是最美。 如果说这段代码不能复制, 那么我愿意用一生去续写.

    评论

    发表评论

    validate