zoukankan      html  css  js  c++  java
  • nginx实现动静分离的负载均衡集群

    实战:

    一、源码编译安装nginx

    [root@tiandong63 ~]#yum groupinstall "Development Tools" "Development Libraries" -y          安装开发包
    [root@tiandong63 ~]#yum install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre* -y     安装依赖包

    [root@tiandong63 ~]#tar -zxvf nginx-1.9.4.tar.gz -C /usr/local/src/
    [root@tiandong63 ~]#cd /usr/local/src/
    [root@tiandong63 src]#cd nginx-1.9.4/
    [root@tiandong63 nginx-1.9.4]#./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module

    参数:
    --with-http_dav_module         启用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)默认情况下为关闭,需编译开启
    --with-http_stub_status_module 启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态)
    --with-http_addition_module    启用ngx_http_addition_module支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求)
    --with-http_sub_module         启用ngx_http_sub_module支持(允许用一些其他文本替换nginx响应中的一些文本)
    --with-http_flv_module         启用ngx_http_flv_module支持(提供寻求内存使用基于时间的偏移量文件)

    --with-http_mp4_module         启用对mp4文件支持(提供寻求内存使用基于时间的偏移量文件
     [root@tiandong63 nginx-1.9.4]#make && make install
     [root@tiandong63 nginx-1.9.4]#useradd -M -u 8001 -s /sbin/nologin nginx
    [root@tiandong63 ~]# /usr/local/nginx/sbin/nginx     启动nginx
    [root@tiandong63 ~]# netstat -antup|grep nginx
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      42350/nginx
    测试nginx

    二、nginx服务器日常操作:

    配置nginx为分发器实现动静分离

    vim /usr/local/nginx/conf/nginx.conf

      2 user  nginx nginx;
    43         location / {
     44             root   html;
     45             index  index.html index.htm;
     46         if ($request_uri ~* .html$){
     47                    proxy_pass http://htmlservers;
     48            }
     49         if ($request_uri ~* .php$){
     50                    proxy_pass http://phpservers;
     51            }
     52                    proxy_pass http://picservers;
     53         }
    123 upstream  htmlservers {   #定义负载均衡服务器组名称
    124          server 192.168.199.4:80;
    125          server 192.168.199.5:80;
    126  }
    127  upstream  phpservers{
    128          server 192.168.199.4:80;
    129          server 192.168.199.5:80;
    130  }
    131  upstream  picservers {
    132          server 192.168.199.4:80;
    133          server 192.168.199.5:80;
    134  }
    135 }

    把一下文件注释了,否组php文件直接在nginx服务器上解析了,不在解析给后端的服务器。


    [root@tiandong63 ~]# ln -s /usr/local/nginx/sbin/* /usr/bin/
    [root@tiandong63 ~]# nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [root@tiandong63 ~]# nginx -s reload
    三、配置后端服务器(tiandong64和tiandong65上面配置一样):
    [root@tiandong64 ~]# yum install php httpd -y
    [root@tiandong65 ~]# yum -y install php httpd -y
    [root@tiandong64 ~]# cd /var/www/html/
    [root@tiandong64 html]# more index.html
    192.168.199.4
    [root@tiandong64 html]# more test.php
    192.168.199.4
    <?php
        phpinfo();
    ?>
    [root@tiandong64 html]#
    [root@tiandong64 html]# ll
    total 12
    -rw-r--r-- 1 root root  14 Mar 20 00:24 index.html
    -rw-r--r-- 1 root root 790 Dec 24  2018 pic.PNG
    -rw-r--r-- 1 root root  35 Mar 20 00:25 test.php
    重启Apache服务:
    [root@tiandong64 ~]# /etc/init.d/httpd restart
    [root@tiandong65 ~]# /etc/init.d/httpd restart
    四、测试:

    测试html页面:

    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.4
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.4
    测试php页面:


    测试服务器性能:

    [root@tiandong66 ~]# ab -n 1000 -c 1000 http://192.168.199.3/index.html   运行正常
    [root@tiandong66 ~]# ab -n 2000 -c 2000 http://192.168.199.3/index.html   运行报错
    This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/

    Benchmarking 192.168.199.3 (be patient)
    socket: Too many open files (24)     #测试时,一次打开的socket文件太多。系统默认的一次打开的最多问1024个
    [root@tiandong66 ~]# ulimit -n 10240 
    [root@tiandong63 ~]# ulimit -n 10240

    五、nginx负载的五中策略设置方法:
    1、轮询(默认)
    upstream  htmlservers {   #定义负载均衡服务器组名称
             server 192.168.199.4:80;
             server 192.168.199.5:80;
     }
    2、指定权重(指定轮询几率,weight和访问比例成正比,用户后端服务器性能不均的情况)
    upstream  htmlservers {   #定义负载均衡服务器组名称
             server 192.168.199.4:80 weight=1;
             server 192.168.199.5:80 weight=2;
     }
    3、IP绑定 ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    upstream backserver {
    ip_hash;
    server 192.168.199.4:80;
    server 192.168.199.5:80;
    }
    4、fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    upstream backserver {
    server server1;
    server server2;
    fair;
    }
    5、url_hash(第三方)
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
    upstream backserver {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
    }
    六、故障演练
    当其中一台Apache宕机

    [root@tiandong64 ~]# /etc/init.d/httpd stop
    Stopping httpd:                                            [  OK  ]

    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.4
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.4
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    一直访问的是另外一台机器

    故障恢复:

    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.4
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.4
    [root@tiandong66 ~]# curl 192.168.199.3
    192.168.199.5
    OK!!!!

  • 相关阅读:
    精通CSS高级Web解决方案(第2版)——读书笔记
    MySQL的知识点总结(一)
    json深拷贝
    Typescript 从Array 继承时碰到的问题
    webpack 笔记
    JavaScript 高效代码
    编写更优雅的 JavaScript 代码
    JavaScript复杂判断优雅写法
    深入浅出Javascript事件循环机制
    关于面向对象封装的思考--持续更新
  • 原文地址:https://www.cnblogs.com/winter1519/p/10166627.html
Copyright © 2011-2022 走看看