分享

一篇含金量hin高的Nginx反向代理与负载均衡指南

 拿破仑小子 2018-03-23

一篇含金量hin高的Nginx反向代理与负载均衡指南


本文大纲:

  1. 集群是什么

  2. 为什么需要集群

  3. Nginx反向代理实践

  4. Nginx中常用模块说明

  5. 定义多个虚拟主机标签信息

  6. 根据URL目录地址转发的应用场景:基于目录(uri)进行转发

  7. 根据客户端的设备实现转发(user_agent)

  8. 利用扩展名进行转发

一、集群是什么

一篇含金量hin高的Nginx反向代理与负载均衡指南

简单的说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服器。这些服务器之间可以彼此通信,协同向用户提供应用程序、系统资源和数据,并以单一系统的模式加以管理。当用户客户机请求集群系统时,集群给用户的感觉就是一个单一独立的服务器,而实际上用户请求的是一组集群服务器。

打开谷歌、百度的页面,看起来好简单,也许你觉得用几分钟就可以制作出相似的网页,而实际上,这个页面的背后是由成千上万台服务器集群协同工作的结果。而这么多的服务器维护和管理,以及相互协调工作也许就是你未来的工作职责了。

若要用一句话描述集群,即一堆服务器合作做同一件事,这些机器可能需要整个技术团队架构、设计和统一协调管理,这些机器可以分布在一个机房,也可以分布在全国全球各个地区的多个机房。

二、为什么要有集群

一篇含金量hin高的Nginx反向代理与负载均衡指南

高性能、价格有效性、可伸缩性、高可用性

透明性、可管理性、可编辑性

1、集群种类

  • 负载均衡集群:LB 解决调度问题

  • 高可用集群:HA 解决单点故障问题(keeplived)

  • 高性能计算集群:HP

  • 网络计算集群:GC

2、硬件设备

F5 设备 A10

3、软件

  • Nginx (7层,1.9版本之后支持4层)

  • LVS (4层)

  • HAproxy (4层,7层)

4、负载均衡概念说明

  • 对用户的访问请求进行调度管理

  • 对用户的访问请求进行压力分担

  • 一篇含金量hin高的Nginx反向代理与负载均衡指南

5、反向代理

接收用户请求代替用户向后端访问

反向代理与数据转发的区别

6、压力测试的方式

ab (Apache里的命令)

通过 yum install httpd-tools 获得

三、Nginx反向代理实践

一篇含金量hin高的Nginx反向代理与负载均衡指南

1、地址规划说明

一篇含金量hin高的Nginx反向代理与负载均衡指南

  • ip命令说明

ip address show 查看ip地址

ip route show 查看路由信息

2、反向代理与数据转发的区别

一篇含金量hin高的Nginx反向代理与负载均衡指南

3、安装部署Nginx过程(安装命令集)

一篇含金量hin高的Nginx反向代理与负载均衡指南

4、编写Nginx配置文件(统一Web服务器配置)

一篇含金量hin高的Nginx反向代理与负载均衡指南

5、统一Nginx测试环境 (Web文件)

一篇含金量hin高的Nginx反向代理与负载均衡指南

6、测试

一篇含金量hin高的Nginx反向代理与负载均衡指南

7、配置负载服务文件

一篇含金量hin高的Nginx反向代理与负载均衡指南

8、测试访问

一篇含金量hin高的Nginx反向代理与负载均衡指南

四、Nginx中常用模块说明

一篇含金量hin高的Nginx反向代理与负载均衡指南

1、模块调度算法

  • 定义轮询调度算法-rr-默认调度算法

  • 定义权重调度算法-wrr

  • 定义静态调度算法-ip_hash

  • 定义最小的连接数-least_conn

2、Nginx反向代理相关两个模块

  • upstream 模块:类似与一个池塘,将Nginx节点放置到池塘中

  • proxy模块:用池塘里面的Nginx节点,利用proxy进行调用

3、upstream模块核心参数简介

  • weight 权重

  • max_fails 抛得次数

  • fail_timeout 失败的超时时间

  • backup 备份

4、weight 参数实践 (权重)

upstream 模块只能在http区块里

一篇含金量hin高的Nginx反向代理与负载均衡指南

测试

一篇含金量hin高的Nginx反向代理与负载均衡指南

5、其它参数说明

  • max_fails:失败的尝试次数

  • fail_timeout:失败后的再次尝试时间

  • backup 备份节点:所有的节点都挂掉后数据才会请求web01

一篇含金量hin高的Nginx反向代理与负载均衡指南

6、访问抓包

用户请求报文

一篇含金量hin高的Nginx反向代理与负载均衡指南

7、upsrteam参数详细说明

一篇含金量hin高的Nginx反向代理与负载均衡指南

weight :调节服务器的请求分配权重。1.4.8 上述命令的说明如下:

  • check :开启对该服务器健康检查。

  • inter:设置连续两次的健康检查间隔时间,单位毫秒,默认值2000。

  • rise :指定多少次连续成功的健康检查后,即可认定该服务器处于可用状态。

  • fall :指定多少次不成功的健康检查后,即认为服务器为宕机状态,默认值3。

  • maxconn :指定可被发送到该服务器的最大并发连接数。

虽然Nginx本身不支持一致性hash算法,但Nginx的分支Tengine支持。详细可见:

http://tengine./document_cn/http_upstream_consistent_hash_cn.html

9、ip_hash 参数实践

每个访问的用户都会生成一个hash值。

每个请求按客户端 IP的 hash结果分配,当新的请求到达时,先将其客户端 IP通过哈希算法哈希出一个值,在随后的客户端请求中,客户IP的咍希值只要相同,就会被分配至同一台服务器,该调度算法可以解决动态网页的session共享问题,但有时会导致请求分配不均,即无法保证1:1的负载均衡,因为在国内大多数公司都是NAT上网横式,多个客户端会对应_个外部IP ,所以,这些客户端都会被分配到同一节点服务器,从而导致请求分配不均。

LVS负载均衡的-p参数、Keepalived配置里的 persistence jimeout 50参数都类似这个 Nginx里的ip_hash参数,其功能都可以解决动态网页的session共享问题。

一篇含金量hin高的Nginx反向代理与负载均衡指南

10、least_conn 参数

看谁闲,谁闲发送给谁

least_conn算法会根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发。

11、fair 参数

看谁响应的快

此算法会根据后端节点服务器的响应时间来分配请求,响应时间短的优先分配。这是更加智能的调度算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衝,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair调度算法,如果需要使用这种调度算法,必须下载Nginx的相关模块upstream_fair。

示例如下:

一篇含金量hin高的Nginx反向代理与负载均衡指南

除了上面这些算法外,还有一些第三方调度算法,例如:url_hash、一致性hash算法等。

12、调度算法

  • 定义轮询调度算法 rr 默认调度算法 平均分配

  • 定义权重调度算法 wrr

  • 定义静态调度算法 ip-hash

  • 定义最小的连接数-least_conn

13、Nginx负载均衡相关重要参数

一篇含金量hin高的Nginx反向代理与负载均衡指南

14、反向代理排错思路

  • 先在lb01上访问后端节点进行测试

  • 在lb01上访问本地地址进行测试

  • 在浏览器上进行测试

  • 缓存、域名解析

15、proxy_next_uptream 参数

当Nginx接收后端服务器返回proxy_next_upstream 参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如500、502、503、504,此参数可以提升用户的访问体验。

五、定义多个虚拟主机标签信息

1、proxy_set_header 参数

配置文件

一篇含金量hin高的Nginx反向代理与负载均衡指南

访问抓包

该参数在负载服务器在访问后端服务器的时候 会带上hosts信息。

一篇含金量hin高的Nginx反向代理与负载均衡指南

2、X-Forwarded-For 参数

proxy_set_header X-Forwarded-For $remote_addr;

代理的啥时候在后面显示真实的IP地址

一篇含金量hin高的Nginx反向代理与负载均衡指南

一篇含金量hin高的Nginx反向代理与负载均衡指南

参看日志信息

一篇含金量hin高的Nginx反向代理与负载均衡指南

该参数配置,会在访问日志的后面加上真正的访问用户IP。

3、http proxy 模块相关参数说明

一篇含金量hin高的Nginx反向代理与负载均衡指南

六、相据URL目录地址转发的应用场景

一篇含金量hin高的Nginx反向代理与负载均衡指南

一篇含金量hin高的Nginx反向代理与负载均衡指南

基于目录(uri)进行转发--网站动静分离

一篇含金量hin高的Nginx反向代理与负载均衡指南

根据HTTP的URL进行转发的应用情况,被称为第7层(应用层)的负载均衡,而LVS的负载均衡一般用于TCP等的转发,因此被称为第4层(传输层)的负载均衡。

在企业中,有时希望只用一个域名对外提供服务,不希望使用多个域名对应同一个产品业务,此时就需要在代理服务器上通过配置规则,使得匹配不同规则的请求会交给不同的服务器池处理。这类业务有:

  • 业务的域名没有拆分或者不希望拆分,但希望实现动静分离、多业务分离,

  • 不同的客户端设备(例如:手机和 PC端)使用同一个域名访问同一个业务网站,就需要根 据规则将不同设备的用户请求交给后端不同的服务器处理,以便得到最佳用户体验。

一篇含金量hin高的Nginx反向代理与负载均衡指南

第一个里程碑: 服务器规划

一篇含金量hin高的Nginx反向代理与负载均衡指南

第二个里程碑:创建/设置upstream负载信息

一篇含金量hin高的Nginx反向代理与负载均衡指南

第三个里程碑:如何调用upstream信息

一篇含金量hin高的Nginx反向代理与负载均衡指南

第四个里程碑: 编写配置文件lb01

一篇含金量hin高的Nginx反向代理与负载均衡指南

一篇含金量hin高的Nginx反向代理与负载均衡指南

6、第五个里程碑: 创建环境

一篇含金量hin高的Nginx反向代理与负载均衡指南

第六个里程碑: 进行测试

一篇含金量hin高的Nginx反向代理与负载均衡指南

七、根据客户端的设备实现转发(user_agent)

1、 user_agent的应用

一篇含金量hin高的Nginx反向代理与负载均衡指南

2、修改lb01配置文件

一篇含金量hin高的Nginx反向代理与负载均衡指南

3、进行测试

基于上一步的操作,现在可以之间的进行访问测试

curl -A 指定访问类型

一篇含金量hin高的Nginx反向代理与负载均衡指南

八、利用扩展名进行转发
利用后缀名进行转发与Nginx中的基于后缀的转跳一样实现。

一篇含金量hin高的Nginx反向代理与负载均衡指南

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多