简单实践搭建 nginx 负载均衡

本文是通过自己的实践,通过nginx搭建的负载均衡

概述

负载均衡在服务端开发中算是一个比较重要的特性。由于Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理商前台,由于Nginx的异步框架可以解决很大的并发请求,把这些并发请求hold住之后即可以分发给后端服务端(backend servers, 后面简称backend)来做复杂的计算、解决和响应,并且在业务量添加的时候可以方便地扩容后端服务器。

负载均衡可以分为硬件负载均衡和软件负载均衡,前者一般是专用的软件和硬件相结合的设施,设施商会提供完整成熟的处理方案,通常也会更加昂贵。软件的负载均衡以Nginx占据绝大多数。

实践搭建Laravel项目负载均衡

服务器配置

服务器配置通过1台负载均衡服务器和2台应用服务器组成,由于是测试,所以购买的是按时计算的云服务器,服务器版本为centos7.2。
为了快速搭建服务所需环境,通过安装宝塔以便迅速搭建线上环境。

负载均衡服务器配置

nginx服务器配置如下:

upstream backend {  
    ##2台应用服务器的ip地址
    server 103.246.246.228;  
    server 103.246.246.229;  
}  

server
{
    listen 80;
    server_name 你的域名地址;
    index index.php index.html index.htm default.php default.htm default.html;
    #该服务器接受到端口80的所有流量并将其传递给上游upstream 。
    #请注意,upstream名称和proxy_pass需要匹配。
    location / {  
            proxy_pass   http://backend;  
            index  index.html index.htm;  
    }
}

在其他两台应用服务器中,定义默认页面,一个为123,另一个为321。
通过访问负载均衡域名,显示以下内容:

实践搭建 Laravel 项目负载均衡

再刷新一次

实践搭建 Laravel 项目负载均衡

说明负载均衡服务器已成果将我们的请求转发到另外两台应用服务器当中。

负载均衡策略

轮询方式

在上述所配置的方法,上面的例子就是轮询的方式,它是upstream模块默认的负载均衡默认策略。每个请求会按时间顺序逐一分配到不同的后端服务器。

有如下参数:

fail_timeout 与max_fails结合使用。
max_fails 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了
fail_time 服务器会被认为停机的时间长度,默认为10s。
backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
down 标记服务器永久停机了。
  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。
  • 缺省配置就是轮询策略。
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。

权重方式

upstream backend {  
    ##2台应用服务器的ip地址
    server 103.246.246.228 weight=2;  
    server 103.246.246.229;  
} 

在该例子中,weight参数用于指定轮询几率,weight的默认值为1,;weight的数值与访问比率成正比,比如103.246.246.228服务器被访问的几率为103.246.246.229服务器的两倍。

  • 权重越高分配到需要处理的请求越多。
  • 此策略可以与least_conn和ip_hash结合使用。
  • 此策略比较适合服务器的硬件配置差别比较大的情况。

ip_hash方式

指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

upstream backend {  
    ip_hash;    #保证每个访客固定访问一个后端服务器
    server 103.246.246.228;  
    server 103.246.246.229;  
} 
  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
  • ip_hash不能与backup同时使用。
  • 此策略适合有状态服务,比如session。
  • 当有服务器需要剔除,必须手动down掉。

least_conn 方式

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

upstream backend {  
    least_conn;    #把请求转发给连接数较少的后端服务器
    server 103.246.246.228;  
    server 103.246.246.229;  
} 

此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

建议: 可以加上应用服务器的配置说明

3年前 评论
oliver-l (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!