此文为转载,支持原创,请移步:

https://blog.csdn.net/u012453843/article/details/69172423

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012453843/article/details/69172423
          由于博客图片量大,篇幅太长,因此需要分上、中、下三篇博客来写,上篇和中篇我们已经一起学习完了,这篇博客我们一起学习下剩余部分。

一、配置反向代理

我们需要在两个跟踪器上安装nginx(也就是192.168.156.5和192.168.156.6)以提供反向代理服务,目的是使用统一的一个IP地址对外提供服务。为了避免一些不必要的错误,我们先把其它四台虚拟机的窗口关掉。

1.解压ngx_cache_purge-2.3.tar.gz,解压命令:tar -zxvf ngx_cache_purge-2.3.tar.gz -C /usr/local/fast/,如下图所示(另一台设备就不粘贴图片了)。

解压完之后我们在/usr/local/fast/目录下可以看到多了一个ngx_cache_purge-2.3文件夹。如下图所示。

2.下载需要的依赖库,在两台设备上依次执行下面四条命令。

yum install pcre
yum install pcre-devel
yum install zlib
yum install zlib-devel
     3.为两台设备都安装nginx,我们在XShell的下方的输入框中输入命令:cd /usr/local/software/并敲回车,两个窗口都会进入到/usr/local/software目录下,然后在下面的输入框再输入"ll"来查看/usr/local/software目录下的文件,如下图所示(只有输入框左边的图标是多窗口的情况下才能一次作用所有窗口,如果当前是单窗口图标,就如下图那样选择全部XShell)。

接着,我们在下面的输入框中输入:tar -zxvf nginx-1.6.2.tar.gz -C /usr/local/并按回车,会在两个窗口同时执行解压操作。如下图所示。

接下来我们在下面的输入框中输入:cd /usr/local并按回车,两台设备都进入到/usr/local/nginx-1.6.2目录下。如下图所示。

接着,在下面的输入框中加入模块命令:./configure --add-module=/usr/local/fast/ngx_cache_purge-2.3,回车就会在两台设备上都执行添加cache模块并会检查环境。

接着在下面的输入框中输入命令:make && make install,回车就会在两台设备上都执行编译安装。如下图所示。

下面我们需要修改下两台设备/usr/local/nginx/conf/目录下的nginx.conf文件,大家可以直接把下面代码替换这个目录下的该文件,也可以直接到:http://download.csdn.net/detail/u012453843/9803673这个地址下载nginx.conf文件来替换。不过由于我们搭建环境的虚拟机IP可能不一样,因此,我们需要根据实际情况修改下IP等信息。(注意192.168.156.5和192.168.156.6这两台设备的/usr/local/nginx/conf/目录下的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.156.7:8888 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.156.9:8888 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.156.10:8888 weight=1 max_fails=2 fail_timeout=30s;
    }
 
    server {
        listen       8000;
        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文件中配置缓存路径时指定了该目录,但是这两个目录目前还不存在,因此我们需要在192.168.156.5和192.168.156.6这两台设备上都创建下这两个目录,由于涉及到多级,因此需要递归创建目录,使用命令:mkdir -p /fastdfs/cache/nginx/proxy_cache和mkdir -p /fastdfs/cache/nginx/proxy_cache/tmp,如下图所示。

由于我们配置了两个tracker的访问端口是8000,而我们的防火墙是不允许访问该端口的,因此我们需要修改下防火墙,使其允许访问8000端口,这个操作我在上篇和中篇都介绍过了,这里就不啰嗦了。

下面我们便来启动这两台设备上的nginx。启动所使用的命令是/usr/local/nginx/sbin/nginx。启动完之后,可以使用ps -ef | grep nginx命令来查看nginx是否正常启动,如果看到root       4027      1  0 08:18 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx这条信息,说明正常启动了。

[root@itcast05 conf]# /usr/local/nginx/sbin/nginx
[root@itcast05 conf]# ps -ef | grep nginx
root       4027      1  0 08:18 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody     4028   4027  0 08:18 ?        00:00:00 nginx: worker process      
nobody     4029   4027  0 08:18 ?        00:00:00 nginx: cache manager process
nobody     4030   4027  0 08:18 ?        00:00:00 nginx: cache loader process
root       4032   1522  0 08:18 pts/0    00:00:00 grep nginx
        两台设备都启动完nginx之后,我们再在192.168.156.5上上传两次次图片,第一次返回的路径是在group1下,第二次返回的路径是在group2下。
[root@itcast05 conf]# /usr/bin/fdfs_upload_file  /etc/fdfs/client.conf /usr/local/3.jpg
group1/M00/00/00/wKicCFjkOVGAMlQvAAHk-VzqZ6w757.jpg
[root@itcast05 conf]# /usr/bin/fdfs_upload_file  /etc/fdfs/client.conf /usr/local/3.jpg
group2/M00/00/00/wKicCVjkOeaAVb0dAAHk-VzqZ6w123.jpg
[root@itcast05 conf]# 
        由于我们在192.168.156.5和192.168.156.6上配置了代理,代理端口是8000,所以我们可以访问这两个IP的8000端口来访问我们刚才上传的图片,如下图所示(我们访问http://192.168.156.5:8000/group1/M00/00/00/wKicCFjkOVGAMlQvAAHk-VzqZ6w757.jpg也能访问到该图片)。这说明我们配置的代理完全没问题。

我们知道,nginx对外提供服务有可能碰到服务挂掉的时候,这时候高可用就显得异常重要了,因此现在我们搭建一个nginx和keepalived结合实现的nginx集群高可用的环境,大家可以参考http://blog.csdn.net/u012453843/article/details/69668663这篇博客进行学习。

我们现在要把keepalived实现的nginx集群高可用应用到我们的FastDFS集群当中,现在用于搭建nginx集群高可用的设备是192.168.156.11和192.168.156.12,我们只需要修改下这两台设备的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;
}
 
 
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;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
    
    upstream fastdfs_tracker {
       server 192.168.156.5:8000 weight=1 max_fails=2 fail_timeout=30s;
       server 192.168.156.6:8000 weight=1 max_fails=2 fail_timeout=30s;
    }
 
    server {
        listen       80;
        server_name  localhost;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location /fastdfs {
           root html;
           index index.html index.htm;
           proxy_pass http://fastdfs_tracker/;
           proxy_set_header Host $http_host;
           proxy_set_header Cookie $http_cookie;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           client_max_body_size 300m;
        }
 
        #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;
        }
    }
}

我们对配置文件做了两处修改,一处是添加了负载均衡upstream fastdfs_tracker,如下所示。我们是把192.168.156.5和192.168.156.6两台设备作为tracker,现在我们加了一层nginx来代理这两个tracker。

upstream fastdfs_tracker {
   server 192.168.156.5:8000 weight=1 max_fails=2 fail_timeout=30s;
   server 192.168.156.6:8000 weight=1 max_fails=2 fail_timeout=30s;
}
      第二处修改是添加了一个location并且匹配规则是路径当中有fastdfs。如下所示。
location /fastdfs {
           root html;
           index index.html index.htm;
           proxy_pass http://fastdfs_tracker/;
           proxy_set_header Host $http_host;
           proxy_set_header Cookie $http_cookie;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           client_max_body_size 300m;
        }
       做好了修改之后,我们只需重新启动192.168.156.11和192.168.156.12这两台设备的nginx即可。
[root@nginx1 conf]#  /usr/local/nginx/sbin/nginx -s reload
[root@nginx1 conf]#
[root@nginx2 conf]# /usr/local/nginx/sbin/nginx -s reload
[root@nginx2 conf]#
       这样我们便配置好了虚拟IP,现在我们从192.168.156.5再上传一张图片,如下所示。
[root@itcast05 conf]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/3.jpg 
group1/M00/00/00/wKicB1jqnPqARiT6AAHk-VzqZ6w956.jpg
[root@itcast05 conf]# 
       我们现在就用虚拟IP192.168.156.110来访问我们刚才上传的图片,只是注意在地址栏中要记得输入fastdfs(这是我们nginx.conf文件中location /fastdfs{}规则规定的)。如下图所示,发现,我们通过虚拟IP便可以访问我们上传的图片了。这样的好处是,对用户来说,只需要访问这个虚拟IP就可以了,不用关心FastDFS集群内部的转发机制。

这样我们的FastDFS集群便搭建完了,搭建完后的集群图如下图所示。这个集群当中192.168.156.7、192.168.156.8、192.168.156.9、192.168.156.10这四台设备以8888端口对外提供服务,我们使用Tracker跟踪器管理这四台storage设备,两个Tracker的nginx对外提供的端口号是8000,也就是我们可以使用两台Tracker的任何一台设备的IP并且使用端口8000来访问存储在storage上的资源文件。其实我们完全可以在两台Tracker设备上搭建keepalived和nginx相结合的高可用环境并且对外提供虚拟IP192.168.156.110和端口80来访问资源文件。只不过这里为了展示多层nginx负载均衡所以才在192.168.156.11和192.168.156.12上专门搭建了keepalived和nginx相结合的高可用环境,由这两台设备对外提供虚拟IP服务,由于端口使用了默认的80,因此我们在使用虚拟IP192.168.156.110访问图片的时候才不用输入端口号的。

备注:启动集群步骤

1.启动6台设备(192.168.156.5、192.168.156.6、192.168.156.7、192.168.156.8、192.168.156.9、192.168.156.10)的nginx(其中192.168.156.11和192.168.156.12配置了keepalived开机自启动,顺带会启动nginx,因此这两台设备不用启动nginx)

2.启动tracker(192.168.156.5和192.168.156.6,启动命令:/etc/init.d/fdfs_trackerd start)

3.启动storage(192.168.156.7、192.168.156.8、192.168.156.9、192.168.156.10,启动命令:/etc/init.d/fdfs_storaged start)

这样FastDFS集群便都启动完了。
--------------------- 
作者:在京奋斗者 
来源:CSDN 
原文:https://blog.csdn.net/u012453843/article/details/69172423 
版权声明:本文为博主原创文章,转载请附上博文链接!

手把手教你搭建FastDFS集群(下)相关推荐

  1. 【超详细】手把手教你搭建MongoDB集群搭建

    MongoDB集群搭建 MongoDB集群简介 mongodb 集群搭建的方式有三种: 主从备份(Master - Slave)模式,或者叫主从复制模式. 副本集(Replica Set)模式 分片( ...

  2. redis 端口_「建议收藏」手把手教你搭建redis集群

    前言 在生产中单机的redis服务不能保证程序的高可用,所以有时需要我们来搭建一个redis集群,保证某一台redis服务挂了的时候,我们的服务还可以保证正常运行. 单机redis的搭建,可以参考我的 ...

  3. 手把手教你搭建Kubernetes集群

    文章内容输出来源:拉勾教育Java高薪训练营 一.初识拉勾教育 最开始并不知道拉勾有教育模块的业务,一直都以为只有招聘.直到今年5月份的时候拉勾的小姐姐打电话给我说他们有一个训练营问我是否有兴趣,那个 ...

  4. 手把手带你搭建redis集群

    redis-cluster是redis官方提供的分布式数据库解决方案,集群通过分片进行数据共享,并提供复制和故障转移功能. redis集群主要分为主节点和从节点.主节点用于处理槽,而从节点用于复制某个 ...

  5. 手把手教你搭建firefox火狐浏览器下的自动化测试环境

    自动化测试是时代趋势,因此很多测试人员开始研究自动化测试,web自动化测试化测试并不难,但是很多人都是被挡在了环境搭建这一步,后面学习激情全无,这里,我来手把手教大家搭建火狐浏览器下的自动化测试环境. ...

  6. 搭建fastdfs集群

    1,安装libfastcommon github选择需要安装的release版本 https://github.com/happyfish100/libfastcommon/releases 下载安装 ...

  7. Spring Cloud Alibaba:一步一步教你搭建Nacos集群

    架构图 3个或者3个以上Nacos才能构成集群 Nacos集群模式下,微服务节点并不直接访问Nacos,而是通过Nginx反向代理来访问 Nacos集群模式不能使用自带的derby存储,而是需要配置M ...

  8. 【转载】手把手教你配置Windows2003集群(图)

    集群是在一组计算机上运行相同的软件并虚拟成一台主机系统为客户端与应用提供服务:计算机通过缆线物理连接并通过集群软件实现程序上的连接,可以使计算机实现单机无法实现的容错和负载均衡.集群技术在企业组织部署 ...

  9. Docker集群环境下安装Fastdfs集群+Nginx负载均衡

    一.环境配置 现有两台服务器10.168.103.110(旧服务器)和10.168.103.111(新服务器),其中110服务器上有swarm集群,一个tracker和一个storage,现在要做Fa ...

  10. FastDFS 集群 安装 配置

    原文:http://www.cnblogs.com/ityouknow/p/7769142.html 这篇文章介绍如何搭建FastDFS 集群 FastDFS是一个开源的轻量级分布式文件系统,它对文件 ...

最新文章

  1. 豪气!华为放话:3年培养100万AI人才!网友神回应了
  2. WinCvs提示:import requires write access to the repository
  3. 高糊视频秒变4K,速度比TecoGAN快了9倍!东南大学提出新的视频超分辨率系统
  4. TCP/IP的层次结构以及各层数据封装的过程 (一)
  5. java gc信息_JVM之GC回收信息详解
  6. ElementUI的DateTimePicker组件添加验证规则以及限制选择范围
  7. 神策合肥研发中心携手安徽开发者社区,深入交流共促行业发展
  8. 计算机维护系统Win8PE,win8如何进入PE重装电脑系统
  9. Qt工作笔记-线程池作用之一:限制系统中执行线程的数量
  10. 【回文串7】LeetCode 234. Palindrome Linked List
  11. css中hack是什么
  12. 100套Java实战项目,附带源码+视频教程,全部免费,打包带走
  13. matlab无法显示图片
  14. dapper--查询超时时间
  15. 获取U盘 VID,PID
  16. 利用python拼接图片代码_Python实现图片拼接的代码
  17. Windows无法解压文件-potentially harmful
  18. 概率论中常见分布总结以及python的scipy库使用:两点分布、二项分布、几何分布、泊松分布、均匀分布、指数分布、正态分布
  19. java8新特性之一:流式数据处理(包含list,map数据处理)。
  20. Linux中部分命令英语全拼

热门文章

  1. mybatis 注解使用
  2. 将给定的字符串划分为所有可能的IP地址 Restore IP Addresses
  3. 智能安防系统如何防火、防盗、防煤气?
  4. 解决 Error:No suitable device found: no device found for connection System eth0
  5. Swift 变量、常量、数据类型
  6. 用于服务器接入的防火墙网关的八个关键×××
  7. ROS防火墙规则收集
  8. mysql 最小值对应的其他属性_查询最小值对应的非group by字段
  9. Cgroup学习之——Ubuntu下交叉编译ARM平台libcgroup工具
  10. Linux下挂载和格式化虚拟磁盘图文教程