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是否工作

原文地址:https://www.cnblogs.com/staff/p/11498924.html