Nginx的upstream负载方式
upstream负载
- 指的是nginx如何将HTTP请求分配给一组服务器的方法。nginx支持多种负载方式。
- upstream是nginx之中的一个模块。
- upstream adj. adv. 在(向)上游的,逆流的
轮询(默认)
常规
- 每个请求按时间顺序逐一分配到不同的后端服务器,若有服务器宕机,故障系统自动剔除。
加权轮询
- 在常规的基础之上可以对服务器进行加权(weight)
- weight越大,分配概率越大。适用于服务器性能不一样的情况下。
优缺点
- 优点
- 简单易用,适合处理长连接或者耗时请求场景
- 缺点
- 无法保证会话持久性,可以会导致客户端访问不同服务器而出现不可预知的问题。
IP哈希
根据客户端的IP地址确定请求的服务器,保证同一个IP总是访问同一个服务器,解决了动态网页存在的session共享问题
- 优点
- 保证会话持久,适合需要记录客户端状态或信息的场景
- 缺点
- 无法平衡服务器的负载,不支持 TCP/UDP 协议。
IP 哈希配置
vim /usr/local/nginx/conf/nginx.conf
- 配置在需要设置的server 块上
upstream tomcat {
ip_hash;
server 192.168.45.11:8080 weight=1 max_fails=1 fail_timeout=10s;
server 192.168.45.12:8080 weight=2 max_fails=1 fail_timeout=10s;
}
Nginx的Session和Cookie
- Nginx的Session是一个独特的机制,它允许应用程序在用户会话之间存储和检索信息,不需要借助其他数据存储机制。
- Cookie是一种在用户的本地计算机上存储的文本文件,由Web服务器发送给用户的浏览器,以便用户能够在访问同一站点时保持状态信息。
- Nginx中,Session和Cookie可以结合起来使用,以维护用户的会话,如用户认证和访问控制等功能。
- 但是,Session通常仅用于检索和存储用户特定的信息,而Cookie则提供了一种更加有效的方式来跟踪用户的会话,并在用户访问相同站点时自动将其带回服务器。
哈希
- 根据自定义的键值(如URL、Cookie等)计算哈希值,然后根据哈希值选择服务器。
- nginx本身不支持,需要安装
nginx_upstream_hash
软件包 - 优点
- 可以自定义键值负载均衡
- 缺点
- 需要配置额外的参数,也可能出现负载不均衡的情况
最短时间
最短时间(仅NGINX Plus):请求发送给响应时间最短且活跃连接数最少的服务器。
fair负载均衡
- Nginx的fair负载均衡模块增强了Nginx提供的标准轮换负载均衡器,以便它能够跟踪繁忙的后端服务器(例如Thin,Ebb,Mongrel),并将负载平衡到非繁忙的服务器进程。
- 简单来说,fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能地进行负载均衡
Tomcat+Nginx搭建
拓扑环境
主机 | IP | 服务 | 版本 |
---|---|---|---|
YY | 192.168.45.10 | nginx | 1.22.0 |
YY1 | 192.168.45.11 | tomcat | 8.5.82 |
YY2 | 192.168.45.12 | tomcat | 8.5.82 |
基本服务搭建
完成服务器服务搭建,这里不做讲述,如有需要后续进行超链接,单独出一篇部署的详细说明。
Nginx 负载均衡设置
配置具体参数
- 路径
vim /usr/local/nginx/conf/nginx.conf
- 格式示例:
- 位置:http 模块定义后端集群
- 参数说明
Down
:表示当前的 server 暂时不参与负载;Weight
:默认为 1,weight 越大,负载的权重就越大;Max_fails
:允许请求失败的次数默认为 1,当超过最大次数proxy_next_upstream
模块定义的错误;Fail_timeout:max_fails
:请求失败后,暂停的时间;Backup
:其它所有的非backup
机器down
或者忙的时候,才会请求backup
机器,所以这台机器压力会最轻。- 注意:
192.168.45.10:9090
和192.168.45.13:7070
示范使用
upstream tomcat {
server 192.168.45.10:9090 down;
server 192.168.45.11:8080 weight=1 max_fails=1 fail_timeout=10s;
server 192.168.45.12:8080 weight=1 max_fails=1 fail_timeout=10s;
server 192.168.45.13:7070 backup;
}
- server 块参数
proxy_pass http://tomcat;
- 表示该 host 下转发集群的名称
tomcat
为之前定义的集群名称
location / {
# root html;
# index index.html index.htm;
proxy_pass http://tomcat;
}
- 每次配置文件的修改都需要进行服务的重载
nginx -s reload
测试负载均衡
- 使用 curl 命令进行测试
curl 192.168.45.10
- 成功结果:页面内容会进行跳转
- 在 tomcat 服务器中已经定义了默认网页的内容
tom1
是 11 号机tom2
是 12 号机