nginx反向代理、负载均衡、高可用配置

一、nginx简介

1、nginx是高性能的http和反向代理服务器,处理高并发能力强,能经受高负载的考验。

2、nginx配置文件内容包含三部分

    1)全局块:配置服务器整体运行的配置指令,比如worker_processes----1;是处理并发的配置,一般和CPU数相同。

    2)events块:影响nginx服务器与用户的网络连接,比如worker_connections----1024;是每个worker_processes支持最大的连接数为1024。

    3)http块:还包含两部分,http块和server块。

3、nginx原理

    1)是一个master下多个worker的模式,其中每个worker都是独立的进程,当master发布请求任务的时候,worker来争抢请求任务。

nginx反向代理、负载均衡、高可用配置

    2)一个master多个worker的好处:好处一是可以使用nginx -s reload热部署;好处二是每个worker都是独立的进程,如果其中一个worker出现问题,其他worker独立,继续进行请求任务的争抢,实现请求过程,不会造成服务中断。

    3)worker数目一般设置和CPU数相同比较合适。

    4)发送一个请求,如果nginx作为反向代理服务器时,占用worker4个连接数;如果nginx作为普通的静态访问服务器时,占用2个连接数。

    5)普通的静态访问最大并发数是:worker_connection*worker_processes/2;

          作为反向代理时最大并发数是:worker_connection*worker_processes/4

二、反向代理

客户端访问反向代理服务器,反向代理服务器再把请求转发到指定网站。暴露的是反向代理服务器的地址,隐藏了真实服务器的地址。

1、访问本机80端口,实际跳转到8080端口

主要配置http块内server块,如下图:

nginx反向代理、负载均衡、高可用配置

此时浏览器访问192.168.17.129,实际访问的是本机的8080端口(nginx会把请求反向代理到本机的8080端口)。

2、根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001

主要配置http块内server块,如下图:

nginx反向代理、负载均衡、高可用配置

测试结果如下图:

nginx反向代理、负载均衡、高可用配置

三、负载均衡

负载均衡:增加服务器的数量,然后将请求分发到各个服务器,将原来请求集中到单个服务器的情况,改为将请求分发到多个服务器,也就是将负载分发到多个服务器。

主要配置http块,如下图:

第一步,在http块内部server块上方加入以下配置:

nginx反向代理、负载均衡、高可用配置

第二步,在http块内的server块内加入以下配置:

nginx反向代理、负载均衡、高可用配置

此时,访问192.168.17.129,会轮换展示8080和8081端口的页面

现在介绍一下nginx在负载均衡时分配请求到服务器的策略,如下

1、轮询(默认):每个请求按时间顺序,逐一分配到不同的服务器,如果其中的服务器宕掉了会自动剔除。

2、weight权重:默认为1,权重越高,被分配到的请求越多。

3、ip_hash:每个请求按照访问端ip的hash结果进行分配,这样每个用户固定访问一个服务器,解决session跨服务器的问题。

4、fair第三方:按服务器的响应时间来分配,响应时间短的优先分配。

四、配置高可用的集群

高可用:准备两台或多台nginx服务器,通过keepalived进行主备服务器配置并添加检测脚本进行监听,当主服务器宕掉时,自动切换到备服务器。

1、配置高可用的准备工作

1)准备两台或多台服务器,比如192.168.17.129 和 192.168.17.131;

2)在两台或多台服务器中安装nginx;

3)在两台或多台服务器中安装keepalived;

安装keepalived命令:yum install keepalived –y 

安装成功后会在/etc/里生成keepalived目录,内有文件keepalived.conf 

2、开始配置主备服务器

1)修改/etc/keepalived/keepalivec.conf 配置文件

global_defs {
                            notification_email {
                                [email protected]
                            }
                            notification_email_from [email protected]
                            smtp_server 192.168.17.129
                            smtp_connect_timeout 30
                            router_id nginx_master       # 设置nginx master的id,在一个网络应该是唯一的

                        }
                        vrrp_script chk_http_port {
                            script "/usr/local/src/nginx_check.sh" #检测脚本位置
                            interval 2 #(检测脚本执行的间隔)
                            weight 2
                        }
                        vrrp_instance VI_1 {
                            state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
                            interface ens33 #网卡
                            virtual_router_id 51 # 虚拟路由编号,主、备机的 virtual_router_id 必须相同
                            priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
                            advert_int 1
                            authentication {
                                auth_type PASS
                                auth_pass 1111
                            }
                            virtual_ipaddress {
                                192.168.17.50 // VRRP H 虚拟地址
                            }

                        }

上面红色虚拟ip地址可以进入keepalived目录,执行ip a获得

nginx反向代理、负载均衡、高可用配置

2)在上面绿色标注位置在/usr/local/src加入检测脚本

#!/bin/bash
                        A=`ps -C nginx –no-header |wc -l`
                        if [ $A -eq 0 ];then
                            /usr/local/nginx/sbin/nginx    #重启nginx
                            sleep 2
                            if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败
                                killall keepalived
                            fi
                        fi

3)把两台或多台服务器nginx和keepalived启动

4)测试:在浏览器输入虚拟ip可以正常访问;把主服务器nginx和keepalived停止,再输入虚拟ip也可以访问,则表示成功。