【运维知识进阶篇】集群架构-Nginx七层负载均衡详解(一)

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 【运维知识进阶篇】集群架构-Nginx七层负载均衡详解

为什么要使用负载均衡

当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、请求性能。

负载均衡简单介绍

我们将负载均衡称为SLB(Server Load Balance),Nginx就是SLB的一种,负载均衡的叫法有很多,还可以叫负载、Load Balance、LB,公有云中叫SLB(阿里云负载均衡)、QLB(青云负载均衡)、CLB(腾讯云负载均衡)、ULB(ucloud负载均衡),常见的负载均衡软件有Nginx、Haproxy、LVS,Nginx是七层负载,可以造伪四层,Haproxy是七层负载、LVS是四层负载。

负载均衡分七层和四层,七层从下到上分别是1.物理层、2.数据链路层、3.网络层、4.传输层、5.会话层、6.表示层、7.应用层,而四层负载均衡仅到传输层,所以说四层负载均衡速度更快,但是七层负载均衡更贴近于服务,http协议就是七层协议,我们可以用Nginx做会话保持、URL路径规则匹配、Head头改写等等,这些四层无法实现。本篇文章我们介绍Nginx的七层负载均衡。

Nginx负载均衡配置语法

Nginx实现负载均衡都需要用proxy_pass代理模块配置

Nginx负载均衡与Nginx代理不同,Nginx的一个location仅能代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池。

1、我们准备1台LB01作为负载均衡服务器(10.0.0.5;172.16.1.5)、2台Web服务器分别是Web01(10.0.0.7;172.16.1.7)、Web02(10.0.0.8;172.16.1.8)

2、在Web01和Web02分别配置Nginx,并创建测试代码文件

[root@Web01 ~]# cat /etc/nginx/conf.d/test.conf
server {
  listen 80;
  server_name test.koten.com;
  location /{
    root /code/test;
    index index.html;
  }
}
[root@Web01 ~]# mkdir -p /code/test
[root@Web01 ~]# echo 'Web01' > /code/test/index.html
[root@Web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@Web01 ~]# systemctl restart nginx
[root@Web02 ~]# cat /etc/nginx/conf.d/test.conf
server {
  listen 80;
  server_name test.koten.com;
  location /{
    root /code/test;
    index index.html;
  }
}
[root@Web02 ~]# mkdir -p /code/test
[root@Web02 ~]# echo 'Web02' > /code/test/index.html
[root@Web02 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@Web02 ~]# systemctl restart nginx

3、配置Nginx负载均衡

[root@LB01 ~]# vim /etc/nginx/conf.d/test_proxy.conf  #负载均衡配置文件
upstream node {
    server 172.16.1.7;
    server 172.16.1.8;
}
server {
    listen 80;
    server_name test.koten.com;
    location / {
        proxy_pass http://node;
        include proxy_params;
        }
}
~                                                                
~                                                                
~                                                                
[root@LB01 ~]# vim /etc/nginx/proxy_params  #负载均衡调用的模块信息
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
~                                                                
~                                                                
~                                                                
~                                                                
~                                                                
[root@LB01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@LB01 ~]# systemctl restart nginx

4、修改本地HOST文件并打开浏览器访问test.koten.com

刷新一下页面,显示Web02,意味着我们已经通过负载均衡访问到了Web02服务器。

Nginx负载均衡常见故障

Nginx负载均衡比较智能,如果一个服务器宕了,会自动访问下一个服务器,但是如果后台服务器没有宕而是返回错误,就需要我们增加一个负载均衡设置了,以保证如果出错能直接访问下一台,而不是返回错误。

proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
[root@LB01 ~]# vim /etc/nginx/conf.d/test_proxy.conf
upstream node {
    server 172.16.1.7;
    server 172.16.1.8;
}
server {
    listen 80;
    server_name test.koten.com;
    location / {
        proxy_pass http://node;
        include proxy_params;
        proxy_next_upstream error timeout http_500 http_502 http_
503 http_504; #这样如果报这些错误也会自动访问下一个服务器节点
        }
}
~                                                                
<inx/conf.d/test_proxy.conf" 14L, 274C written

Nginx负载均衡调度算法

这样的负载均衡,每刷新一下就是一次请求,一次请求就变一次访问的服务器,我们把这种负载均衡算法,称为轮询。常见的负载均衡算法有以下几种:

调度算法 概述
轮询 按时间顺序逐一分配到不同的后端服务器(默认)
weight 加权轮询,weight值越大,分配到的访问几率越高
ip_hash 每个请求按照访问的IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash 按照访问的URL的hash结果来分配请求,不同的URL定向到不同的后端服务器

least_conn

最少连接数,哪个机器连接数少就分发哪个

Nginx负载均衡轮询配置

upstream load_pass {
    server 10.0.0.7:80;
    server 10.0.0.8:80;
}

Nginx负载均衡权重轮询配置

upstream load_pass {
    server 10.0.0.7:80 weight=5;
    server 10.0.0.8:80;
}

Nginx负载均衡ip_hash配置

upstream load_pass {
    ip_hash;
    server 10.0.0.7:80 weight=5;
    server 10.0.0.8:80;
}
注意:不能和weight一起使用,因为一个IP下不止一台客户端,如果客户端都走相同代理,会导致某一台服务器连接数过多。

Nginx负载均衡后端状态

后端Web服务器在前端Nginx负载均衡调度中的状态

状态 概述
down 当前的服务器不参与负载均衡,一般用于停机维护
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后,服务器暂停时间
max_coms 限制最大的接收连接数

down测试

[root@LB01 ~]# vim /etc/nginx/conf.d/test_proxy.conf
upstream webs {
    server 172.16.1.7 down;
    server 172.16.1.8;
}
server {
    listen 80;
    server_name test.koten.com;
    location / {
        proxy_pass http://webs;
        include proxy_params;
        proxy_next_upstream error timeout http_500 http_502 http_
503 http_504;
        }
}
~                                                                
<inx/conf.d/test_proxy.conf" 14L, 279C written 
[root@LB01 ~]# systemctl restart nginx

浏览器访问test.koten.com刷新只显示Web02了

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
18天前
|
人工智能 云计算 网络架构
阿里云引领智算集群网络架构的新一轮变革
11月8日~10日在江苏张家港召开的CCF ChinaNet(即中国网络大会)上,众多院士、教授和业界技术领袖齐聚一堂,畅谈网络未来的发展方向,聚焦智算集群网络的创新变革。
阿里云引领智算集群网络架构的新一轮变革
|
19天前
|
负载均衡 Dubbo 算法
集群容错架构设计
集群容错架构设计
26 1
集群容错架构设计
|
17天前
|
人工智能 运维 网络架构
阿里云引领智算集群网络架构的新一轮变革
11月8日至10日,CCF ChinaNet(中国网络大会)在江苏张家港召开,众多院士、教授和技术领袖共聚一堂,探讨网络未来发展方向。阿里云研发副总裁蔡德忠发表主题演讲,展望智算技术发展趋势,提出智算网络架构变革的新思路,发布高通量以太网协议和ENode+超节点系统规划,引起广泛关注。阿里云HPN7.0引领智算以太网生态蓬勃发展,成为业界标杆。未来,X10规模的智算集群将面临新的挑战,Ethernet将成为主流方案,推动Scale up与Scale out的融合架构,提升整体系统性能。
|
15天前
|
存储 缓存 NoSQL
【赵渝强老师】Memcached集群的架构
Memcached 是一个高性能的分布式内存对象缓存系统,通过在内存中维护一个巨大的 Hash 表来存储各种格式的数据,如图像、视频、文件及数据库检索结果等。它主要用于减轻数据库压力,提高网站系统的性能。Memcached 不支持数据持久化,因此仅作为缓存技术使用。其数据分布式存储由客户端应用程序实现,而非服务端。
【赵渝强老师】Memcached集群的架构
|
23天前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
64 1
|
28天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
28 4
|
29天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
36 3
|
1月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
59 3
|
15天前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
|
16天前
|
机器学习/深度学习 运维 监控
智能运维在现代IT架构中的转型之路####
【10月更文挑战第29天】 本文旨在探讨智能运维(AIOps)如何成为现代IT架构不可或缺的一部分,通过分析其核心价值、关键技术及实践案例,揭示AIOps在提升系统稳定性、优化资源配置及加速故障响应中的关键作用。不同于传统运维模式的被动响应,智能运维强调预测性维护与自动化处理,为企业数字化转型提供强有力的技术支撑。 ####
53 0
下一篇
无影云桌面