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

简介: 【运维知识进阶篇】集群架构-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了

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
6天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
50 0
|
4天前
|
运维 Oracle 容灾
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
|
5天前
|
负载均衡 应用服务中间件 nginx
解决nginx配置负载均衡时invalid host in upstream报错
在Windows环境下,配置Nginx 1.11.5进行负载均衡时遇到问题,服务无法启动。错误日志显示“invalid host in upstream”。检查发现上游服务器列表中,192.168.29.128的主机地址无效。负载均衡配置中,两个服务器地址前误加了&quot;http://&quot;。修正方法是删除上游服务器列表和proxy_pass中的&quot;http://&quot;。问题解决后,Nginx服务应能正常启动。
38 4
解决nginx配置负载均衡时invalid host in upstream报错
|
6天前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
|
6天前
|
敏捷开发 运维 监控
【专栏】微服务架构,以敏捷、灵活著称,通过拆分大型应用为小型自治服务,简化开发运维
【4月更文挑战第27天】微服务架构,以敏捷、灵活著称,通过拆分大型应用为小型自治服务,简化开发运维。本文探讨其基本概念、起源,核心优势(如敏捷开发、高可伸缩性)及挑战(系统复杂度、数据一致性),并分享实施策略(服务划分、技术选型、CI/CD)与实践案例(Netflix、Uber、Spotify),展示微服务如何重塑软件开发,并成为未来复杂应用系统的基础。
|
6天前
|
存储 缓存 负载均衡
从运维角度看中大型网站架构的演变之路
从运维角度看中大型网站架构的演变之路
|
6天前
|
负载均衡 算法 网络协议
LVS、Nginx和HAProxy负载均衡器对比总结
LVS、Nginx和HAProxy负载均衡器对比总结
|
6天前
|
负载均衡 应用服务中间件 PHP
使用nginx-haproxy实现七层负载均衡
【4月更文挑战第13天】使用nginx实现动静分离的负载均衡集群
40 4
|
6天前
|
负载均衡 应用服务中间件 nginx
Nginx 负载均衡
Nginx 负载均衡
26 2
|
6天前
|
负载均衡 算法 应用服务中间件
解密Nginx负载均衡:实现流量分发与故障转移
解密Nginx负载均衡:实现流量分发与故障转移
30 1