zoukankan      html  css  js  c++  java
  • Nginx集群

    一、集群介绍:

    将多个物理机器组成一个逻辑计算机,实现负载均衡和容错

    组成要素:
    1) VIP: 虚IP,一个IP地址,给分发器用的,谁拿到谁就是分发器
    2) 分发器: nginx
    3) 数据服务器: Web服务器

     

     

     二、搭建一个基本Nginx集群

      在该集群中的Nginx扮演的角色是:分发器
      任务:接收请求、分发请求、响应请求

      

    • 功能模块
      1) ngx_http_upstream_module 基于应用层分发模块,七层分发器,我们这里用的是这个
      2) ngx_stream_core_module 基于传输层分发模块(1.9开始提供)四层分发器
    • 配置一个Nginx集群
      1) nginx安装:略
      2) 配置业务服务器页面:
      3) 配置nginx分发器
      4) 测试分发
      目标:访问分发器就能拿到数据
      

      

       

       

       

     三、Nginx基本分发算法

      集群分发算法介绍
      如何将用户请求按一定规律分发给业务服务器
      Nginx集群默认算法(upstream支持的)

      

        

    • 轮询(默认)  -适用于静态资源,账号到一个服务器,密码到另一台服务器就没法验证
      每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

          

    • weight(权重) -适用于静态资源
      指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况

          

    • ip_hash   -适用于动态资源
      每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

        

    • fair(第三方)
      按后端服务器的响应时间来分配请求,响应时间短的优先分配
    • url_hash(第三方)
      按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

     四、Nginx分发的不同应用场景

    1) 基于host分发

          

    2) 基于开发语言分发

          

    3) 基于浏览器的分发

          

    4) 基于源ip

          

    五、高可用

    • 高可用要解决的问题:

        

    •   如何实现高可用?

      1、 在主分发器备用分发器上安装keepalived服务

      2、 服务器的容错由Nginx完成,配置

         

    •    keepalived实现分发器切换的原理

      主分发器优先级比备分发器优先级高
      keepalived启动之后,会产生一个虚IP,刚开始虚IP在主分发器上
      主分发器挂了,虚IP就出现在备分发器上,主分发器恢复,虚IP又回到主分发器

      

      keepalived使用vrrp协议,主分发器向网络发组播,地址224.0.0.18  广播自己的状态(是否活着),
      备份分发器收到广播后,发现优先级比自己大的还活着,自己就待机,

      否则在多长时间内没收到组播,就向虚IP发请求确认,确认主分发器挂了,就启动自己,自己获得虚IP
      keepalived每隔2秒探测一次nginx服务,执行脚本:
      <"如果nginx挂了,就启动Nginx,如果启动失败,就把自己结束">

    • 安装keepalived软件

        

    • keepalived配置文件

        

      1) 主分发器:

    ! Configuration File for keepalived
    
    global_defs {
       router_id NGINX_DEVEL
    }
    
    vrrp_script check_nginx {
        script "/etc/keepalived/nginx_pid.sh"
        interval 2
        fall 1
    }
    
    vrrp_instance nginx {
        state MASTER
        interface ens33
        mcast_src_ip 192.168.10.40
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        track_script {
            check_nginx
        }
    
        virtual_ipaddress {
            192.168.10.213/24
        }
    }
    主分发器keepalived配置

    /etc/keepalived/nginx_pid.sh脚本
    “如果nginx进程挂了就启动nginx,如果nginx起不来,就结束自己”
    ---------------------
    #!/bin/bash
    nginx_kp_check(){
    nginxpid=`ps -C nginx --no-header |wc -l`
    if [ $nginxpid -eq 0];then
        /user/local/nginx/sbin/nginx
        sleep 1
        nginxpid=`ps -C nginx --no-header |wc -l`
        if [ $nginxpid -eq 0];then
            systemctl stop keepalived
        fi
    fi
    }
    ---------------------
    探查脚本

      2) 备分发器:

      跟主分发器一样,只修改三处:分发器状态、IP、优先级

    state BACKUP
        ...
    mcast_src_ip 192.168.10.41
        ...
    priority 100
        ...
    • 测试

      

       

       1、启动42 43的Nginx(web服务)

      2、启动40、41的Nginx(分发器)

      3、测试:访问40或41会将请求分发到42、 43服务器

      4、启动主分发器40上的keepalived

      5、测试:在40网卡上产生虚IP

      6、启动备分发器41上的keepalived

      7、访问虚IP,请求被分发到42、 43服务器,表示keepalived正常工作

      8、将40上的Nginx停止,过1s查看是否自动被启动,表示脚本正常工作,如果未正常工作,可能要设权限chmod 755

      9、将40上的Nginx一直停止,查看41上的keepalived是否顶上去(虚IP被分配到41机器上),看备用分发器上的keepalived是否工作

  • 相关阅读:
    前端安全问题
    windows下nginx的安装及使用方法入门
    windows下安装nginx
    获取div的高度
    HAOI2015 简要题解
    JLOI2016 简要题解
    JLOI2015 DAY2 简要题解
    JLOI2015 DAY1 简要题解
    SCOI2016 Day2 简要题解
    CS Academy Sliding Product Sum(组合数)
  • 原文地址:https://www.cnblogs.com/staff/p/11498924.html
Copyright © 2011-2022 走看看