反向代理 and 负载均衡

算法分
• 阅读 3428

nginx 负载均衡的平衡机制

  1. 轮询,向应用服务器的请求以循环方式分发。
  2. 最少连接,下一个请求被分配给具有最少数量活动连接的服务器(最清闲的服务器)。
  3. ip-hash,哈希函数用于确定下一个请求(基于客户端的IP地址)应选择哪个服务器(相同IP 的发送到同一个服务器,解决 session 问题)。

轮训方式负载均衡

// 代理服务器的配置文件
http {
    // 针对 http://test.com 域名的访问,将会按照默认 轮训的方式分配给列表中的服务器
    upstream http://test.com { 
        server srv1.example.com; // 服务器 A 
        server srv2.example.com; // 服务器 B
        server srv3.example.com; // 服务器 C
    }
}

// 具体负载均衡的服务器 A 配置文件
http {
    server { 
        listen 80;

        location / { 
            proxy_pass http://test.com; 
        } 
    } 
}

// 具体负载均衡的服务器 B 配置文件
http {
    server { 
        listen 80;

        location / { 
            proxy_pass http://test.com; 
        } 
    } 
}

....同上

最少连接数方式负载均衡

// 代理服务器的配置文件
http {
    // 针对 http://test.com 域名的访问,将根据服务器的负载情况进行分配
    upstream http://test.com {
        least_conn; # 表示采取 最少连接数 的负载均衡机制
        server srv1.example.com; // 服务器 A 
        server srv2.example.com; // 服务器 B
        server srv3.example.com; // 服务器 C
    }
}

// 具体负载均衡的服务器 A 配置文件
http {
    server { 
        listen 80;

        location / { 
            proxy_pass http://test.com; 
        } 
    } 
}

....同上

ip-hash 方式负载均衡

解释

请注意,通过循环或最少连接的负载平衡,每个后续客户端的请求可能潜在地分配到不同的服务器。不能保证同一客户端始终被定向到同一个服务器。

使用ip-hash,客户端的IP地址用作哈希键,以确定应为客户端请求选择服务器组中的哪个服务器。该方法确保来自同一客户端的请求将始终被定向到同一台服务器,除非该服务器不可用。

解决 session 问题。

// 代理服务器的配置文件
http {
    // 针对 http://test.com 域名的访问,将确保同一IP始终访问到同一服务器
    upstream http://test.com {
        ip_hash; # ip_hash 的负载均衡机制
        server srv1.example.com; // 服务器 A 
        server srv2.example.com; // 服务器 B
        server srv3.example.com; // 服务器 C
    }
}

// 具体负载均衡的服务器 A 配置文件
http {
    server { 
        listen 80;

        location / { 
            proxy_pass http://test.com; 
        } 
    } 
}

....同上

加权负载均衡

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

当 为服务器指定权重参数时,权重将作为负载均衡决策的一部分进行计算。

通过这种配置,每5个新请求将分布在应用程序实例中,如下所示:3个请求将被定向到srv1,一个请求将转到srv2,另一个请求将转到srv3。

服务器健康检查

nginx 中的反向代理实现包括带内(或被动)服务器运行状况检查。如果特定服务器的响应失败并出现错误,nginx会将此服务器标记为失败,并尝试避免为此后续入站请求选择此服务器一段时间。

max_fails 设置失败重试次数。 fail_timeout 设置重试间隔时间。默认情况下, max_fails 设置为 1。 当设置为 0 时,对该服务器禁用运行状况检查。该 fail_timeout 参数还定义如何,只要服务器失败将被标记。在 服务器故障后的 fail_timeout间隔之后,nginx将开始以实时客户端的请求来优雅地探测服务器。如果探针成功,则将服务器标记为实时的。

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Keepalived+LVS+nginx搭建nginx高可用集群
       nginx是一款非常优秀的反向代理工具,支持请求分发,负载均衡,以及缓存等等非常实用的功能。在请求处理上,nginx采用的是epoll模型,这是一种基于事件监听的模型,因而其具备非常高效的请求处理效率,单机并发能力能够达到上百万。nginx接收到的请求可以通过负载均衡策略分发到其下一级的应用服务器,这些服务器一般是以集群方式部署的,因而在性能不
Wesley13 Wesley13
3年前
LNMP架构之负载均衡及HTTPS相关配置
本文索引:Nginx负载均衡ssl原理生成ssl密钥对Nginx配置sslNginx负载均衡负载均衡原理上就是代理,只不过通过设置多个代理服务器来实现多用户访问时的负载均衡。同时也可以在某个代理服务器无法访问时,切换到另外的代理服务器,从而实现访问不间断的目的。下面以qq.com为例
Wesley13 Wesley13
3年前
Ubuntu源码安装nginx(整合session_sticky模块)
背景nginx作为七层负载均衡软件,负载的方式有:1.iphash2.轮询3.带权重轮询4.stickysession(粘滞session)大概这一些。其中stickysession可以保证同一客户端请求能转发到后端固定的一台服务器上。tengine目前已经集成了该特性,但我试验没成功。有时间再试一试。stickyse
Stella981 Stella981
3年前
Docker实战——分布式Websocket服务
一、项目介绍我们很容易可以使用Springboot来搭建一个支持websocket的应用,用来实现基于HTML5的客户端之间进行消息的接收和推送。但是在实际应用的部署时,客户端和应用服务器之间总会用到Nginx或者Apache来做反向代理,来实现负载均衡。用Nginx举个例子来说,我们使用轮询的方式,将客户端的请求分发到后端3台w
Stella981 Stella981
3年前
Nginx(Windows)
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。比如我
Stella981 Stella981
3年前
Nginx、Apache工作原理及Nginx为何比Apache高效
Nginx才短短几年,就拿下了web服务器大笔江山,众所周知,Nginx在处理大并发静态请求方面,效率明显高于httpd,甚至能轻松解决C10K问题。在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx0.7.14PHP5.2.6(FastCGI)可
Stella981 Stella981
3年前
Nginx负载均衡
前面我们说了反向代理,例子中用的是,两个请求请求同一个ip地址和端口,然后Nginx来根据域名调用不同的tomcat来进行请求处理及响应。反向代理主要说的是:不同的请求请求同一个Nginx服务器,Nginx服务器来决定由那个真正的业务服务器(eg:tomcat)处理某个请求。下面说负载均衡负载均衡一般是指,针对同一个(域名的)请求发送很多次,同
Stella981 Stella981
3年前
Nginx相关
Nginx篇WindowsNginx配置使用Nginx负载均衡模式1)、轮询——1:1轮流处理请求(默认)每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。2)、权重——you
芝士年糕 芝士年糕
2年前
使用nginx进行负载均衡
我租了三台3A的服务器,使用的时候刚好用到了负载均衡,顺便分享给你们,如果有需要服务器或者哪里不懂的,可以私信我1.nginx负载均衡介绍nginx应用场景之一就是负载均衡。在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上,相当于把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器挂掉,其他服务器
芝士年糕 芝士年糕
2年前
使用nginx进行负载均衡
我使用了三台VPS服务器,同一网段的,用来搭建网站,推荐你们也可以使用3A服务器1.nginx负载均衡介绍nginx应用场景之一就是负载均衡。在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上,相当于把一台服务器需要承担的负载量交
负载均衡详解
负载均衡(LoadBalancing)是一种将网络流量或请求分发到多个服务器或资源的技术,以确保这些服务器或资源能够更均匀地处理负载,提高系统的性能、可用性和可伸缩性。负载均衡通常应用于Web服务、应用程序服务器、数据库服务器以及其他网络应用中。
算法分
算法分
Lv1
墙里秋千墙外道。墙外行人,墙里佳人笑。笑渐不闻声渐悄,多情却被无情恼。
文章
8
粉丝
0
获赞
0