fastdfs高可用集群安装

fastdfs高可用集群安装

机器规划

storage

  1. group1:192.168.56.111/112(集群,同一个group的内容会完整的在两台机器各自存一份),每台机器上安装nginx
  2. group2:192.168.56.113/114(集群,同一个group的内容会完整的在两台机器各自存一份),每台机器上安装nginx

tracker

  1. tracker:192.168.56.115/116(集群),每台机器上都需要安装nginx

LVS

  1. LVS:192.168.56.117–>本案例中使用一台LVS,如果需要多台LVS并保证高可用参考深入浅出Web应用负载均衡

安装软件

安装fastdfs

安装的机器有192.168.56.111/112、192.168.56.113/114、192.168.56.115/116

其中192.168.56.115/116安装tracker、192.168.56.111/112、192.168.56.113/114安装storage

安装依赖包
  1. 下载并安装依赖包:libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库

    wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
    tar -xvf V1.0.43.tar.gz
    cd libfastcommon-1.0.43
    ./make.sh
    ./make.sh install
    
  2. libfastcommon.so 安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。

    ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
    ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
    ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
    
安装fastdfs
  1. 下载:

    wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
    tar -xvf V6.06.tar.gz
    cd fastdfs-6.06
    
  2. 安装

    ./make.sh
    ./make.sh install
    

    这个时候会提示找不到perl(6.0之后需要perl的支持)

    ./make.sh:行152: perl: 未找到命令
    ./make.sh:行153: perl: 未找到命令
    ./make.sh:行154: perl: 未找到命令
    

    我们需要将perl环境安装下然后再make install一下:

    yum install -y perl
    ./make.sh
    ./make.sh install
    
  3. 完成安装后我们看下相应的目录:

    • 启动脚本:

      [root@localhost fastdfs-6.06]# ll /etc/init.d/ | grep fdfs
      -rwxr-xr-x. 1 root  root    961 6月   9 22:30 fdfs_storaged
      -rwxr-xr-x. 1 root  root    963 6月   9 22:30 fdfs_trackerd
      
    • 样例配置文件

      [root@localhost fastdfs-6.06]# ll /etc/fdfs | grep sample
      -rw-r--r--. 1 root root  1909 6月   9 22:23 client.conf.sample
      -rw-r--r--. 1 root root   965 6月   9 22:23 http.conf.sample
      -rw-r--r--. 1 root root 31172 6月   9 22:23 mime.types.sample
      -rw-r--r--. 1 root root 10246 6月   9 22:23 storage.conf.sample
      -rw-r--r--. 1 root root   620 6月   9 22:23 storage_ids.conf.sample
      -rw-r--r--. 1 root root  9138 6月   9 22:23 tracker.conf.sample
      
    • 命令工具

      [root@localhost fastdfs-6.06]# ll /usr/bin/ | grep fdfs
      -rwxr-xr-x. 1 root root    362184 6月   9 22:30 fdfs_appender_test
      -rwxr-xr-x. 1 root root    361960 6月   9 22:30 fdfs_appender_test1
      -rwxr-xr-x. 1 root root    348840 6月   9 22:30 fdfs_append_file
      -rwxr-xr-x. 1 root root    348456 6月   9 22:30 fdfs_crc32
      -rwxr-xr-x. 1 root root    348880 6月   9 22:30 fdfs_delete_file
      -rwxr-xr-x. 1 root root    349608 6月   9 22:30 fdfs_download_file
      -rwxr-xr-x. 1 root root    349560 6月   9 22:30 fdfs_file_info
      -rwxr-xr-x. 1 root root    364880 6月   9 22:30 fdfs_monitor
      -rwxr-xr-x. 1 root root    349104 6月   9 22:30 fdfs_regenerate_filename
      -rwxr-xr-x. 1 root root   1280080 6月   9 22:30 fdfs_storaged
      -rwxr-xr-x. 1 root root    372056 6月   9 22:30 fdfs_test
      -rwxr-xr-x. 1 root root    367168 6月   9 22:30 fdfs_test1
      -rwxr-xr-x. 1 root root    512304 6月   9 22:30 fdfs_trackerd
      -rwxr-xr-x. 1 root root    349800 6月   9 22:30 fdfs_upload_appender
      -rwxr-xr-x. 1 root root    350824 6月   9 22:30 fdfs_upload_file
      
  4. 虽然FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin, 但实际命令安装在 /usr/bin/ 下,所以我们需要设置一下相应的软连接:

    ln -s /usr/bin/fdfs_trackerd   /usr/local/bin
    ln -s /usr/bin/fdfs_storaged   /usr/local/bin
    ln -s /usr/bin/stop.sh         /usr/local/bin
    ln -s /usr/bin/restart.sh      /usr/local/bin
    
    
配置fastdfs
配置tracker(192.168.56.115/116)
  1. 配置tracker.conf

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

    针对配置文件我们修改以下几处:

    # Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
    base_path = /data/fastdfs/tracker
    #HTTP 服务端口,后面结合nginx需要用到
    http.server_port = 80
    

    创建tracker数据目录:

    mkdir -/data/fastdfs/tracker
    
  2. 关闭防火墙或者防火墙中打开跟踪端口(默认的22122)

    本人是直接关闭防火墙,如果开着防火墙的童鞋可以根据自己是什么系统自行百度

  3. 启动tracker:

    #启动方案一
    /etc/init.d/fdfs_trackerd start
    #启动方案二
    service fdfs_trackerd start
    

    启动结果:

    [root@localhost fdfs]# service fdfs_trackerd start
    Reloading systemd:                                         [  确定  ]
    Starting fdfs_trackerd (via systemctl):                    [  确定  ]
    

    初次成功启动,会在 配置的base_path目录下创建 data、logs 两个目录。

    [root@localhost fdfs]# cd /data/fastdfs/tracker
    [root@localhost tracker]# ll
    总用量 0
    drwxr-xr-x. 2 root root 60 6月   9 22:51 data
    drwxr-xr-x. 2 root root 26 6月   9 22:51 logs
    

    同时我们也可以通过端口号是否监听着来判断是否启动成功(默认端口22122)

    [root@localhost tracker]# netstat -tunlp | grep 22122
    tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      3882/fdfs_trackerd  
    

    从上面我们可以看到22122是被fdfs_trackerd 程序所占用,这就说明我们已经启动成功了。

  4. 设置成开机启动:

    chkconfig fdfs_trackerd on
    
  5. 关闭tracker

    service fdfs_trackerd stop
    
  6. base_path目录结构:

    [root@localhost tracker]# tree
    .
    ├── data
    │   ├── fdfs_trackerd.pid
    │   └── storage_changelog.dat
    └── logs
        └── trackerd.log
    
配置storage(192.168.56.111/112、192.168.56.113/114)
  1. 配置torage.conf

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

    修改配置文件:

    #设置group_name,默认group1,我们将111/112这两台机器设置成group1,113/114这两台机器设置成group1
    group_name = group1
    #配置base_path(与tracker类似) Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)
    base_path=/data/fastdfs/storage
    # 逐一配置 store_path_count 个路径,索引号基于 0。
    # 如果不配置 store_path0,那它就和 base_path 对应的路径一样。
    store_path0=/data/fastdfs/storage/file
    # tracker_server 的列表 ,会主动连接 tracker_server
    # 有多个 tracker server 时,每个 tracker server 写一行
    tracker_server=192.168.56.115:22122
    tracker_server=192.168.56.116:22122
    # 访问端口
    http.server_port=80
    

    创建目录:

    mkdir -p /data/fastdfs/storage
    mkdir -p /data/fastdfs/storage/file
    
  2. 关闭防火墙或者防火墙中打开跟踪端口(默认的22122)

    本人是直接关闭防火墙,如果开着防火墙的童鞋可以根据自己是什么系统自行百度

  3. 启动Storage

    #启动方案一
    /etc/init.d/fdfs_storaged start
    #启动方案二
    service fdfs_storaged start
    

    查看 Storage 是否成功启动,23000 端口正在被监听,就算 Storage 启动成功。

    [root@localhost fdfs]# netstat -tunlp | grep fdfs 
    tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      4275/fdfs_storaged  
    
  4. 设置开机启动;

    chkconfig fdfs_storaged on
    
  5. 查看Storage 目录

    同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。

    [root@localhost storage]# ll
    总用量 0
    drwxr-xr-x. 3 root root 90 6月   9 23:28 data
    drwxr-xr-x. 3 root root 18 6月   9 23:28 file
    drwxr-xr-x. 2 root root 26 6月   9 23:28 wlogs
    

    我们再看看file目录:

在这里插入图片描述

测试

修改配置文件
cd /etc/fdfs
cp client.conf.sample client.conf
vi client.conf

主要修改的配置文件修改内容如下:

#基础路径修改成自定义的目录
base_path = /data/fastdfs/client
#修改tracker_server服务器地址
tracker_server = 192.168.56.115:22122
tracker_server = 192.168.56.116:22122

测试上传文件:

[root@localhost ~]# mkdir -p /data/fastdfs/client
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group2/M00/00/00/wKg4cV7gxxyARS00AADOeAG8PEw339.jpg
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group2/M00/00/00/wKg4cl7gxx6AFL1oAADOeAG8PEw271.jpg
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group2/M00/00/00/wKg4cV7gxx-Aabk5AADOeAG8PEw040.jpg
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group2/M00/00/00/wKg4cl7gxyCAdgi2AADOeAG8PEw098.jpg
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group2/M00/00/00/wKg4cV7gxyGAZhC_AADOeAG8PEw101.jpg
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group2/M00/00/00/wKg4cl7gxyGAXBy-AADOeAG8PEw507.jpg
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group2/M00/00/00/wKg4cV7gxyKAREn9AADOeAG8PEw014.jpg

从以上测试结果我们可以看出所有的文件都上传到了group2这个分组的服务器上,为什么没有上传到group1上呢?让我们看一下/etc/fdfs/tracker.conf配置文件的负载策略(store_lookup)

# 0: round robin 轮询
# 1: specify group 指定卷,通过卷名指定访问某一个卷
# 2: load balance, select the max free space group to upload file 默认的负载策略,哪个空间大使用哪个
store_lookup = 0

我们将轮询策略改成0之后再测试一下,看看效果:

[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group1/M00/00/00/wKg4b17gyDiAIZ1YAADOeAG8PEw810.jpg
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group2/M00/00/00/wKg4cV7gyDmAXVL3AADOeAG8PEw906.jpg
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group1/M00/00/00/wKg4cF7gyDqAP__wAADOeAG8PEw493.jpg
[root@localhost ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg 
group2/M00/00/00/wKg4cl7gyDuAA2hpAADOeAG8PEw756.jpg

这个时候我们可以看到交替的存储到不同的group中。返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

在这里插入图片描述

我们也可以通过fdfs_monitor /etc/fdfs/storage.conf命令来查看整个集群的情况

好了,到目前为止我们已经完成了fastdfs的storage集群搭建。接下来我们搭建nginx实现storage以及tracker反向代理。

nginx集群搭建

  1. 为什么storage也要安装nginx?

    因为当一个文件上传完放到某一个storage服务器之后,同组的服务器需要进行复制,有一定的延迟,假如说文件test.jpg上传到了56.111服务器,这个时候客户端马上又发起请求访问test.jpg,请求可能会被指定到56.112上,这个时候因为还没复制完成,就会出现文件访问错误的情况。

    而使用fastdfs-nginx-module可以实现从56.111服务器上取得文件,避免复制延迟带来的问题

  2. 为什么tracker也要安装nginx?

    安装nginx主要为了http访问的反向代理、负载均衡、高可用同时实现缓存(但是nginx不一定要安装在tracker的机器上)。

storage服务器nginx安装(192.168.56.111-116)
  1. 安装nginx

     yum install epel-release 
     yum install -y nginx
    
  2. 启动Nginx并设置开机自动运行

    systemctl start nginx.service
    systemctl enable nginx.service
    
安装fastdfs-nginx-module模块
  1. 下载并解压

    wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
    tar -xvf V1.22.tar.gz
    
  2. 备份原来的启动文件

     mv /usr/sbin/nginx /usr/sbin/nginx.bak
    
  3. nginx添加fastdfs-nginx-module模块:为nginx添加模块的时候需要注意,不能直接添加而是要先看下原来nginx已经安装了那些模块,然后在原来的基础上加上自己要加的模块。我们可以通过nginx -V来查看当前nginx已经安装了那些模块,以下是我机器上已经安装模块情况:

    [root@localhost local]# nginx -V
    nginx version: nginx/1.16.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
    built with OpenSSL 1.0.2k-fips  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-stream_ssl_preread_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
    

    由于yum安装不可编译,所以我们需要下载一个可编译的nginx(大家可以根据上面的命令看自己的版本多少下载相对应的版本):

    cd /usr/local/
    wget http://nginx.org/download/nginx-1.18.0.tar.gz
    tar -xvf nginx-1.16.1.tar.gz
    cd nginx-1.16.1
    

    重新编译nginx(再最后我们加上--add-module=/usr/local/fastdfs-nginx-module-1.22):

    ./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-stream_ssl_preread_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' --add-module=/usr/local/fastdfs-nginx-module-1.22/src
    

    编译过程中可能会遇到:

    configure: error: the HTTP rewrite module requires the PCRE library
    #解决方案
    yum -y install pcre-devel
    
    ./configure: error: SSL modules require the OpenSSL library.
    #解决方案
    yum -y install openssl openssl-devel
    
    ./configure: error: the invalid value in --with-ld-opt="-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E"
    #解决方案
    yum -y install redhat-rpm-config.noarch
    
    ./configure: error: the HTTP XSLT module requires the libxml2/libxslt
    #解决方案
    yum -y install libxml2 libxml2-dev
    yum -y install libxslt-devel
    
    ./configure: error: the HTTP image filter module requires the GD library
     #解决方案
     yum -y install gd-devel
     
    ./configure: error: perl module ExtUtils::Embed is required
     #解决方案
    yum -y install perl-devel perl-ExtUtils-Embed
    
    ./configure: error: the Google perftools module requires the Google perftools
     #解决方案
    yum install gperftools-devel
    
    
    yum -y install pcre-devel openssl openssl-devel  redhat-rpm-config.noarch libxml2 libxml2-dev libxslt-devel gd-devel perl-devel perl-ExtUtils-Embed gperftools-devel
    

    编译完之后先不要着急make install,先做好备份

     make &&  make install
    

    重启nginx

    nginx -s stop && nginx
    

    使用nginx -V检查模块是否安装成功

    [root@localhost nginx-1.16.1]# nginx -V
    nginx version: nginx/1.16.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
    built with OpenSSL 1.0.2k-fips  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-stream_ssl_preread_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' --add-module=/usr/local/fastdfs-nginx-module-1.22/src
    

    这个时候我们已经看到有fastdfs-nginx-module模块了

配置配置文件
  1. 配置mod_fastdfs.conf配置文件

    cd /usr/local/fastdfs-nginx-module-1.22/src
    vi mod_fastdfs.conf
    #需要修改内容如下:
    tracker_server=192.168.56.115:22122
    tracker_server=192.168.56.116:22122
    
    #本地的group_name,根据实际机器配置
    group_name=XXX
    
    #文件 url 中是否有 group 名
    url_have_group_name = true
    store_path0=/data/fastdfs/storage/file
    

    网上很多人说要把multi-group开启,这是很多余的,很多余的,很多余的(重要的事情说三遍),还可能引起不能跨group访问文件的情况

  2. 将配置文件拷贝到/etc/fdfs/目录下

    cp /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
    cp /usr/local/fastdfs-6.06/conf/http.conf /etc/fdfs/
    cp /usr/local/fastdfs-6.06/conf/mime.types /etc/fdfs/
    
  3. 从上面的fastdfs的key生成来看,访问路径是在我们实际的目录后面加了一个M00所有我们要将实际目录软连接到带M00的目录上

    ln -s /data/fastdfs/storage/file/data /data/fastdfs/storage/file/data/M00
    
  4. 配置nginx

    cd /etc/nginx/conf.d/
    vi fastdfs_storage.conf
    

    配置文件内容如下:

    server {
        listen       80;
        server_name  localhost;
    
    
        location ~ /group([0-9])/M00 {
          ngx_fastdfs_module;
        }
    }
    

    重新加载nginx配置文件

    nginx -t
    nginx -s reload
    
使用nginx访问fastdfs文件
  1. 我们将上面上传测试的key作为访问路径进行测试,结果是OK的:

    http://192.168.56.111/group1/M00/00/00/wKg4b17gyDiAIZ1YAADOeAG8PEw810.jpg

    http://192.168.56.111/group2/M00/00/00/wKg4cV7gxyKAREn9AADOeAG8PEw014.jpg

tracker服务nginx安装
  1. 安装nginx,与上面storage相同

    nginx不一定要安装在tracker这台机器上!nginx不一定要安装在tracker这台机器上!nginx不一定要安装在tracker这台机器上!重要的事情也说三遍

  2. 配置nginx:

    cd /etc/nginx/
    vi upstream.conf 
    

    upstream.conf 配置文件内容如下:

    upstream group-server {
        server 192.168.56.111:80 max_fails=2  fail_timeout=30s;
        server 192.168.56.112:80 max_fails=2  fail_timeout=30s;
        server 192.168.56.113:80 max_fails=2  fail_timeout=30s;
        server 192.168.56.114:80 max_fails=2  fail_timeout=30s;
    }
    

    修改nginx.conf配置文件:

    #将刚才新增的配置文件引入
    include /etc/nginx/upstream.conf; 
    

    新增tracker_nginx.conf配置文件:

    cd /etc/nginx/conf.d
    vi tracker_nginx.conf
    

    tracker_nginx.conf内容如下:

    server {
        listen       80;
        server_name  localhost;
        location ~ /group[0-9]/M00 {
            proxy_pass http://group-server;
        }
        access_log  /data/log/nginx/fastdfs.log  proxy;
    }
    

网上比较多人将storage的nginx按照不同的group拆成了不同的upstream,个人觉的没必要,既然全部的节点都可以访问所有group的文件,那么我们为什么还要拆呢??
3. 重启测试

  ```shell
  nginx -t
  nginx -s reload
  ```

  访问以下地址测试结果都是正常的:

  http://192.168.56.115/group2/M00/00/00/wKg4cV7gxyKAREn9AADOeAG8PEw014.jpg

  http://192.168.56.115/group1/M00/00/00/wKg4b17gyDiAIZ1YAADOeAG8PEw810.jpg

在这里插入图片描述
在这里插入图片描述

  1. 另外一台的tracker服务器安装方式雷同
打完收工

目前已经搭建已经完成fastdfs与nginx集群所有的搭建,至于两台tracker的高可用(keepalived+lvs)详见我之前写深入浅出Web应用负载均衡

总结

总体把fastdfs集群搭建讲清楚了,里面涉及到nginx的缓存相关的内容大家可以自行百度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值