Loading

nginx实现请求的负载均衡 + Keep Alive实现nginx的高可用

nginx实现请求的负载均衡 + Keep Alive实现nginx的高可用

实践中客户端无法直接跟服务端发起请求的时候,我们就需要代理服务。代理可以实现客户端与服务端之间的通信,我们的Nginx也可以实现相应的代理服务。代理分为正向代理和反向代理,此文就来演示一下Nginx配置正向代理和反向代理的场景。


什么是正向代理/反向代理?

  • 正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

  • 反向代理:客户端发送请求给反向代理服务器,但是代理服务器上没有客户端需要的资源,代理服务器会判断转发到原始服务器获得资源,并把资源返回给客户端;在整个过程,客户端不知道自己访问的是一个代理服务器,而是一个原始服务器

常规部署方案



Nginx反向代理

web01和web02安装nginx可以参考我之前的博客:Django + Uwsgi + Nginx 的生产环境部署之实战篇


  • web01配置

    [root@linux-node4 ~]# yum -y install nginx 
    [root@linux-node4 ~]# echo web01 > /usr/share/nginx/html/index.html
    

  • web02配置

    [root@linux-node4 ~]# yum -y install nginx 
    [root@linux-node4 ~]# echo web01 > /usr/share/nginx/html/index.html
    

  • 然后对着两个web服务器进行测试nginx服务

    start nginx
    

nginx反向代理配置

安装nginx服务器

[root@linux-node4 ~]# yum -y install nginx

配置反向代理

stream {

    log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';

    access_log  /var/log/nginx/django-access.log  main;

    upstream django-apiserver {

                server 192.168.56.62:80;	//web服务器ip 

                server 192.168.56.63:80;

            }


    server {

       listen 88;	//Nginx代理端口

       proxy_pass django-apiserver;

    }

}

  • 测试反向代理可用性

    http://192.168.56.62/ # web01 
    http://192.168.56.63/ # web02
    # 可以停止一个nginx服务,测试可用性
    

Nginx+KeepAlive方案

为什么使用Nginx+KeepAlive方案部署?

因为我们是使用nginx实现的反向代理,实现负载均衡,如果这个nginx挂了,我们整个服务都会挂掉,所以这个Nginx+KeepAlive方案就被广泛使用,原理就是帮我们的nginx的服务器找一个备胎,如果我们的主服务器没有事的话,就正常运行,备胎就什么活都不干,假如主服务器挂掉,我们的备胎(nginx从服务器)就被扶正了。



部署nginx负载均衡

  • 安装nginx服务

    [root@linux-node4 ~]# yum -y install nginx
    
  • 配置反向代理

    [root@lb-master ~]# vim /etc/nginx/nginx.conf
    
     //这个跟之前的配置一样
    stream {
    
        log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    
        access_log  /var/log/nginx/django-access.log  main;
    
        upstream django-apiserver {
    
                    server 192.168.56.62:80;
    
                    server 192.168.56.63:80;
    
                }
    
        server {
    
           listen 88;
    
           proxy_pass django-apiserver;
    
        }
    }
    

测试反向代理可用性

  • 测试集群可用性

    http://192.168.56.62/ # web01
    http://192.168.56.63/ # web02 
    # 可以停止一个nginx服务,测试可用性
    

  • 服务管理

    //启动nginx
    [root@lb-slave ~]# systemctl start nginx  
    
    //重启nginx
    [root@lb-slave ~]# systemctl enable nginx
    

KeepAlive安装与配置

安装keepAlive

[root@lb-master ~]# yum -y install keepalived

keepalive-master配置修改

  • 主服务器。。。

  • 注:默认的keepalived.conf配置太多,直接删除,用下面配置替换即可
  • 192.168.56.61

[root@lb-master ~]# vim /etc/keepalived/keepalived.conf 

global_defs { 

   notification_email { 

     acassen@firewall.loc 

     failover@firewall.loc 

     sysadmin@firewall.loc 

   } 

   notification_email_from Alexandre.Cassen@firewall.loc  

   smtp_server 127.0.0.1 

   smtp_connect_timeout 30 

   router_id NGINX_MASTER

} 

# 健康监测nginx

vrrp_script check_nginx {

    script "/etc/keepalived/check_nginx.sh"      # 设置检查nginx是否存活的脚本位置


}

# keepalive热备组配置

vrrp_instance VI_1 { 

    state MASTER            # 配置当前keepalive为master角色

    interface eth0           # 网卡名字,必须和实际网卡名称一致,默认是ens33

    virtual_router_id 51       # VRRP 路由 ID实例,每个实例是唯一的 

    priority 100            # 优先级,备服务器设置 90 

    advert_int 1            # 指定VRRP 心跳包通告间隔时间,默认1秒 

    authentication { 

        auth_type PASS      

        auth_pass 1111       # 设置keepalive的master和slave之间简单的秘钥认证

    }  

    virtual_ipaddress { 

        192.168.56.60/24     # 设置keepalive虚拟IP地址

    } 

    track_script {

        check_nginx

    } 

}

keepalive-slave配置修改

  • 注:默认的keepalived.conf配置太多,直接删除,用下面配置替换即可
  • 192.168.56.64

[root@lb-master ~]# vim /etc/keepalived/keepalived.conf 

 

global_defs { 

   notification_email { 

     acassen@firewall.loc 

     failover@firewall.loc 

     sysadmin@firewall.loc 

   } 

   notification_email_from Alexandre.Cassen@firewall.loc  

   smtp_server 127.0.0.1 

   smtp_connect_timeout 30 

   router_id NGINX_BACKUP

} 

vrrp_script check_nginx {

    script "/etc/keepalived/check_nginx.sh"

}

vrrp_instance VI_1 { 

    state BACKUP            # 设置keepalive角色为backend

    interface eth0           # 设置虚拟网卡名称

    virtual_router_id 51       # VRRP 路由 ID实例,每个实例是唯一的,master和slave保持一致即可

    priority 90             # 优先级,备服务器设置 90 

    advert_int 1            # 指定VRRP 心跳包通告间隔时间,默认1秒 

    authentication { 

        auth_type PASS      

        auth_pass 1111 

    }  

    virtual_ipaddress { 

        192.168.56.60/24     # 设置虚拟网卡地址

    } 

    track_script {

        check_nginx

    } 

}

添加nginx健康监测脚本

[root@lb-master keepalived]# vim /etc/keepalived/check_nginx.sh

#!/bin/bash

count=$(ps -ef |grep nginx |egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then

    exit 1

else

    exit 0

fi

[root@lb-master keepalived]# chmod +x /etc/keepalived/check_nginx.sh         # 给脚本添加一个可执行

权限

启动keepalive命令

[root@lb-master ~]# systemctl start keepalived 
[root@lb-master ~]# systemctl enable keepalived

测试keepalive高可用


使用ip addr 可以查看ip地址


项目部署并发分析

并发常用名词

  1. PV(访问量): 页面访问量,页面刷新一次算一次。

  2. UV(独立访客): 即Unique Visitor,一个客户端(电脑,手机)为一个访客;

  3. DAU(日活跃用户数):登录或使用了某个产品的用户数,这与流量统计工具里的访客(UV)概念相似。

  4. 峰值QPS:

    原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间

    公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)

  1. QPS/TPS(每秒查询率):每秒能够查询次数(QPS/TPS= 并发数 / 平均响应时间)

    并发数:并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。

    吐吞量:吞吐量是指系统在单位时间内处理请求的数量

    响应时间(RT):响应时间是指系统对请求作出响应的时间,一般取平均响应时间

posted @ 2021-01-15 21:07  就学45分钟  阅读(430)  评论(0编辑  收藏  举报