nginx通过upstream实现负载均衡
随着业务和用户不断增加,单台服务器无法满足业务需求,产生服务器集群的场景。为了能充分利用服务器集群,最理想的方式就是整个集群的利用率都很平均且稳定在理想值范围内。
负载均衡(Load Balance)就是为了满足能够均衡的利用整个服务器集群从而产生的一种算法 ,常见的实现策略有:随机、轮询、哈希、一致性哈希和加权。
nginx目前比较常用的模块有:
1. 轮询
定义:依次把客户端请求分配到不同的服务器中
配置示例:
upstream zhangQ {
server ip1:port1;
server ip2:port2;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://zhangQ;
}
}
2. 最少连接
定义:把客户端请求分配到连接数最少的服务器中
如果每台服务器处理业务的时间都一样,那么此策略与轮询差不多。
如果每台服务器处理业务的时间不一样,那么采用轮询算法会导致业务逻辑处理较慢的服务器压力越来越大负载较高,这样的业务场景,把客户端请求分配到连接数较少的服务器能达到更好的负载效果。
配置示例:
upstream zhangQ {
least_conn; #实际就是比轮询多这一行
server ip1:port1;
server ip2:port2;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://zhangQ;
}
}
3. ip_hash
定义:把访问的客户端的ip利用hash算法计算为一个数值,同一个数值会落到相同的服务器。
涉及到负载均衡基本上都会设计到session的保持,但使用ip_hash就不需要关注这个问题。
配置示例:
upstream zhangQ {
ip_hash; #实际就是比轮询多这一行
server ip1:port1;
server ip2:port2;
}
server {
listen ;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://zhangQ;
}
}
4. weight
定义:权重实际就是加权轮询,根据加权值会优先分配到权重高的服务器
服务器基本都是配置不一,高配置服务器通常都会比低配置服务器赋予较高的权重值。
配置示例:
upstream zhangQ {
server ip1:port1 weight=3; #加上weight
server ip2:port2 weight=1;
}
server {
listen ;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://zhangQ;
}
}
如果按照如上配置,就是每4次客户端请求,会有3次落在ip1上,1次落在ip2上。
附上upstream中常用的几个属性配置:
| 名称 | 定义 | 示例 |
| fail_timeout | 可以理解为熔断时间,经过这个配置的时间如果服务器没响应则失败 | fail_timeout=2s |
| max_fails | 最大失败数,默认值是1,当超过最大次数时,返回proxy_next_upstream模块定义的错误. | max_fails=2 |
| down | 有此标记的服务器不参与负载 | |
| backup | 当所有非backup服务器忙或者down的时候会请求这台服务器 |
nginx通过upstream实现负载均衡的更多相关文章
- Nginx配置upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- 【upstream】Nginx配置upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- Nginx配置upstream实现负载均衡及keepalived实现nginx高可用
(原文链接:http://www.studyshare.cn/blog-front//blog/details/1159/0 ) 一.准备工作 1.准备两个项目,发布到不同的服务器上,此处使用2个虚拟 ...
- Nginx配置upstream实现负载均衡1
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- Nginx使用upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- [转帖]nginx upstream模块--负载均衡
nginx upstream模块--负载均衡 https://www.cnblogs.com/linjiqin/p/5494783.html Module ngx_http_upstream_modu ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
- Nginx 服务器 之Nginx与tomcat实现负载均衡
本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf 创建 ...
- Nginx代理功能与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...
随机推荐
- POI读取xls和xlsx
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- SQL-SERVER学习(一) 数据表的基本操作
1.创建一个数据库,数据库的名字是UserInfo create database UserInfo; 2.创建一个数据表,数据表的名字是UserInfocreate table UserInfo( ...
- 【Leetcode】【Medium】Minimum Path Sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- QT容器map的插入,修改,遍历
除了map,QT的容器还有hash,以及迭代器等,这里写的是map #include "mainwindow.h" #include <QApplication> #i ...
- Spring-aop实现切面的四种方式(1)
Spring实现AOP的4种方式 先了解AOP的相关术语:1.通知(Advice):通知定义了切面是什么以及何时使用.描述了切面要完成的工作和何时需要执行这个工作.2.连接点(Joinpoint):程 ...
- MARKS:路由器桥接
仅供参考…… 测试使用环境:Tplink & Tenda渣渣路由器.其他环境或不同. 设置注意事项:副路由器网段设置和主路由一致.主路由不需要开启WDS.副路由器开启WDS(连接ok,状态即显 ...
- 由memcpy内存越界引发的问题 && delete 和 delete []的真正区别
今天遇到了一个问题,在程序运行到某处总会报访问到错误的地址的错误,而且每次报错的堆栈还都不一样,排查了一段时间,发现是memcpy这里出了错 ]; memset(d, , data.size() * ...
- Git bash 终止git log 命令
Git bash中 可以通过键入: q ,结束该命令.
- 2018 Multi-University Training Contest 1 Distinct Values 【贪心 + set】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6301 Distinct Values Time Limit: 4000/2000 MS (Java/Ot ...
- Kali-linux准备内核头文件
内核头文件是Linux内核的源代码.有时候,用户需要编译内核头文件代码,为以后使用内核头文件做准备,本节将介绍编译内核头文件的详细步骤. 准备内核头文件的具体操作步骤如下所示. (1)更新软件包列表. ...