讲师中心 微信公众号
AI工具推荐 视频效率加速

如何通过Nginx stream模块实现MySQL/Redis的四层负载均衡

云芳小哥_5954

云芳小哥_5954

发布时间:2026-04-15 15:17:35

|

419人浏览过

|

来源于php中文网

原创

Nginx stream模块支持TCP/UDP四层代理,适用于MySQL、Redis等数据库负载均衡,不解析应用层协议,低延迟高吞吐;需编译时启用--with-stream,配置在全局stream块中,注意超时、连接优化、健康检查及安全控制。

如何通过nginx stream模块实现mysql/redis的四层负载均衡

Nginx 的 stream 模块支持 TCP/UDP 四层代理,非常适合 MySQL、Redis 等基于 TCP 的数据库服务做负载均衡。它不解析应用层协议(如 SQL 或 Redis 命令),只转发原始连接,低延迟、高吞吐,且无需修改客户端配置。

启用 stream 模块并配置基础结构

Nginx 默认不编译 stream 模块,需确认安装时已开启:--with-stream。可通过 nginx -V 2>&1 | grep -o with-stream 验证。配置需在全局层级(nginx.conf 最外层)定义,不能放在 http 块内。

基本结构如下:

stream {
    upstream mysql_backend {
        server 192.168.1.10:3306 weight=5;
        server 192.168.1.11:3306 weight=5;
        least_conn;  # 可选:按当前连接数调度
    }
<pre class='brush:php;toolbar:false;'>server {
    listen 3306;
    proxy_pass mysql_backend;
    proxy_timeout 1h;
    proxy_responses 1;  # MySQL 握手只需 1 次响应
}

}

Sentinal Redis
Sentinal Redis

监控Redis服务器健康状况、内存、性能及BullMQ队列。检查队列深度、失败任务,分析慢查询并诊断问题。

下载

适配 MySQL 连接的关键细节

MySQL 客户端连接建立后会复用长连接,Nginx stream 需保持连接稳定,并正确处理握手与超时:

  • 关闭 Nagle 算法:在 server 块中添加 proxy_buffering off; 和 tcp_nodelay on;,减少小包延迟
  • 设置合理超时:MySQL 默认 wait_timeout=28800 秒,建议 proxy_timeout 设为略大于该值(如 30000s),避免 Nginx 主动断连
  • 健康检查(需 Nginx Plus 或开源版配合脚本):开源版不支持 stream 原生健康检查,可用 tcp_check 脚本 + health_check 指令(仅 Plus),或通过外部探活+动态 reload 实现

适配 Redis 连接的注意事项

Redis 协议简单(RESP),但对连接粘性和命令原子性敏感,尤其在使用连接池时:

  • 禁用连接复用:Redis 客户端通常自行管理连接池,Nginx 不应做连接合并,确保 proxy_protocol off;(除非后端明确支持 PROXY 协议)
  • 推荐使用 IP Hash 或 Least Conn:避免单个客户端请求被分散到多个 Redis 实例(影响 pipeline 和事务语义),ip_hash; 可保障同一客户端 IP 总打到同一后端
  • 注意 AUTH 和 SELECT 命令兼容性:stream 层不干预协议,只要后端 Redis 已统一配置密码和 db,默认可透传;若后端分片策略不同,需在应用层控制 key 分布

安全与可观测性补充建议

四层代理不校验账号密码,安全依赖网络隔离与访问控制:

  • 用 allow/deny 限制接入 IP:allow 10.0.0.0/8; deny all; 放在 server 块内
  • 开启日志记录连接信息:access_log /var/log/nginx/stream-mysql.log;,格式需自定义(默认无 stream 日志变量,可用 $remote_addr、$status、$session_time 等)
  • 监控连接数与错误码:stub_status 不支持 stream,改用 nginx -T | grep -A 5 'stream {' 配合系统级指标(如 ss -s、netstat)或 Prometheus + nginx-lua-prometheus(需 Lua 模块扩展)

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2493

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1499

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

875

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3532

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

6088

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1299

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6351

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5462

2023.08.14

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 194人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn