【Nginx】实现负载均衡的几种方式

原创 2017年03月12日 11:59:53

要理解负载均衡,必须先搞清楚正向代理和反向代理。

正向代理与反向代理【总结】

注:

  • 正向代理,代理的是用户。
  • 反向代理,代理的是服务器

什么是负载均衡

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。

我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。

负载均衡是用反向代理的原理实现的。

负载均衡的几种常用方式

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream backserver {
    server 192.168.0.14;
    server 192.168.0.15;
}

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的
情况。

upstream backserver {
    server 192.168.0.14 weight=3;
    server 192.168.0.15 weight=7;
}

权重越高,在被访问的概率越大,如上例,分别是30%,70%。

3、上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream backserver {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver {
    server server1;
    server server2;
    fair;
}

5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
}

每个设备的状态设置为:

1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

配置实例:

#user  nobody;
worker_processes  4;
events {
    # 最大并发数
    worker_connections  1024;
}
http{
    # 待选服务器列表
    upstream myproject{
        # ip_hash指令,将同一用户引入同一服务器。
        ip_hash;
        server 125.219.42.4 fail_timeout=60s;
        server 172.31.2.183;
        }

    server{
                # 监听端口
                listen 80;
                # 根目录下
                location / {
                    # 选择哪个服务器列表
                    proxy_pass http://myproject;
                }

            }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Nginx简介及使用Nginx实现负载均衡的原理【通俗易懂,言简意赅】

nginx 这个轻量级、高性能的 web server 主要可以干两件事情:   〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);   〉另外一个功能就是...

浅谈Nginx负载均衡原理与实现

1 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能...

nginx负载均衡原理

对于一个大型网站来说,负载均衡是永恒的话题。随着硬件技术的迅猛发展,越来越多的负载均衡硬件设备涌现出来,如F5 BIG-IP、Citrix NetScaler、Radware等等,虽然可以解决问题,但...
  • chabale
  • chabale
  • 2013年05月21日 14:40
  • 11498

KeepLived + Nginx 实现高可用 负载均衡 原理

Nginx + Keepalived 实例 (2013-08-06 11:37:20)转载▼ 标签: nginx keepalived 高可用 负载均衡 主备 分类: Linux Nginx_Ma...

nginx负载均衡详解

1:什么是负载均衡负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最...

Nginx+Tomcat搭建高性能负载均衡集群

一、       工具   nginx-1.8.0   apache-tomcat-6.0.33 二、    目标   实现高性能负载均衡的Tomcat集群:      三、    ...

nginx负载均衡简单配置

nginx负载均衡简单配置 准备三台虚拟机来做这个实验: 192.168.232.132        web服务器 192.168.232.133        web服务器 192.168.2...

Nginx的负载均衡 - 整体架构

Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd   什么是负载均衡   我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提...
  • zhangskd
  • zhangskd
  • 2015年12月12日 23:30
  • 11702

Nginx负载均衡配置

原文链接:http://blog.csdn.net/xyang81/article/details/51702900Nginx安装请参考:《Nginx源码安装》      负载均衡的目的是为了解决单个...
  • xyang81
  • xyang81
  • 2016年06月18日 22:58
  • 17744

Nginx负载均衡配置

负载均衡—-实现配置篇(Nginx)———– 正文开始—————首先我们来回顾下上篇的概念: 负载均衡 == 分身的能力。既然要有分身的能力嘛,这好办,多弄几台服务器就搞定了。 今天我们讲的实例嘛…...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Nginx】实现负载均衡的几种方式
举报原因:
原因补充:

(最多只允许输入30个字)