网站首页 > 技术教程 正文
概述
- Nginx 通过反向代理可以实现后端上游服务实例间的负载均衡, 将请求按照相应的负载均衡策略转发到不同的服务器上, 达到负载的效果, 避免了后端服务实例的单点故障; 目前
- Nginx 内置策略: rr, wrr, hash, ip_hash, least_conn
- Nginx 第三方模块支持的策略: fair, consistent_hash
部署环境
- nginx-1.20.1
- CentOS Linux release 7.6.1810
反向代理
1、Nginx 反向代理配置示例
upstream app1 {
server 192.168.31.13:8081 weight=5 max_fails=3 fail_timeout=15s;
server 192.168.31.17:8081 weight=5 max_fails=3 fail_timeout=15s;
server 192.168.31.12:80 max_conns=1000;
}
upstream app2 {
server 192.168.31.13:8082 weight=5 max_fails=3 fail_timeout=15s;
server 192.168.31.17:8082 weight=5 max_fails=3 fail_timeout=15s;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
}
server {
listen 80;
access_log /var/log/nginx/access.80.log main;
location /app1/ {
proxy_pass http://app1/;
proxy_set_header Host $host;
}
location /app2/ {
proxy_pass http://app2/;
proxy_set_header Host $host;
}
}
2、配置项解析
weight=5; # 设置服务器的权重,默认为 1
fail_timeout=15s # 请求失败超时时间,在经历了max_fails次失败后,该服务器暂停服务的时间
max_fails=3 fail_timeout=15s; # 请求失败的次数超过 3 次后, nginx 将在接下来的 15s 内不会向该服务器派发请求
backup; # 指定该服务器组的备份机,其它服务器全挂了,才会派发请求给该服务器
down; # 标识该服务器不可用
max_conns=1000; # 限制到代理服务器的最大同时活动连接数。默认为 0,表示不限制; 如果服务器组不驻留在共享内存中,则限制适用于每个工作进程
keepalive 32; # 每个工作进程缓存到上游服务器空闲保持连接的最大数量
proxy_next_upstream error timeout http_502; # 指定在哪种情况下将请求传递到下一个服务器
负载均衡策略
rr
轮询(round robin)是 upstream 的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器, 如果某个后端服务器 down 掉后,能自动剔除。
upstream backend {
server 192.168.31.101;
server 192.168.31.102;
server 192.168.31.103;
}
wrr
权重轮询 weighted round-robin; 轮询的加强版,即可以指定轮询比率,weight 和访问几率成正比
upstream backend {
server 192.168.31.101 weight=3;
server 192.168.31.102 weight=2;
server 192.168.31.103 weight=5;
}
url_hash
按请求 url 的 hash 值来分配请求,使每个 url 定向到同一个后端服务器, 为了使得缓存命中率提高,很适合使用 url_hash 策略 1.7.2 版本以后,url_hash 模块已经集成到了 nginx 源码当中,不需要单独安装。之前的版本仍需要单独安装,下载地址:https://github.com/evanmiller/nginx_upstream_hash;
upstream tomcats {
hash $request_uri;
# hash $request_uri consistent; # url 一致性 hash
server 192.168.31.100;
server 192.168.31.101;
server 192.168.31.102;
}
ip_hash
每个请求按访问 IP 的哈希结果分配,使来自同一个 IP 的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的 session 共享问题
upstream backend {
ip_hash;
server 192.168.31.101;
server 192.168.31.102;
server 192.168.31.103;
}
least_conn
将请求分配给活动连接数最少的服务器
upstream backend {
least_conn;
server 192.168.31.101;
server 192.168.31.102;
server 192.168.31.103;
}
fair
根据服务器的响应时间来分配请求,响应时间短的优先分配,即负载压力小的优先会分配
# 部署
git clone https://github.com/gnosek/nginx-upstream-fair
./configure --add-module=/root/src/nginx-upstream-fair-master
make -j2 && make install
# 版本问题:如果使用的 Nginx 版本 >= 1.14.0 时,使用上述模块源码编译时会报错误,需要对源码做一些修改,参考:https://github.com/gnosek/nginx-upstream-fair/pull/27/commits/ff979a48a0ccb9217437021b5eb9378448c2bd9e
# nginx 配置
upstream tomcats {
fair;
server 192.168.31.100;
server 192.168.31.101;
server 192.168.31.102;
}
consistent_hash
- 一致性哈希算法, 需要 ngx_http_upstream_consistent_hash 模块支持
- consistent_hash $remote_addr:可以根据客户端 ip 映射
- consistent_hash $request_uri: 根据客户端请求的 uri 映射
- consistent_hash $args: 根据客户端携带的参数进行映射
# 部署
wget https://github.com/replay/ngx_http_consistent_hash/archive/master.zip
unzip master.zip
./configure --add-module=/root/src/ngx_http_consistent_hash-master
make && make install
# nginx config
upstream tomcats {
consistent_hash $request_uri;
server 192.168.31.100;
server 192.168.31.101;
server 192.168.31.102;
}
- 上一篇: JAVA 项目如何进行 git 多人协作开发
- 下一篇: Nginx部署前端代码实现前后端分离
猜你喜欢
- 2024-10-14 Jenkins+Gitlab+Nginx+SonarQube+Maven编译Java项目自发布与回退
- 2024-10-14 三句话测试你是否懂git(用几句话测试对方喜不喜欢你)
- 2024-10-14 Nginx部署前端代码实现前后端分离
- 2024-10-14 JAVA 项目如何进行 git 多人协作开发
- 2024-10-03 让Jenkins自动部署你的Vue项目「实践」
- 2024-10-03 流媒体开发学习5 CentOS搭建Nginx+Rtmp服务端
- 2024-10-03 Nginx + uWSGI 部署Django站点(nginx和uwsgi部署flask项目)
- 2024-10-03 纯 Git 实现前端 CI/CD(git js)
- 2024-10-03 搭建Nginx+rtmp+hls直播推流服务器
你 发表评论:
欢迎- 最近发表
-
- 阿里P8大佬总结的Nacos入门笔记,从安装到进阶小白也能轻松学会
- Linux环境下,Jmeter压力测试的搭建及报错解决方法
- Java 在Word中合并单元格时删除重复值
- 解压缩软件哪个好用?4款大多数人常用的软件~
- Hadoop高可用集群搭建及API调用(hadoop3高可用)
- lombok注解@Data没有toString和getter、setter问题
- Apache Felix介绍(apache fineract)
- Spring Boot官方推荐的Docker镜像编译方式-分层jar包
- Gradle 使用手册(gradle详细教程)
- 字节二面:为什么SpringBoot的 jar可以直接运行?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)