Nginx可以作为一个非常高效的负载均衡系统,通过分发HTTP请求到多个应用服务器来提高整个系统的吞吐量,性能和可用性。

负载均衡的算法/机制

下面是Nginx支持的机制

  • 轮询机制 轮询算法

  • 最少连接,把下一个请求分发到活动负载最少的服务器
  • ip哈希,根据客户端的IP地址的哈希值来映射到处理请求的服务器

默认负载均衡配置

最简单的负载均衡配置:

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}

在上面的例子中,有三个相同的应用服务运行在ser1-ser3三个服务器中。如果没有指定均衡机制,默认为轮询方法。所有的请求都被代理到myapp1 服务组,Nginx会使用轮询算法分发请求。

Nginx还可以代理HTTPS,gRPC等协议的请求,如果要支持HTTPS请求只要修改http-> https即可

最少连接机制

相比轮询方法,在有些请求需要更多处理时间的情况下,最少连接方式可以获得更好的平衡。
基于最少连接机制,Nginx不会分发请求到负载过多的服务器,而是把新请求分发到负载最少的服务器。

least_conn 指令为服务组(server group)配置的一部分

 upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
}

会话持久化

如果使用轮询或者最少连接机制,同一个客户端的请求可能会分发给不同的服务器。如果需要保持一个会话来保存例如:用户登录状态、购物车信息。需要把同一个客户端的请求分发到同一个服务器来使用会话,这种情况下IP哈希算法派上了用场。

IP哈希算法机制,用客户端的IP地址作为哈希算法的key来决定处理请求的服务器。 配置如下..

upstream myapp1 {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

基于权重的负载均衡

在上面的例子中没有配置服务器的权重,所以对于特定的负载均衡机制每台服务器都是等价的。但是如果有的服务器配置更高,可以通过配置更高的权重使权重高的服务器处理更多请求。

 upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
}

在这个配置中,如果有5个请求,那么3个请求会被分发给sev1,1个分发给sev2,1个分发给sev3.这里是轮询机制,但对于其他机制也是同样的配置。

健康检查

如果一个服务器的请求返回失败,Nginx会把这个服务器标识为失败,在一段时间内接下来的请求会避开失败的服务器。max_fails指令配置失败多少次才把服务标识为失败,默认为1.如果设置为0则标识不启用健康检查。fail_timeout指令配置如果服务标识为失败了,多少时间后才重试。如果重试的时候成功了标识为失败的服务器会重新标识为正常。


参考: http://nginx.org/en/docs/http/load_balancing.html

使用Nginx 做负载均衡的更多相关文章

  1. 使用nginx做负载均衡的session共享问题

    查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不 ...

  2. nginx做负载均衡配置文件

    nginx做负载均衡是在反向代理的基础上做的,代码如下: ## Basic reverse proxy server ## ## Apache backend for www.baidu.com ## ...

  3. nginx做负载均衡和tomcat简单集群

    Nginx做负载均衡和TOMCAT简单集群                1.下载安装nginx及其依赖包                                               ...

  4. 死磕nginx系列--使用nginx做负载均衡

    使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 ...

  5. K2使用Nginx做负载均衡

    K2使用Nginx做负载均衡 K2目前是支持Load Balancing这种方式,来做负载均衡,也可以使用F5来做负载均衡,但这次我使用nginx来实现K2的负载均衡 下载nginx 请下载nginx ...

  6. 解决docker中使用nginx做负载均衡时并发过高时的一些问题

    # 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...

  7. 消费者用nginx做负载均衡,提供者用zookeeper自带功能实现负载均衡

    公司的项目基于阿里的Dubbo微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业务服务器,一套是灾备服务器.准备在这两套服务器上实现Dubbo的分布式服务 ...

  8. nginx做负载均衡 tomcat获得客户端真实ip

    因项目需要做tomcat2台机器的负载均衡,配置好负载环境后,发现tomcat的日志一律是我前置nginx代理服务器的ip 通过百度教材发现需要修改nginx的配置文件,修改代理头信息,传递给后方,后 ...

  9. 生产环境使用nginx做负载均衡配置的五种策略

    nginx的upstream目前支持5种方式的分配1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight指定轮询几率,weight和访 ...

  10. .net大型平台通过Nginx做负载均衡(Web层、中间服务层、DB层)

    .net平台下,我目前部署过的均衡负载有两种方式(iis7和Nginx),以下以Nginx为例讲解web层的均衡负载. 简介:Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx ...

随机推荐

  1. npm proxy报错处理

    npm经常抽风,动不动安装一个模块就这样了: 提示是否设置了正确的代理地址,解决方法网上有很多,有说取消代理.重新设置代理等等,最简单粗暴解决: 删除nodejs安装路径下面的npmrc文件,再使用淘 ...

  2. Servlet开发(一)

    1. Servlet简介 Servlet是服务器端程序,主要用来交互式地浏览和修改数据,生成动态web内容.Servlet是SUN公司提供的一个接口,广义的Servlet可以指任何实现了Servlet ...

  3. java实现mysql的备份还原

    此文章是基于 1. 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 2. jquery+springMVC实现文件上传 一. 简介 备份和导入是一个互逆的过程. ...

  4. hibernate下Session的获取方式

    Session是应用程序与数据库之间的一个会话,其重要性不言而喻.初学Hibernate,使用SessionFactory,老老实实地打开事务,提交,回滚,关闭session. 1.直接通过Sessi ...

  5. thinkphp怎么把数据库中的列的值存到下拉框中

    1. 先去数据库中查值,查询整个数据表,结果为二维数组. $project = M("project"); $cell = $project->where(array('st ...

  6. DOM Tree

    DOM Tree   什么是DOM树:网页的所有内容在内存当中,其实是以树形结构存储的 何时创建:当浏览器,读取html中内容的时候,会马上开始创建DOM树. 如何创建: 1.读到HTML的时候还没有 ...

  7. 移动web开发都会遇到的坑(会持续更新)

    1.自适应第一招 <meta name="viewport" content="width=device-width,initial-scale=1.0,user- ...

  8. 纯css面板插件,自适应,多样式

    最近在做公司的系统后台,用的bootstrap,在设计布局的时候不喜欢他的面板,所以自己写了这个面板插件,分享给大家 先上预览图: 默认样式: 绿色: 黄色: 蓝: 红: 使用方法: 引用MoUi.c ...

  9. 2-4 Sass的函数功能-颜色函数

    RGB颜色函数-RGB()颜色函数 在 Sass 的官方文档中,列出了 Sass 的颜色函数清单,从大的方面主要分为 RGB , HSL 和 Opacity 三大函数,当然其还包括一些其他的颜色函数, ...

  10. 把连接中传的参数截取出来变成一个json对象

    获取url function test() { var url=window.location.search; if(url.indexOf("?")!=-1) { var str ...