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

news2025/1/18 8:41:19

一、负载均衡技术

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.coloradmin.cn/o/1569149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPT3, llama2, InternLM2技术报告对比

GPT3(September 22, 2020)是大语言应用的一个milestone级别的作品,Llama2(February 2023)则是目前开源大模型中最有影响力的作品,InternLM2(2023.09.20)则是中文比较有影响力的作品。…

网络中的网络-NiN

NiN NiN的网络结构NiN与传统CNN的区别NiN的特点总结 NiN(Network in Network)是由Min Lin、Qiang Chen和Shuicheng Yan等人在2013年提出的一个深度卷积神经网络模型。NiN的设计思想是在传统的卷积神经网络(CNN)结构中引入“网络中…

Matlab学习书籍分享

一、什么是Matlab​​? Matlab是一种用于数值计算、科学计算、工程设计和数据分析的高级编程语言。它提供了丰富的数学函数库,支持矩阵运算、信号处理、图像处理、机器学习等多种应用领域。Matlab还具有强大的图形界面,可以方便地进行数据可…

计算机组成结构2

概念 存储系统 存在成本-速度-容量之前的矛盾问题 寄存器–cache–内存–硬盘–外存储 局部性原理 时间局部:相邻的时间访问同一个数据空间局部:相邻的空间地址会被连续访问 cache cpu与主存之间,命中cache会不需要访问主存 映射方法&…

echarts地图自定义label属性以及引入china.js

效果图: 要点1:calc函数 重点&#xff1a;在于mapChart的height可以写成函数以便适配不同尺寸&#xff1b; <div class"content-map"><div class"wai-top-box" style"width: 100%; height: 100%"><div id"mapChart" s…

四核8g服务器价格多少钱?

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

Swing中的FlowLayout/WrapLayout在打横排列时候如何做到置顶对齐

前言 最近在开发swing客户端时候碰到一个棘手的问题&#xff1a; Swing中的FlowLayout/WrapLayout在打横排列时候如何做到置顶对齐如果是vue或者react&#xff0c;一搜百度什么都出来了&#xff0c;swing的话&#xff0c;嗯。。。资料有点少而且大部分是stack overflow上面的…

数据仓库的建立

实验 目的 熟悉Linux系统、MySQL、Hadoop、HBase、Hive、Sqoop、R、Eclipse等系统和软件的安装和使用&#xff1b; 了解大数据处理的基本流程&#xff1b; 熟悉数据预处理方法&#xff1b; 熟悉在不同类型数据库之间进行数据相互导入导出&#xff1b; 熟悉使用R语言进行可视化…

ChatGPT 在做什么,为什么有效?

原文&#xff1a;What Is ChatGPT Doing … and Why Does It Work? 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 这本简短的书试图从第一原理解释 ChatGPT 是如何工作的。在某种程度上&#xff0c;这是关于技术的故事。但它也是关于科学的故事。以及关于哲学…

『大模型笔记』LLMs入门:从头理解与编码LLM的自注意力机制

LLMs入门&#xff1a;从头理解与编码LLM的自注意力机制 这里直接引用我语雀上的的文章&#xff1a;《从头理解与编码LLM的自注意力机制》

第18讲:数据在内存中的存储

⽬录 1. 整数在内存中的存储 2. ⼤⼩端字节序和字节序判断 3. 浮点数在内存中的存储 ——————————————————————————————————————————— 1. 整数在内存中的存储 在讲解操作符的时候&#xff0c;我们就讲过了下⾯的内容&#x…

Ansible批量操作(上传文件、删除文件指定文件内容、执行sh文件等)

官方网站 https://www.ansible.com/ 一、Ansible 简介 1、Ansible是新出现的自动化运维工具&#xff0c;完全基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行…

MinGW使用std::thread报错error: ‘thread‘ is not a member of ‘std‘

目录 问题描述简单的测试代码报错及解决 问题描述 在windows上用vscode编写c代码进行编译时&#xff0c;一直上报error: ‘thread’ is not a member of std’的错误&#xff0c;搜索该错误上报都是说c版本不匹配&#xff0c;然后我在task.json里面添加了-stdc11之后还是报错&…

Spring Boot | Spring Boot的“数据访问“、Spring Boot“整合MyBatis“

目录: 一、Spring Boot”数据访问概述“二、Spring Boot”整合MyBatis”1. 基础环境搭建 (引入对应的“依赖启动器” 配置数据库的“相关参数”)① 数据准备 (导入Sql文件)② 创建项目&#xff0c;引入相应的启动器&#xff0c;编写数据库对应的“实体类”③额外添加pom.xml文…

Nacos下载安装与配置(linux)

一、Nacos下载 官网地址&#xff1a;home (nacos.io) 点击☆&#xff0c;跳转至Github页面。 点击Tags&#xff0c;跳转至版本选择页面&#xff0c;此处选择2.2.0版本。 点击nacos-server-2.2.0.tar.gz&#xff0c;进行下载。 二、将安装包上传至服务器 1.将安装包上传至/usr…

面试官:为什么忘记密码要重置,而不是告诉我原密码?

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ Hello&#xff0c;大家好&#xff0c;我是 Sunday。 最近有个同学在面试中遇到了一个很有意思的问题&#xff0c;我相信大多…

SON序列化解决方案

JSON&#xff08;JavaScript Object Notation&#xff09;是一种用于数据交换的轻量级数据格式。在我们日常Python编程中&#xff0c;通常可以使用内置的json模块来进行JSON序列化和反序列化。那么关于使用json模块进行JSON序列化和反序列化的问题解决方案&#xff0c;可以参考…

0基础如何进入IT行业

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 对于没有任何相关背景知识的人来说&#xff0c;如何才能成…

【放假第1天】采购季倒计时 2G 50/年,4G 618/3年 云服务器选购攻略 阿里云 腾讯云 京东云对比 搭建网站、数据分析

更新日期&#xff1a;4月4日&#xff08;阿里云价格回调&#xff0c;京东云采购季持续进行&#xff09; 本文纯原创&#xff0c;侵权必究 【云服务器推荐】价格对比&#xff01;阿里云 京东云 腾讯云 选购指南视频截图 《最新对比表》已更新在文章头部—腾讯云文档&#xff…

腾讯云4核8g服务器性能如何?知道说说

腾讯云4核8G服务器价格&#xff1a;轻量4核8G12M优惠价格646元15个月、CVM S5服务器4核8G配置1437元买1年送3个月。腾讯云4核8G服务器支持多少人同时在线&#xff1f;支持30个并发数&#xff0c;可容纳日均1万IP人数访问。腾讯云百科txybk.com整理4核8G服务器支持多少人同时在线…