在介绍完Nginx的反向代理之后,继续介绍Nginx的负载均衡、动静分离以及高可用。

负载均衡

负载均衡就是将负载分摊到不同的服务单元。

准备两个tomcat,8080端口和8081端口。在其webapp目录下分别新建文件夹edu,edu文件夹放入a.html,内容不一致。

nginx.conf中配置如下:autoindex on 表示列出访问目录。

windows配置 nginx双机双工 nginx双网卡_nginx代理网卡

测试:

windows配置 nginx双机双工 nginx双网卡_nginx_02

windows配置 nginx双机双工 nginx双网卡_nginx代理网卡_03

Nginx 提供了几种分配方式(策略):

1、轮询(默认) 

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除。 

2、weight 

weight 代表权,重默认为1,权重越高被分配的客户端越多。指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。例如:

upstream myserver{ server 139.196.16.241 weight=10; server 139.196.16.241 weight=5; }

3、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。例如:

upstream myserver{ ip_hash; server 139.196.16.241; server 139.196.16.241; }

4、fair

按后端服务器的响应时间来分配请求,响应时间短的服务器优先分配。

upstream myserver{ server 139.196.16.241; server 139.196.16.241; fair; }

动静分离

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过Nginx 来分开。

第一种,也是最常用的动静分离过程如下图所示:

windows配置 nginx双机双工 nginx双网卡_nginx_04

准备工作:

windows配置 nginx双机双工 nginx双网卡_windows配置 nginx双机双工_05

配置nginx.conf:

windows配置 nginx双机双工 nginx双网卡_nginx代理网卡_06

测试:

windows配置 nginx双机双工 nginx双网卡_windows配置 nginx双机双工_07

windows配置 nginx双机双工 nginx双网卡_windows配置 nginx双机双工_08

高可用

在之前的负载均衡实例中,只有一个Nginx服务器,如果某台tomcat服务器宕机了,Nginx就不会继续给它分发请求,但是如果Nginx宕机了,整个系统就挂了。

windows配置 nginx双机双工 nginx双网卡_nginx代理网卡_09

因此,可以用多台Nginx服务器来保证系统稳定运行,这就是高可用!分为主从模式和双主模式。这里只介绍主从模式。

准备工作:

准备两台虚拟机:

ip地址分别为:139.196.16.241、192.168.72.100

windows配置 nginx双机双工 nginx双网卡_windows配置 nginx双机双工_10

windows配置 nginx双机双工 nginx双网卡_windows配置 nginx双机双工_11

两台虚拟机装上nginx

第一台之前用的已经装好

windows配置 nginx双机双工 nginx双网卡_Nginx_12

第二台重新装:

windows配置 nginx双机双工 nginx双网卡_Nginx_13

两台虚拟机装上keepalived

yum install keepalived –y
rpm -q -a keepalived

windows配置 nginx双机双工 nginx双网卡_Nginx_14

在etc目录下:

windows配置 nginx双机双工 nginx双网卡_一台nginx支持多少并发_15

启动主机和备份机的nginx、keepalived

systemctl start keepalived.service
service keepalived start

windows配置 nginx双机双工 nginx双网卡_nginx_16

修改router_id

windows配置 nginx双机双工 nginx双网卡_Nginx_17

windows配置 nginx双机双工 nginx双网卡_nginx_18

主机修改:

/etc/keepalived/keepalivec.conf 配置文件

global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 139.196.16.241 smtp_connect_timeout 30 router_id LVS_DEVEL}vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 2 #(检测脚本执行的间隔) weight 2}vrrp_instance VI_1 { state MASTER # 备份服务器上将 MASTER 改为 BACKUP  interface eth0 //网卡 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同 priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.72.50 // VRRP H 虚拟地址 }  }

备份机修改:

/etc/keepalived/keepalivec.conf 配置文件

global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.72.100 smtp_connect_timeout 30 router_id LVS_DEVELBACK}vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 2 #(检测脚本执行的间隔) weight 2}vrrp_instance VI_1 { state BACKUP # 备份服务器上将 MASTER 改为 BACKUP  interface eth0 //网卡 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 虚拟地址 }  }

windows配置 nginx双机双工 nginx双网卡_nginx代理网卡_19

在/usr/local/src 添加检测脚本

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

重新启动两台服务器的nginx和keepalived

测试:

ip a

windows配置 nginx双机双工 nginx双网卡_nginx代理网卡_20

输入http://192.168.72.50/

windows配置 nginx双机双工 nginx双网卡_nginx代理网卡_21

关闭主机的keepslived和nginx,再次测试依然可以访问,实现了高可用。

最后,介绍一下Nginx的基本原理。

Nginx中有master和多个worker:

windows配置 nginx双机双工 nginx双网卡_Nginx_22

windows配置 nginx双机双工 nginx双网卡_Nginx_23

worker之间采用争抢机制完成请求任务:

windows配置 nginx双机双工 nginx双网卡_windows配置 nginx双机双工_24

一个 master 和多个 woker 好处:

可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作。

每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断。

worker 数和服务器的 cpu 数相等是最为适宜的。

连接数 worker_connection

发送请求时,占用了 woker 的几个连接数?

当访问静态资源时是2个,访问动态资源或者数据库时是4 个。

nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?

普通的静态访问最大并发数是:

worker_connections * worker_processes /2;

HTTP 作为反向代理来说,最大并发数量应该是:

worker_connections * worker_processes/4。

至此,关于Nginx的基本使用介绍完了。