Nginx负载均衡原理简介与负载均衡配置详解

 

by:授客  QQ1033553122

 

测试环境

nginx-1.10.0

负载均衡原理

客户端向反向代理发送请求,接着反向代理根据某种负载机制转发请求至目标服务器(这些服务器都运行着相同的应用),并把获得的内容返回给客户端,期中,代理请求可能根据配置被发往不同的服务器。

负载均衡配置

测试案例:

如下,分别在两台服务器(192.168.1.103, 192.168.1.102)上部署了相同的应用,并通过8080端口访问网站,如下

http://192.168.1.xx:8080/webautotest/xxxxxxx

同时在192.168.1.103上安装了nginx反向代理,想通过192.168.1.103的80端口来实现对两个站点的访问

编辑nginx配置文件(例中为/usr/local/ngnix/conf/nginx.conf),找到http结点,如下,添加带背景色部分的内容,

http {

upstream myapp1 {

server 192.168.1.103:8080;

server 192.168.1.104:8080;

}

……略

server {

listen 80;

server_name 
localhost;

……略

location /webautotest/ {

proxy_buffering off;

proxy_pass http://myapp1;

}

}

}

重新加载配置文件

[root@localhost nginx-1.10.0]#
/usr/local/ngnix/sbin/nginx -s reload

访问测试url

如下,访问相同的页面,展示来自不同服务器的页面

说明:

负载均衡方法

nginx提供了以下三种负载均衡机制、方法:

  • round-robin —
    请求以循环、轮转的方式分发到应用服务器。
  • least-connected —

    下一个请求被分配到拥有最少活动连接数的服务器

  • ip-hash —
    使用一个哈希函数,基于客户端ip地址判断下一个请求应该被分发到哪个服务器。

默认的负载均衡配置

http {

upstream myapp1 {

server srv1.example.com;

server srv2.example.com;

server srv3.example.com;

}

server {

listen 80;

location / {

proxy_pass http://myapp1;

}

}

}

上例中,有3个应用实例分别运行在srv1-srv3。当不显示指定负载均衡方法时,默认为round-robin。所有请求都被代理转发至myapp1服务器组,并根据负载均衡方法来分发请求。

最少连接负载均衡

另一个负载均衡原则为least-connected。当一些请求花费较长时间来完成时,least-connected更“公平”的控制应用程序实例上的负载。

配置了least-connected的负载均衡机制的情况下,nginx会尽量不让负载繁忙的应用服务器上负载过多的请求,相反的,会把新的请求发送到比较不繁忙的服务器。

配置示例:

upstream myapp1 {

least_conn;

server srv1.example.com;

server srv2.example.com;

server srv3.example.com;

}

会话持久性

注意,round-robin或least-connected负载均衡下,每个后续的客户端可能被分发至不同服务器,不保证相同客户端的请求总是被发送到相同的服务器。

如果有必要把客户端绑定至特定服务器,则可使用ip-hash负载均衡机制。

ip-hash机制下,客户端ip地址被用作hash key来判断客户端请求应该发送到哪个服务器,这种方法保证了来自相同客户端的请求总是发送到相同服务器(如果服务器可用的话)

upstream myapp1 {

ip_hash;

server srv1.example.com;

server srv2.example.com;

server srv3.example.com;

}

负载均衡权重

可通过配置服务器权重来影响负载均衡机制。

上面的例子中,都未配置服务器权重,这意味着所有服务器都拥有相同的权重。

针对round-robin负载机制,权重意味着更多或更少的请求传送至服务器---假设有足够的请求,且按统一方式处理请求,且足够快完成请求处理。

配置示例:

upstream myapp1
{

server srv1.example.com weight=3;

server srv2.example.com;

server srv3.example.com;

}

上例配置中,每发送至服务器实例的5个新的请求中,有3个发送到srv1,1个发送到srv2,另1个发送到srv3。

注:当前版本似乎只实现了round-robin机制下的权重设置

健康检测

nginx反向代理实现包含服务器健康检查。如果来自特定服务器的响应失败,报错,nginx将标记该服务器为failed,一段时间内尽量避免选择此服务器作为随后请求的分发服务器。

max_fails机制设置fail_timeout期间,和服务器沟通失败的连续重试次数,默认为1.当设置为0时,不做服务器健康检测。fail_timeout定义了服务器被标记为failed的时长。fail_timeout时间间隔过后,nginx将开始使用活动客户端请求来探测服务器,如果探测成功则标记服务器为活动服务器。

进一步阅读

In addition, there are more directives and
parameters that control server load balancing in nginx, e.g.
proxy_next_upstream, backup, down, and keepalive. For more information please check
our reference
documentation
.

Last but not least, application load balancing, application health checks, activity monitoring and on-the-fly reconfiguration of server groups are available as part of our paid
NGINX Plus subscriptions.

The following articles describe load balancing
with NGINX Plus in more detail:

参考链接:

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

https://www.nginx.com/resources/admin-guide/?_ga=1.235398721.1182431122.1462539513

Nginx 负载均衡原理简介与负载均衡配置详解的更多相关文章

  1. Nginx + Tomcat 负载均衡配置详解

    Nginx常用操作指南一.Nginx 与 Tomcat 安装.配置及优化1. 检查和安装依赖项 yum -y install gcc pcre pcre-devel zlib zlib-devel o ...

  2. (转)使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 原文:https://www.cnblogs.com/liwei0526vip/p/6370103.html

  3. 阿里云slb和ucloud负载均衡ulb添加ssl证书将http服务https化的配置详解

    阿里云和ucloud服务器配置ssl证书将http服务https化的配置详解 项目背景: 苹果App于2017年1月1日将启用App Transport Security安全功能,即强制App通过HT ...

  4. Nginx 反向代理工作原理简介与配置详解

    Nginx反向代理工作原理简介与配置详解   by:授客  QQ:1033553122   测试环境 CentOS 6.5-x86_64 nginx-1.10.0 下载地址:http://nginx. ...

  5. 大数据学习day11------hbase_day01----1. zk的监控机制,2动态感知服务上下线案例 3.HDFS-HA的高可用基本的工作原理 4. HDFS-HA的配置详解 5. HBASE(简介,安装,shell客户端,java客户端)

    1. ZK的监控机制 1.1 监听数据的变化  (1)监听一次 public class ChangeDataWacher { public static void main(String[] arg ...

  6. nginx在linux上的安装与配置详解(一)

    Nginx的安装与配置详解 (1)nginx简介     nginx概念: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like ...

  7. Linux中Nginx安装与配置详解

    转载自:http://www.linuxidc.com/Linux/2016-08/134110.htm Linux中Nginx安装与配置详解(CentOS-6.5:nginx-1.5.0). 1 N ...

  8. Nginx配置文件(nginx.conf)配置详解(2)

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...

  9. Nginx配置文件(nginx.conf)配置详解

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...

随机推荐

  1. LeetCode:145_Binary Tree Postorder Traversal | 二叉树后序遍历 | Hard

    题目:Binary Tree Postorder Traversal 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈 ...

  2. vue 自动化部署 jenkins 篇

    前端项目打包部署,以前都是手工运行打包命令,打包结束后压缩,然后上传到服务器上解压部署.这种重复性的工作,确实有点让人烦,而且效率也不高. 本文基于 vue 的前端项目. GitHub 的代码仓库,简 ...

  3. [视频]K8飞刀 正则采集WordPress站点用户

    链接:https://pan.baidu.com/s/16NCuC-mD4-3dxfVdcIFkxg 提取码:k3bw

  4. java开发,年薪15W的你和年薪50W的他的差距

      在这个IT系统动辄就是上亿流量的时代,Java作为大数据时代应用最广泛的语言,诞生了一批又一批的新技术,包括HBase.Hadoop.MQ.Netty.SpringCloud等等 .   一些独角 ...

  5. Centos 7 安装 rabbitmq

    1.安装erlang rabbitmq 官方下载地址 "http://www.rabbitmq.com/download.html" ,选择"RHEL, CentOS, ...

  6. 基于Flume的日志收集系统方案参考

    前言 本文将简单介绍两种基于Flume的日志收集系统可能的架构方案,可根据不同的实际场景参考使用. 方案一 示例图如下: 说明: 每个日志源(http上报.日志文件等)对应一个Agent-c用于收集对 ...

  7. Feign快速入门

    一.Feign简介1.Feign是一个声明式的web服务客户端,使用Feign编写web服务客户端更加容易2.具有可插拔注解支持,包括Feign注解和JAX-RS注解,还支持可插拔的编码器与解码器3. ...

  8. 安装clickhouse缺少依赖libicudata.so.50()(64bit)

    root@localhost ]# rpm -ivh clickhouse-common--.el7.x86_64.rpm 错误:依赖检测失败: libicudata.so.()(64bit) 被 c ...

  9. SOA&微服务&服务网格&高可用

    SOA 架构 SOA 全称是:Service Oriented Architecture,“面向服务的架构”. 它是一种设计理念,其中包含多个服务,服务之间通过相互依赖最终提供一系列完整的功能. 各个 ...

  10. C# 中集合类型需要按多个条件排序

    在 C# (.net 3.5 之后) 中集合是可以通过 OrderBy() 和 OrderByDescending()方法来进行排序的,如果需要集合中的元素是对象,还可以通过 Lambda表达式进行按 ...