• nginx反向代理


    集群概述

    简        介:

        集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完一个任务。

    集群优点:

    • 高性能
    • 可伸缩性
    • 高可用

    集群种类:

    • 负载均衡集群     简称:LBC或者LB。      ===>>>解决调度问题
    • 高可用集群         简称:HAC。                 ===>>>解决单点故障
    • 高性能计算集群  简称:HPC.                      ===>>>解决复杂运算
    • 网络计算集群                                             ===>>>云计算等

    Nginx复杂概念说明:

    • 对用户访问请求进行调度管理
    • 对用户的访问请求进行压力分担

    Nginx反向代理说明:

    • 反向代理,接收用户请求代替用户向后端访问

     Nginx反向代理所使用的模块:

    • ngx_http_upstream_module
    • ngx_http_proxy_module

    upstream模块配置

    参数:

    • upstream                  ===> 定义一个负载均衡池 名称自定义
    •  server                      ===> 服务器起点标签 后面跟节点地址
    • weight=3                  ===> 指定轮训次数,性能好可设置大一些
    • max_fails=3           ===> nginx尝试连接后端主机失败的次数
    • fail_timeout=10s       ===> 在fail_timeout定义的次数失败后,距离下次检查的间隔时间
    • backup                      ===> 备份服务器不提供工作,主服务器宕机提供工作

    调度算法

    • 定义轮询调度算法   -rr-     默认调度算法
    • 定义权重调度算法   weight=3
    • 定义静态调度算法    ip_hash   如果没有session共享可以临时用ip_hash算法 
    • 定义daur(动态调度算法)   根据后端服务器响应时间来分配请求,比较智能的调度锻打,此算法可以根据页面大小加载时间智能的进行负载均衡,需要下载upstream_fair模块
    • 定义最小的连接数-least_conn  
    ####################### proxy
        upstream server_pools {
            server 192.168.10.249:80 weight=3 max_fails=3 fail_timeout=10;
            server 192.168.10.253:80 weight=5 max_fails=3 fail_timeout=10;
            server 192.168.10.252:80 weight=5 max_fails=3 fail_timeout=10 backup;
        }

    ip_hash算法(不能有backup标识和weighe标识)

        upstream server_pools {
            ip_hash;
            server 192.168.10.249:80 max_fails=3 fail_timeout=10;
            server 192.168.10.253:80 max_fails=3 fail_tim eout=10;
            server 192.168.10.252:80 max_fails=3 fail_timeout=10;
        }  

    动态调度算法

        upstream server_pools {
            server 192.168.10.249:80 max_fails=3 fail_timeout=10;
            server 192.168.10.253:80 max_fails=3 fail_timeout=10;
            server 192.168.10.252:80 max_fails=3 fail_timeout=10;
            fair;
        }

    proxy模块配置

    参数详解:

    • proxy_pass http://server_pools;                                         ===>web.yan.com请求都发送到upstream定义的服务器节点池。
    • proxy_set_header Host $host;                                           ===>在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机
    • proxy_set_header X-Forwarded-For $remote_addr;         ===>在代理向后端服务器发送的http请求头中加入X-Forwarded-For字段信息,用于后端服务器程序、日志等接收记录真实用户的IP,而不是代理服务器的IP。
    • proxy_connect_timeout 60;                                                ===> 设定反向代理与后端节点服务器连接的超时时间,即发起握手等候响应的超时时间。
    • proxy_send_timeout 60;                                                     ===>设定代理后端服务器的数据回传超时时间
    • proxy_read_timeout 60;                                                     ===>设定Nginx从代理的后端服务器获取信息的超时时间
    • proxy_buffer_size 4k;                                                         ===>设定缓冲区的大小
    • proxy_buffers 4 32k;                                                           ===>设定缓冲区的数量和大小
    • proxy_busy_buffers_size 64k;                                            ===>设定系统很忙时可以使用的proxy_buffers大小
    • proxy_temp_file_write_size 64k;                                        ===>设定proxy缓存临时文件的大小
    • access_log off;                                                                 ===> 不记录日志可选
    • proxy_next_upstream                                                    ===>提高用户体验报错自动切换
        server {
            listen 80;
            server_name web.yan.com;
            location / {
               proxy_pass http://server_pools;
               proxy_set_header Host $host;
               proxy_set_header X-Forwarded-For $remote_addr;
               proxy_connect_timeout 60;
               proxy_send_timeout 60;
               proxy_read_timeout 60;
               proxy_buffer_size 4k;
               proxy_buffers 4 32k;
               proxy_busy_buffers_size 64k;
               proxy_temp_file_write_size 64k;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_504;
            }
        }

    动静分离

    服务器规划:

    /upload     10.0.0.8:80       html/www/upload         upload服务器
    /static       10.0.0.7:80       html/www/static            static静态服务器
    /                10.0.0.9:80      html/www 默认

    创建upstream负载信息:

        upstream upload_pools {
          server 192.168.10.56:80;
        }
        upstream static_pools {
          server 192.168.10.57:80;
        }
        upstream default_pools {
          server 192.168.10.58:80;
        }

     调用upstream信息

        server {
            listen 80;
            server_name www.yan.com;
        location /static/ { 
            proxy_pass http://static_pools;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    
            location /upload/ { 
                proxy_pass http://upload_pools;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    
         location / { 
                proxy_pass http://default_pools;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
             access_log  logs/access_www.log  main;
        }
    }

    手机用户电脑用户访问不同网站实例配置:

        upstream upload_pools {
          server 10.0.0.8:80;
        }
    
        upstream static_pools {
          server 10.0.0.7:80;
        }
    
        upstream default_pools {
          server 10.0.0.9:80;
        }
    
        server {
            listen 80;
            server_name www.yan.com;
            location / {
             if ($http_user_agent ~* "Iphome")
              {
                proxy_pass http://static_pools;
              }
             if ($http_user_agent ~* "Android")
              {
                proxy_pass http://upload_pools;
              }
            proxy_pass http://default_pools;
                   }
             access_log  logs/access_www.log  main;
        }
    }

     keepalived加Nginx高可用集群

    Nginx配置

    配置listen 192.168.10.244:80; (域名解析到VIP)内核需要开启允许绑定非本地的IP

    echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
    ##/etc/sysctl.conf 加上
    sysctl -p 

    配置文件

        upstream server_pools {
            server 192.168.10.56;
            server 192.168.10.57;
            server 192.168.10.58;
        }
        server {
            listen 192.168.10.244:80;
            server_name www.yan.com;
            location / {
                proxy_pass http://server_pools;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $remote_addr;
            }
            access_log  logs/access_www.log  main;
        }
            server {
            listen 192.168.10.245:80;
            server_name blog.yan.com;
            location / {
                proxy_pass http://server_pools;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $remote_addr;
            }
            access_log  logs/access_blog.log  main;
            
        }

    keepalived配置

        keepalived脑裂说明:

         由于某种原因,导致两台高可用服务器对在指定的时间内,无法检测到对方心跳信息,各自取得资源服务权,而此时的两台高可用服务器都在正常运行,会导致同一个IP或者服务器在两端同时存在而发生冲突,严重占用同一个VIP使用户写入数据丢失。

         心跳线老化,

         高可用集群同一个交换机故障

        防火墙规则

        网卡等信息配置不正确等

        解决办法,监控备用服务器需IP信息,如果有则,主服务器出现问题。

    #!/bin/bash
    
    if [ `ip a s ens33|grep 192.168.10.244|wc -l` -ne 0 ]
    then
        echo "keepalived is error!!!"
    else
        echo "keepalived is ok!!!"
    fi

      NGinx宕机实现,keepalived主备切换(配置文件标红处就是执行脚本切换操作)

     #!/bin/bash
     #name: check_web.sh
     #desc: check nginx and kill keepalived 
     if [ `ps -ef |grep nginx |grep -v grep |wc -l` -lt 2  ];then
          /etc/init.d/keepalived stop 
     fi
    chmod +x /server/scripts/check_web.sh 

    配置文件

    #lb01
    global_defs {
       router_id LVS_01        #唯一标示
    }

      vrrp_script check_web {
        script "/server/scripts/check_web.sh"           #执行的脚本路径
        interval 2                                      #两秒检查一次             
        weight 2                                        #触发脚本优先级减去定义的weight降低优先级改为备服务
      }

    vrrp_instance VI_1 {      #
        state MASTER
        interface ens33
        virtual_router_id 51
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass admin
        }
        virtual_ipaddress {
         192.168.10.244/24 dev ens33 label ens33:1
        }
         track_script { #执行脚本
          check_web
         } } vrrp_instance VI_2 { state BACKUP interface ens33 virtual_router_id
    52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass root } virtual_ipaddress { 192.168.10.245/24 dev ens33 label ens33:2 }
    }
    
    #lb02 
    global_defs {
       router_id LVS_02
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass admin
        }
        virtual_ipaddress {
         192.168.10.244/24 dev ens33 label ens33:1
        }
    }
    vrrp_instance VI_2 {
        state MASTER
        interface ens33
        virtual_router_id 52
        priority 150 
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass root
        }   
        virtual_ipaddress {
         192.168.10.245/24 dev ens33 label ens33:2
        }   
    
    }
  • 相关阅读:
    【像程序员一样思考】读书笔记4
    MFC ListControl 与 Excel 数据的导入导出
    OpenCV中findContours函数的使用
    十大算法
    qsort对二维数组的排序
    【像程序员一样思考】读书笔记3
    【像程序员一样思考】 读书笔记2
    【像程序员一样思考】 读书笔记1
    代码混淆
    布局优化
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/9507341.html
Copyright © 2020-2023  润新知