nginx的四层负载均衡实战
目录
1 环境准备
1.1 mysql 部署
1.2 nginx 部署
1.3 关闭防火墙和selinux
2 nginx配置
2.1 修改nginx主配置文件
2.2 创建stream配置文件
2.3 重启nginx
3 测试四层代理是否轮循成功
3.1 远程链接通过代理服务器访问
3.2 动图演示
4 四层反向代理算法介绍
4.1 轮询(Round Robin)
4.2 最少连接(Least Connections)
4.3 加权轮询(Weighted Round Robin)
4.4 IP Hash
利用Nginx进行四层负载均衡:MySQL数据库的高效管理
在高流量的应用场景中,单个数据库服务器往往无法承受巨大的并发请求压力。为了提高性能和可靠性,企业级应用通常采用负载均衡技术来分散请求,确保数据服务的稳定性和快速响应。Nginx,作为一款高性能的HTTP和反向代理服务器,自1.9.0版本起,也提供了TCP/UDP四层负载均衡功能,能够有效地为后端服务如数据库提供负载均衡。
四层负载均衡简介
四层负载均衡(也称为L4负载均衡)是指在网络模型的第四层(传输层)上进行负载均衡。它主要基于IP地址和端口号来分发流量,适用于TCP和UDP协议。四层负载均衡对于数据库服务器尤其有用,因为它能够直接处理和转发数据流,而无需关心应用层的协议细节。
配置Nginx进行四层负载均衡
1 环境准备

客户端 :192.168.239.133
代理服务器:192.168.239.138
两台mysql服务器 : 192.168.239.131 192.168.239.174
1.1 mysql 部署
客户端和两台mysql服务器均需要部署,以下演示一台
mysql官网 : https://www.mysql.com



复制下载链接

# 下载yum仓库
[root@client ~]# wget https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
# 使用yum安装mysql需要的包
[root@client ~]# yum install mysql-community-client mysql-community-server mysql-community-client-plugins mysql-community-common mysql-community-libs mysql-community-icu-data-files

# 启动mysql
[root@client ~]# systemctl start mysqld
# 查看端口是否监听
[root@client ~]# netstat -tunlpt | grep mysql
tcp6 0 0 :::33060 :::* LISTEN 34029/mysqld
tcp6 0 0 :::3306 :::* LISTEN 34029/mysqld # mysql会生成初始密码在/var/log/mysqld.log 里
[root@client ~]# grep password /var/log/mysqld.log
2024-07-13T02:33:42.553668Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: i)-#G;kk?7r&# 输入密码登录
[root@client ~]# mysql -uroot -p
Enter password:
登录后mysql操作
# 修改mysql的root密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Openlab123!';
Query OK, 0 rows affected (0.00 sec)mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed# 将只允许本地登录改为通配符也就是允许所有人登录
mysql> UPDATE user SET host='%' WHERE user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0# 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)mysql> exit
1.2 nginx 部署
在此实验中只需要部署与配置代理服务器的的nginx
为节省时间 此处就不使用源码安装了,直接使用yum安装
[root@forward ~]# yum install nginx
注意这个stream模块是实现四层负载均衡的模块

在官方文档上也可以找到使用的其使用说明
Module ngx_stream_upstream_module (nginx.org)

1.3 关闭防火墙和selinux
所有机子均关闭
[root@forward ~]# systemctl stop firewalld.service
[root@forward ~]# setenforce 0
2 nginx配置
[root@forward ~]# mkdir /etc/nginx/tcp
2.1 修改nginx主配置文件
[root@forward ~]# vim /etc/nginx/nginx.conf
添加以下行将tcp以下.conf结尾的文件读取,在tcp文件夹里面写stream块的配置

2.2 创建stream配置文件
[root@forward ~]# vim /etc/nginx/tcp/test.confstream {upstream mysql {# 默认为轮循算法,假如不加weight的情况下,加上weight就变成加权轮循了server 192.168.239.131:3306 weight=5;server 192.168.239.174:3306 weight=10;}server {listen 3306;proxy_pass mysql;}}
2.3 重启nginx
# 语法检查
[root@forward ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful# 重启nginx
[root@forward ~]# systemctl restart nginx# 检查端口是否监听
[root@forward ~]# netstat -tunlpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2818/nginx: master
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2818/nginx: master
tcp6 0 0 :::80 :::* LISTEN 2818/nginx: master
3 测试四层代理是否轮循成功
3.1 远程链接通过代理服务器访问
[root@client ~]# mysql -uroot -pOpenlab123! -h192.168.239.138 -e 'select @@HOSTNAME'

3.2 动图演示

4 四层反向代理算法介绍
在四层(TCP/UDP)负载均衡中,Nginx 的 stream 模块可以用来配置不同的负载均衡算法。下面我将给出使用不同算法配置的示例,这些配置适用于 TCP 层面的负载均衡,比如数据库服务器、邮件服务器等。
4.1 轮询(Round Robin)
这是最基本的算法,请求会被轮流分发到各个服务器。
stream {upstream mysql {server 192.168.239.131:3306;server 192.168.239.174:3306;}server {listen 3306;proxy_pass mysql;}
}
4.2 最少连接(Least Connections)
此算法会将新的连接发送到当前连接数最少的服务器。
stream {upstream mysql {least_conn;server 192.168.239.131:3306;server 192.168.239.174:3306;}server {listen 3306;proxy_pass mysql;}
}
4.3 加权轮询(Weighted Round Robin)
允许你根据服务器的性能分配不同的权重,权重高的服务器将接收更多连接。
stream {upstream mysql {server 192.168.239.131:3306 weight=5;server 192.168.239.174:3306 weight=10;}server {listen 3306;proxy_pass mysql;}
}
4.4 IP Hash
该算法确保来自同一 IP 地址的连接总是被发送到同一台服务器,这对于需要会话持久性的服务很有用。
stream {upstream mysql {ip_hash;server 192.168.239.131:3306;server 192.168.239.174:3306;}server {listen 3306;proxy_pass mysql;}
}
注意事项
- 在
stream模块中,proxy_pass语法略有不同,它后面直接跟的是上游服务器组的名字,而不是完整的 URL。 - 确保在你的 Nginx 版本中
stream模块是可用的,并且正确地配置了所有服务器和端口。 - 测试和监控负载均衡器的性能和行为至关重要,以确保配置符合预期。
以上配置示例展示了如何使用 Nginx 的 stream 模块进行四层负载均衡的不同算法配置。选择合适的算法需要考虑到服务的性质、服务器的性能差异以及会话管理的需求。
nginx-mod-stream
nginx-mod-stream 是 Nginx 的一个模块,专门用于处理 TCP 和 UDP 流,即第4层(传输层)的负载均衡。这个模块允许 Nginx 作为高性能的 TCP/UDP 代理和负载均衡器,可以用来为各种服务进行负载均衡,包括但不限于数据库服务(如 MySQL、PostgreSQL)、邮件服务(SMTP、IMAP、POP3)、DNS 服务、VoIP 服务等。
主要特点
- TCP/UDP 代理:
nginx-mod-stream可以代理 TCP 和 UDP 请求,这使得 Nginx 成为一个通用的网络负载均衡器。 - 负载均衡:支持多种负载均衡算法,如轮询、最少连接、IP 哈希等。
- 健康检查:可以配置健康检查机制,确保只有健康的服务器接收请求。
- 灵活的配置:类似于 HTTP 模块,
stream模块也支持丰富的配置选项,可以精细控制代理行为。 - 高可用性和性能:得益于 Nginx 的高性能架构,
nginx-mod-stream可以处理大量的并发连接,非常适合高负载环境。
配置示例
以下是一个使用 nginx-mod-stream 进行 TCP 负载均衡的简单配置示例:
stream {upstream mysql {server 192.168.239.131:3306;server 192.168.239.174:3306;}server {listen 3306;proxy_pass mysql;}
}
在这个示例中,Nginx 监听 3306 端口,并将接收到的连接代理到 backend 上游组中的服务器。上游组中定义了两台服务器,它们将根据轮询算法接收连接。
相关文章:
nginx的四层负载均衡实战
目录 1 环境准备 1.1 mysql 部署 1.2 nginx 部署 1.3 关闭防火墙和selinux 2 nginx配置 2.1 修改nginx主配置文件 2.2 创建stream配置文件 2.3 重启nginx 3 测试四层代理是否轮循成功 3.1 远程链接通过代理服务器访问 3.2 动图演示 4 四层反向代理算法介绍 4.1 轮询࿰…...
中职网络安全B模块Cenots6.8数据库
任务环境说明: ✓ 服务器场景:CentOS6.8(开放链接) ✓ 用户名:root;密码:123456 进入虚拟机操作系统:CentOS 6.8,登陆数据库(用户名:root&#x…...
BGP笔记的基本概要
技术背景: 在只有IGP(诸如OSPF、IS-IS、RIP等协议,因为最初是被设计在一个单域中进行一个路由操纵,因此被统一称为Interior Gateway Protocol,内部网关协议)的时代,域间路由无法实现一个全局路由…...
【Redis】复制(Replica)
文章目录 一、复制是什么?二、 基本命令三、 配置(分为配置文件和命令配置)3.1 配置文件3.2 命令配置3.3 嵌套连接3.4 关闭从属关系 四、 复制原理五、 缺点 以下是本篇文章正文内容 一、复制是什么? 主从复制 masterÿ…...
封装了一个仿照抖音效果的iOS评论弹窗
需求背景 开发一个类似抖音评论弹窗交互效果的弹窗,支持滑动消失, 滑动查看评论 效果如下图 思路 创建一个视图,该视图上面放置一个tableView, 该视图上添加一个滑动手势,同时设置代理,实现代理方法 (BOOL)gestur…...
【JavaWeb程序设计】Servlet(二)
目录 一、改进上一篇博客Servlet(一)的第一题 1. 运行截图 2. 建表 3. 实体类 4. JSP页面 4.1 login.jsp 4.2 loginSuccess.jsp 4.3 loginFail.jsp 5. mybatis-config.xml 6. 工具类:创建SqlSessionFactory实例,进行 My…...
php探针
php探针是用来探测空间、服务器运行状况和PHP信息用的,探针可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息。 下面就分享下我是怎样利用php探针来探测服务器网站空间速度、性能、安全功能等。 具体步骤如下: 1.从网上下…...
泰勒级数 (Taylor Series) 动画展示 包括源码
泰勒级数 (Taylor Series) 动画展示 包括源码 flyfish 泰勒级数(英语:Taylor series)用无限项连加式 - 级数来表示一个函数,这些相加的项由函数在某一点的导数求得。 定义了一个函数f(x)表示要近似的函数 sin ( x ) \sin(x) …...
蔚来汽车:拥抱TiDB,实现数据库性能与稳定性的飞跃
作者: Billdi表弟 原文来源: https://tidb.net/blog/449c3f5b 演讲嘉宾:吴记 蔚来汽车Tidb爱好者 整理编辑:黄漫绅(表妹)、李仲舒、吴记 本文来自 TiDB 社区合肥站走进蔚来汽车——来自吴记老师的演讲…...
【Django+Vue3 线上教育平台项目实战】构建高效线上教育平台之首页模块
文章目录 前言一、导航功能实现a.效果图:b.后端代码c.前端代码 二、轮播图功能实现a.效果图b.后端代码c.前端代码 三、标签栏功能实现a.效果图b.后端代码c.前端代码 四、侧边栏功能实现1.整体效果图2.侧边栏功能实现a.效果图b.后端代码c.前端代码 3.侧边栏展示分类及…...
对比 UUIDv1 和 UUIDv6
UUIDv6是UUIDv1的字段兼容版本,重新排序以改善数据库局部性。UUIDv6主要在使用UUIDv1的上下文中实现。不涉及遗留UUIDv1的系统应该改用UUIDv7。 与 UUIDv1 将时间戳分割成低、中、高三个部分不同,UUIDv6 改变了这一序列,使时间戳字节从最重要…...
记一次饱经挫折的阿里云ROS部署经历
前言 最近在参加的几个项目测评里,我发现**“一键部署”这功能真心好用,省下了不少宝贵时间和力气,再加上看到阿里云现在有个开源上云**的活动。趁着这波热潮,今天就聊聊怎么从头开始,一步步搞定阿里云的资源编排服务…...
代码运行故障排除:PyCharm中的问题解决指南
代码运行故障排除:PyCharm中的问题解决指南 引言 PyCharm,作为一款流行的集成开发环境(IDE),提供了强大的工具来支持Python开发。然而,即使是最先进的IDE也可能遇到代码无法运行的问题。这些问题可能由多…...
css实现渐进中嵌套渐进的方法
这是我们想要的实现效果: 思路: 1.有一个底色的背景渐变 2.需要几个小的块级元素做绝对定位通过渐变filter模糊来实现 注意:这里的采用的定位方法,所以在内部的元素一律要使用绝对定位,否则会出现层级的问题&…...
JavaWeb后端学习
Web:全球局域网,万维网,能通过浏览器访问的网站 Maven Apache旗下的一个开源项目,是一款用于管理和构建Java项目的工具 作用: 依赖管理:方便快捷的管理项目以来的资源(jar包)&am…...
VUE_TypeError: Cannot convert a BigInt value to a number at Math.pow 解决方法
错误信息 TypeError: Cannot convert a BigInt value to a number at Math.pow vue 或 react package.json添加 "browserslist": {"production": ["chrome > 67","edge > 79","firefox > 68","opera >…...
Linux下mysql数据库的导入与导出以及查看端口
一:Linux下导出数据库 1、基础导出 要在Linux系统中将MySQL数据库导出,通常使用mysqldump命令行工具。以下是一个基本的命令示例,用于导出整个数据库: mysqldump -u username -p database_name > export_filename.sql 其中&a…...
Open3d入门 一文读懂三维点云
三维点云技术的发展始于20世纪60年代,随着激光雷达和三维扫描技术的进步,在建筑、考古、地理信息系统和制造等领域得到了广泛应用。20世纪90年代,随着计算机处理能力的提升,点云数据的采集和处理变得更加高效,推动了自…...
pyinstaller系列教程(一)-基础介绍
1.介绍 PyInstaller是一个用于将Python应用程序打包为独立可执行文件的工具,它支持跨平台操作,包括Windows、Linux和MacOS等操作系统。特点如下: 跨平台支持:PyInstaller可以在多个操作系统上运行,并生成相应平台的可…...
echarts图表:类目轴
category 类目轴,适用于离散的类目数据。 例如商品名称、时间等。 类目轴上的每个刻度代表一个类目,刻度之间没有量的关系,只是简单的分类。 在类目轴上,数据点会对应到相应的类目上。...
学术研究加速器:OpenClaw+千问3.5-27B自动整理参考文献
学术研究加速器:OpenClaw千问3.5-27B自动整理参考文献 1. 为什么需要自动化文献管理 作为一名经常需要阅读大量论文的研究者,我过去每周要花至少3小时手动整理参考文献。从下载PDF、提取元数据到生成BibTeX条目,这些重复性工作不仅枯燥&…...
NodeList 对象
NodeList 对象 概述 NodeList 对象是 DOM(文档对象模型)中的一种数据结构,它代表了包含在一个父节点内的所有元素节点的一个集合。NodeList 对象常用于处理文档中的多个元素,是 JavaScript 在操作 DOM 时的一个重要工具。 特点 1. 长度属性 NodeList 对象具有一个 len…...
基于单片机的心率及跌倒检测系统设计(有完整资料)
资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T4192205M设计简介:本设计是基于单片机的心率及跌倒检测系统,主要实现以下功能:1、可通过心率模块检测当前的心率 2、可…...
STM32G030C8T6多通道ADC采集避坑指南:从时钟配置到采样周期,新手常犯的5个错误
STM32G030C8T6多通道ADC采集实战避坑指南:从原理到代码的完整解决方案 第一次接触STM32G030C8T6的多通道ADC采集时,我按照网上的教程配置完参数,却发现采集到的数据要么全是0,要么数值跳变严重。经过整整两天的调试和查阅参考手册…...
从HCCDA题库看实战:GaussDB开发者必须掌握的10个核心操作(附实验截图指南)
从HCCDA题库看实战:GaussDB开发者必须掌握的10个核心操作(附实验截图指南) 在数据库技术的世界里,认证考试往往被视为理论知识的试金石,但真正考验开发者能力的,是如何将这些理论转化为实际生产力。GaussDB…...
[MediaForge] 音频技术深度解析(五):常见问题与快速解决
目录 问题排查方法论 音频采集常见问题 音频重采样常见问题 音频编码常见问题 音频封装常见问题 端到端完整流程问题 快速定位工具集 AI 辅助排查指南 1. 问题排查方法论 1.1 通用排查流程 ┌───────────────────────────────────────…...
本科论文知网AI率高的原因和解决方法全在这里
知网AIGC检测出来AI率高,很多同学第一反应是"我没有全程用AI写啊,为什么这么高?"这个问题确实需要好好解释一下——知网检测到的AI率高,未必是因为你完全靠AI写的。 知网AIGC检测是怎么工作的 知网的AIGC检测系统会分…...
如何通过GDScript游戏开发入门成为独立游戏开发者
如何通过GDScript游戏开发入门成为独立游戏开发者 【免费下载链接】learn-gdscript Learn Godots GDScript programming language from zero, right in your browser, for free. 项目地址: https://gitcode.com/gh_mirrors/le/learn-gdscript 对于许多游戏爱好者来说&am…...
Emby高级功能完全解锁指南:emby-unlocked让媒体服务器焕发新生
Emby高级功能完全解锁指南:emby-unlocked让媒体服务器焕发新生 【免费下载链接】emby-unlocked Emby with the premium Emby Premiere features unlocked. 项目地址: https://gitcode.com/gh_mirrors/em/emby-unlocked 你是否厌倦了Emby Premiere的高级功能需…...
Phi-4-mini-reasoning Chainlit插件开发:集成代码执行与结果可视化
Phi-4-mini-reasoning Chainlit插件开发:集成代码执行与结果可视化 1. 项目概述 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员,它特别强化了数学推理能力…...
