一、集群介绍:

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

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

Nginx集群

 

 Nginx集群

 

 Nginx集群

 

 二、搭建一个基本Nginx集群

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

  Nginx集群

 

 

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

  Nginx集群

 

   Nginx集群

 

   Nginx集群

 

   Nginx集群

 三、Nginx基本分发算法

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

  Nginx集群

    Nginx集群

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

      Nginx集群

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

      Nginx集群

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

    Nginx集群

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

 

 

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

1) 基于host分发

      Nginx集群

2) 基于开发语言分发

      Nginx集群

3) 基于浏览器的分发

      Nginx集群

4) 基于源ip

      Nginx集群

五、高可用

  • 高可用要解决的问题:

    Nginx集群

 

  •   如何实现高可用?

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

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

     Nginx集群

 

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

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

  Nginx集群

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

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

  • 安装keepalived软件

    Nginx集群

 

 

  • keepalived配置文件

    Nginx集群

  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配置