Nginx实现负载均衡的方式有哪几种呢?

什么是负载均衡

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

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

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

负载均衡的几种常用方式

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;                }

            }}

原文地址:https://www.cnblogs.com/kinwing/p/11130281.html

时间: 2024-10-12 22:06:53

Nginx实现负载均衡的方式有哪几种呢?的相关文章

dns + nginx实现负载均衡

一 搭建环境说明: 服务器公网地址 用途 服务器内网地址 123.56.x.92 Nginx负载兼web服务 10.171.132.57 123.57.x.176 Nginx负载兼Web服务 10.172.235.86 两台服务器上面分别有三个站点,web,app,h5 1  PC站前端    nginx  80 2  H5站前端    nginx+tomcat  28180 3 app客户端   nginx+tomcat  28543 负载均衡实现方式和前提 准备用dns轮询解析来实现负载均衡

【Nginx】配置Nginx的负载均衡

阅读目录 参考的优秀文章 在本机运行2个Tomcat Nginx的负载均衡配置 参考的优秀文章 tomcat配置文件server.xml详解 AJP协议总结与分析 Using nginx as HTTP load balancer 在本机运行2个Tomcat 现需要运行两个Tomcat,监听不同端口,让Nginx作负载均衡跳转过来.Tomcat版本:apache-tomcat-7.0.69-windows-x64.zip 要在一台机器运行两个Tomcat,要解决端口的冲突,我们只需要D:\gre

nginx实现负载均衡

一.测试环境 OS: rhel6 Lib1: 192.168.20.106   A服务器 Lib2: 192.168.20.107   B服务器 Lib3: 192.168.20.108   C服务器 部署: A服务器做为主服务器,域名直接解析到A服务器(192.168.20.106)上,由A服务器负载均衡到B服务器(192.168.20.107)与C服务器(192.168.20.108)上. upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单方法来实现在轮询和客

【Nginx】负载均衡-加权轮询策略剖析

转自:江南烟雨 本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别. 如果Nginx是以反向代理的形式配置运行,那么对请求的实际处理需要转发到后端服务器运行,如果后端服务器有多台,如何选择一台合适的后端服务器来处理当前请求,就是本文要说的负载均衡.这两种均衡互不冲突并且能同时生效. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希

Bind+Nginx实现负载均衡

Nginx实现负载均衡 1 基础环境 1.1 服务器列表 1.2 DHCP分配内外地址 1.3 端口转发策略 1.4 初始化信息 主机名称 内外IP 系统 实现功能 Upstream 172.16.16.10 Centos 6.5 64位 DNSserver+Nginx实现负载均衡 Nginx-20 172.16.16.20 Centos 6.5 64位 后端nginx提供web服务 Nginx-30 172.16.16.30 Centos 6.5 64位 后端nginx提供web服务 云路由器

nginx+tomcat负载均衡策略

測试环境均为本地,測试软件为: nginx-1.6.0,apache-tomcat-7.0.42-1.apache-tomcat-7.0.42-2.apache-tomcat-7.0.42-3 利用nginx做负载均衡,三台tomcat做WEB详细业务处理. nginx配置nginx.conf: #Nginx所用用户和组.window下不指定 #user niumd niumd; #user nobody; #工作的子进程数量(通常等于CPU数量或者2倍于CPU) worker_processe

nginx的负载均衡,代理等功能详解

Nginx的负载均衡: (1)nginx的算法: upstream目前支持 4 种方式的分配 1).轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2).weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况. 2).ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题. 3).fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先

使用nginx做负载均衡造成的session共享问题

PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态,下面提供了几种方式来解决session共享的问题: 1.不使用session,换用cookie session是存放在服务器端的,cookie是存放在客户端的,我们可以把用户访问页面产生的session放到cookie里面,就是以cookie为中转站.你访问web服务器A,产生了session然后把它放到cookie里面,当你的

linux+asp.net core+nginx四层负载均衡

Linux Disibutaion:Ubuntu 16.04.1 LTS Web Server:Nginx.Kestrel 关于如何在linux中部署asp.net core我这里不再详细介绍,可以参考ASP.Net Core 运行在Linux(Ubuntu) 这里我需要三台VM:nginxvm01:做负载均衡服务器nginxvm02:服务节点1nginxvm03:服务节点2 大致服务架构如下图: 配置负载均衡节点(nginxvm01): sudo apt-get install -y ngin