五、企业级架构之Nginx负载均衡

一、负载均衡技术

1、介绍:

负载均衡技术(Load Balance)是一种概念,其原理就是把分发流量、请求到不同的服务器,平均分配用户请求。

2、作用:

流量分发,请求平均,提高系统处理能力,降低单例压力。

安全,隐藏后端真实服务。

屏蔽非法请求。(七层负载均衡)

3、负载均衡分类:

二层负载均衡 (mac):二层负载均衡主要工作在网络的数据链路层,它通过虚拟MAC地址的方式实现。当外部请求到达时,负载均衡器接收这些请求,替换请求的目标MAC地址为实际服务器的MAC地址。

三层负载均衡 (ip):三层负载均衡工作在网络层,外部请求首先发送到虚拟IP地址,负载均衡器接收这些请求后,根据一定的算法(如轮询、权重等)选择一个后端服务器,并将请求的目标IP地址替换为所选服务器的实际IP地址。

四层负载均衡 (tcp):四层负载均衡在三层的基础上增加了对传输层(TCP/UDP)信息的处理。它不仅根据IP地址进行转发,还考虑端口号。当请求到达时,负载均衡器会根据请求的IP地址和端口号来选择后端服务器,并转发请求。

七层负载均衡 (http):七层负载均衡也称为应用层负载均衡,它工作在OSI模型的最高层——应用层。它不仅能够根据IP地址和端口号进行转发,还能解析应用层协议(如HTTP)的内容,并根据协议中的特定信息(如URL、Cookie等)来选择后端服务器。

4、四层与七层负载的区别:

(1) 四层负载均衡:

四层负载均衡根据报文中的目标地址和端口信息来选择后端服务器。当负载均衡设备接收到客户端的SYN请求时,它会根据预设的算法(如轮询、最少连接数等)选择一个最佳的服务器,并修改报文中的目标IP地址,将请求转发给该服务器。

在四层负载中,负载均衡设备只是起到一个类似路由器的转发动作,TCP的三次握手是客户端和服务器直接建立的。

(2) 七层负载均衡:

又称为“内容交换”,也就是通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。例如对图片类的请求转发到特定的图片服务器;将对文字类的请求可以转发到特定的文字服务器。

在七层负载中,负载均衡设备更类似于一个代理服务器,负载均衡和前端的客户端以及后端的服务器都会分别建立TCP连接。

二、负载均衡器LB配置

1、停止web01/web02中的keepalived服务:

负载均衡器LB自带故障转移功能,当某个服务器出现故障时,负载均衡器能够自动将流量转移到其他健康的服务器上。因此不需要在web服务器上再配置keepalived。

2、准备负载均衡器LB:

克隆负载虚拟机LB,修改IP、UUID、hosts,关闭防火墙、selinux和NetworkManager

三、nginx负载均衡实现

1、把www.shop.com域名解析到LB:

2、在LB上编译安装Nginx:

(1) 安装依赖库和环境:

yum -y install pcre-devel zlib-devel openssl-devel

yum -y install gcc gcc-c++ autoconf automake make

(2) 编译安装nginx:

tar -zxf nginx-1.16.0.tar.gz
cd nginx-1.16.0
useradd -r -s /sbin/nologin www
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
make && make install
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

3、nginx负载均衡配置:

upstream shop {server 10.1.1.11;  server 10.1.1.13;
}server {  listen 80;server_name www.shop.com;location / {proxy_pass http://shop;proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

(1) 负载配置:

① upstream shop:定义了一个名为 shop 的后端服务器组,其中包含了两台服务器 web01 和 web02。

② server_name www.shop.com:指定服务器接受的请求针对的是域名www.shop.com。

③ proxy_pass http://shop:http://shop 是一个代理传递的目标,代理服务器将客户端的请求传递给shop组中定义的服务器,http://10.1.1.11

④ proxy_set_header HOST $host:代理服务器将原始请求中的Host请求头保留并传递给后端服务器。后端应用程序(如PHP)依赖Host请求头来确定如何响应请求,如果没有正确的Host请求头,后端应用程序可能无法正确运行。

完成了上述配置就已实现了负载均衡。

检验负载均衡效果:

vim /home/www/public/index.php

echo "web01"; / echo "web02";

(2) 获取客户端真实IP地址:

当查看web服务器的日志时,发现只能获取到代理服务器的访问信息。这是因为真实客户端请求通过代理服务器转发至后端服务器,因此后端服务器认为请求都是由代理服务器发出的。

① 修改LB配置:

想要后端服务器能够获取到真实的客户端IP地址,需要在LB的nginx配置文件中添加如下两条配置:

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

② web01、web02修改日志格式:

http {……log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log logs/access.log main;……
}

access_log logs/access.log main:指定访问日志的位置

"$http_x_forwarded_for":获取负载均衡转发前的IP

查看日志:

4、负载均衡与反向代理的区别:

负载均衡(Load Balancing)的主要目的是根据不同的算法,在多个服务器之间分配工作负载,以确保每个服务器都能够有效地处理请求,提高整体系统的性能和可用性。

反向代理(Reverse Proxy)则位于客户端和服务器之间,客户端向反向代理发送请求,然后反向代理将请求转发给后端的服务器,反向代理可以用来隐藏服务器的真实信息。

5、分发请求关键字:

upstream中的分发之后有几个关键字:

backup:备用,当upstream中定义的其他服务器都不可用时,才会将请求分发至此服务器。

down:标记为down的服务器不会被用来处理任何请求,通常用于将某个已经出现故障的服务器从负载均衡中移除。

upstream {server 10.1.1.10 backup或down;server 10.1.1.12;
}

6、nginx 负载均衡算法:

① round robin轮询方式,默认的负载均衡方式,依次将请求分配到各个后台服务器中,适用于后台机器性能一致的情况。

② weight:根据权重来分发请求到不同的机器中,指定轮询几率,用于后端服务器性能不均的情况。

upstream {server 10.1.1.10 weight=8;server 10.1.1.12 weight=2;
}

③ IP_hash:根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被分配固定的机器上。

upstream {ip_hash;server 10.1.1.10;server 10.1.1.12;
}

6、session持久性:

(1) cookies 与 session:

Cookies和Session是Web中常用的两种状态管理机制,用于跟踪用户会话和存储用户信息。

① Cookies存储在客户端上,Cookies可以设置过期时间,过期后自动删除,也可以选择不过期,由用户手动清除。

② Session通常存储在服务器上。Session的生命周期通常与用户的浏览器会话相关联,当用户关闭浏览器或会话超时后,Session会失效。

(2) 负载均衡出现的问题:

当负载均衡配置了轮询算法后,可能会出现验证码登录失败的问题。这是因为用户在一台服务器上输入了验证码,但随后的请求被负载均衡器路由到了另一台服务器,导致会话信息不同步,从而引发登录失败。

(3) 解决方案:

通过ip_hash算法,将生成验证码和验证都请求同一台服务器,实现session会话持久性。

upstream shop {ip_hash;server 10.1.1.11;server 10.1.1.13;
}

sbin/nginx -s reload

配置完成后即可成功登录:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/297497.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea改vm参数后没法重启

背景 Idea2023修改了编译器compiler内存,maven的run time内存,idea安装目录下idea64.exe.vmoptions选项的jvm内存参数后导致idea启动时没有任何反应,也没有任何日志输出 idea2023没法重启 导致idea2023没法重启的操作步骤如下 1.修改idea的…

腾讯云服务器4核8g配置好不好?用它干啥使?

腾讯云4核8G服务器多少钱?腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月,活动页面 txybk.com/go/txy 活动链接打开如下图所示: 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器,详细配置为:轻量4核…

国外媒体推广软文宣发:促进海外宣发新风尚,迈向国际舞台

大舍传媒http://www.dashemeijie.com 序言 伴随全球经济一体化发展趋向,越来越多的中国企业希望在国际舞台上表现自己的总体水平。而国外媒体软文发稿作为一种全新的海外宣传方式,正逐渐成为促进海外宣发新风尚的主要常用工具。接下来我们就探讨国外媒…

深入浅出 -- 系统架构之垂直架构

当业务复杂度增加、访问量逐渐增大出现高并发时,单体架构无法满足需求,可以根据业务功能对系统进行拆分,以提高访问效率。 垂直架构介绍 1.垂直架构一般是因为单体架构太过于庞大而进行的拆分,拆分后各个系统应满足独立运行互相不…

关于hive启动的相关问题记录

问题:初始化hive元数据报错 [atguiguhadoop102 software]$ schematool -initSchema -dbType mysql -verboseError: Table CTLGS already exists (state42S01,code1050) Closing: 0: jdbc:mysql://hadoop102:3306/metastore?useSSLfalse org.apache.hadoop.hive.me…

中文Mistral模型介绍(Chinese-Mistral)——中文大语言模型

中文Mistral简介 Chinese-Mistral由清华大学地学系地球空间信息科学实验室开发。 该模型基于Mistral发布的Mistral-7B-v0.1训练得到。首先进行中文词表扩充,然后采用实验室提出的PREPARED训练框架(under review)在中英双语语料上进行增量预训…

C++核心高级编程 --- 4.类和对象

文章目录 第四章:4.类和对象4.1 封装4.1.1 封装的意义4.1.2 struct与class的区别 4.2 对象的初始化和清理4.2.1 构造函数和析构函数4.2.2 构造函数的分类及调用4.2.3 拷贝构造函数调用时机4.2.4 构造函数调用规则4.2.5 深拷贝与浅拷贝4.2.6 初始化列表4.2.7 类对象作…

树莓派部署yolov5实现目标检测(ubuntu22.04.3)

最近两天搞了一下树莓派部署yolov5,有点难搞(这个东西有点老,版本冲突有些包废弃了等等) 最后换到ubuntu系统弄了,下面是我的整体步骤(建议先使能一下ssh(最下面有),结合…

Redis中的复制功能(五)

心跳检测 概述 在命令传播阶段&#xff0c;从服务器默认会以每秒一次的频率&#xff0c;向主服务器发送命令: REPLCONF ACK < replication_offset >其中replication_offset是从服务器当前的复制偏移量。 发送REPLCONF ACK命令对于主从服务器有三个作用: 1.检测主从服…

一、企业级架构之LNMP

一、LNMP 概述 1、LNMP之间的关系&#xff1a; LNMP Linux Nginx MySQL PHP 2、配置LNMP服务器&#xff1a; (1) 克隆一台centos7虚拟机&#xff0c;修改 IP 地址 和 UUID 编号。 IP 为 10.1.1.10&#xff0c;UUID 修改后三位。 (2) 设置主机名称&#xff0c;绑定IP地…

GraalVM运行模式和企业级应用

文章目录 GraalVM运行模式JIT模式AOT模式 GraalVM的问题和解决方案GraalVM企业级应用传统架构的问题Serverless架构函数计算Serverless应用场景Serverless应用 GraalVM内存参数 GraalVM运行模式 JIT模式 JIT&#xff08; Just-In-Time &#xff09;模式 &#xff0c;即时编译模…

SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型…

【Linux】SSH协议应用

SSH协议 SSH简介实现OpenSSH ssh中的四个文件~/.ssh文件路径实验解析 SSH 简介 SSH&#xff08;secure shell&#xff09;只是一种协议&#xff0c;存在多种实现&#xff0c;既有商业实现&#xff0c;也有开源实现。本文针对的实现是OpenSSH&#xff0c;它是自由软件&#xf…

2024年腾讯云4核8G服务器性能可以满足哪些使用场景?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

运筹学经典问题(八):CVRP和VRP-TW

文章目录 问题描述问题建模决策变量数学建模基于容量的消除子环的约束 &#xff08;load-based SECs&#xff09; CVRP完整的数学模型加上时间窗限制的CVRP 问题描述 给定一个图&#xff0c;图上的点代表客户&#xff0c;边代表客户之间的路线&#xff0c;边的权重代表客户之间…

学透Spring Boot — 004. Spring Boot Starter机制和自动配置机制

如果你项目中一直用的是 Spring Boot&#xff0c;那么恭喜你没有经历过用 Spring 手动集成其它框架的痛苦。 都说 Spring Boot 大大简化了 Spring 框架开发 Web 应用的难度&#xff0c;这里我们通过配置 Hibernate 的两种方式来深刻体会这一点&#xff1a; 使用 Spring 框架集…

MySQL 导入库/建表时/出现乱码

问题描述&#xff1a; 新建不久的项目在使用Navicat for MySQL进行查看数据&#xff0c;发现表中注释的部分乱码&#xff0c;但是项目中获取的数据使用不会。 猜测因为是数据库编码和项目中使用的不一样&#xff0c;又因为项目的连接语句定义了需要编码&#xff0c;故项目运行…

基于向量数据库搭建自己的搜索引擎

前言【基于chatbot】 厌倦了商业搜索引擎搜索引擎没完没了的广告&#xff0c;很多时候&#xff0c;只是需要精准高效地检索信息&#xff0c;而不是和商业广告“斗智斗勇”。以前主要是借助爬虫工具&#xff0c;而随着技术的进步&#xff0c;现在有了更多更方便的解决方案&…

AcWing-游戏

1388. 游戏 - AcWing题库 所需知识&#xff1a;博弈论&#xff0c;区间dp 由于双方都采取最优的策略来取数字&#xff0c;所以结果为确定的&#xff0c;有可能会有多个不同的过程&#xff0c;但是我们只需要关注最终结果就行了。 方法一&#xff1a; 定义dp[i][j] 表示区间…

Loss【1】:Focal Loss

系列文章目录 文章目录 系列文章目录前言1. 什么是 Focal Loss2. 逐过程解析 Focal Loss3. Focal Loss 的 PyTorch 实现总结 前言 类别不平衡是一个在目标检测领域被广泛讨论的问题&#xff0c;因为目标数量的多少在数据集中能很直观的体现。同时&#xff0c;在分割中这也是一…