随着业务和用户不断增加,单台服务器无法满足业务需求,产生服务器集群的场景。为了能充分利用服务器集群,最理想的方式就是整个集群的利用率都很平均且稳定在理想值范围内。

负载均衡(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实现负载均衡的更多相关文章

  1. Nginx配置upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  2. 【upstream】Nginx配置upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  3. Nginx配置upstream实现负载均衡及keepalived实现nginx高可用

    (原文链接:http://www.studyshare.cn/blog-front//blog/details/1159/0 ) 一.准备工作 1.准备两个项目,发布到不同的服务器上,此处使用2个虚拟 ...

  4. Nginx配置upstream实现负载均衡1

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  5. Nginx使用upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  6. [转帖]nginx upstream模块--负载均衡

    nginx upstream模块--负载均衡 https://www.cnblogs.com/linjiqin/p/5494783.html Module ngx_http_upstream_modu ...

  7. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  8. Nginx 服务器 之Nginx与tomcat实现负载均衡

      本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf  创建 ...

  9. Nginx代理功能与负载均衡详解

    序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...

随机推荐

  1. recvfrom WSAEFAULT 10014 的错误记录

    在使用 recvfrom 时一直没报错, 像这样 recvfrom(sock, Data, , (sockaddr*)&server_addr, &send_size) 当我看见百度百 ...

  2. 关于cookie的详解

    http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html

  3. C++数组怎么复制

    C++数组怎么复制: #include <string.h>main(){int a[10]={34,56,4,10,77,51,93,30,5,52};int b[10];memcpy( ...

  4. MySQL5.7二进制安装

    MySQL-5.7.14从零开始-安装 首先我们要选择下载MySQL的版本: 登录官方网站下载:https://dev.mysql.com/downloads/mysql/ 下面我们选择5.7.14的 ...

  5. 32位 64位 获得进程peb的方法

    基于上一篇文章,大概了解了peb的获取方法,但是那个方法只能获得当前进程的PEB,不能获得其他的进程的PEB.根据那个思想,获得其他进程PEB则需要注入,得到进程信息,然后进程间通信,将信息返回来,经 ...

  6. January 16 2017 Week 3 Monday

    In love, folly is always sweet. 恋爱中,干傻事总是让人感到十分美妙. Love can easily get us in over our heads, so it i ...

  7. easyui学习笔记4—panel的实现

    这篇看看easyui是怎么实现panel的,就是类似一个容器,里面可以装具体内容或者其他的easyui控件. 1.这里先看看引用的资源文件 <link rel="stylesheet& ...

  8. std::unique实现

    std::unique适用于将排过序的数据结构重复的部分全部放在结尾 但用的时候发现会将原先容器中的内容改掉,看了源码发现这个函数会将不重复的数据结构直接覆盖到前一个重复的位置上,下面看源码 该函数s ...

  9. 用sql语句实现年龄分段统计

    SELECT CASE WHEN (age >= 10 AND age <= 20) THEN '10-20' WHEN (age >= 21 AND age <= 30) T ...

  10. 使用Hibernate注解Annotations进行对象映射的异常处理

    通过Hibernate注解Annotations进行对象映射,想在Oracle数据库中自动创建表,代码如下: 实体类: import javax.persistence.Basic;import ja ...