当前位置: 首页 > news >正文

【Nginx】Nginx 多协议负载均衡实战:StarRocks 与 MinIO 代理配置全解析

文章目录

    • 一、Nginx 3大核心知识点(先搞懂本质)
      • 1. 核心功能:反向代理(请求“中转站”)
      • 2. 核心功能:负载均衡(请求“分流器”)
      • 3. 核心特性:按协议分层处理(不同请求不同玩法)
    • 二、结合实战配置:串联核心知识点
      • (一)基础配置:给 Nginx 搭好运行环境
      • (二)四层代理(Stream 模块):处理 StarRocks JDBC 连接
      • (三)七层代理(HTTP 模块):处理 MinIO 和 StarRocks StreamLoad
        • 1. HTTP 基础配置:统一规则
        • 2. 代理 MinIO 服务(分 API 和控制台)
        • 3. 代理 StarRocks StreamLoad(数据写入)
    • 三、总结:Nginx 配置的核心逻辑

Nginx 最核心的价值是 “反向代理”和“负载均衡”,再加上“按协议分层处理”的特性,就能搞定大部分分布式场景。本文先讲最关键的3个核心知识点,再结合实战配置串起来,让你一看就懂、一用就会。

一、Nginx 3大核心知识点(先搞懂本质)

1. 核心功能:反向代理(请求“中转站”)

  • 通俗理解:客户端不直接连后端服务(比如 StarRocks、MinIO),而是先连 Nginx,Nginx 再把请求转交给后端,最后把结果返回给客户端。
  • 核心作用:隐藏后端服务器地址(安全)、统一入口(客户端不用记多个端口)、适配不同协议(TCP/HTTP)。

2. 核心功能:负载均衡(请求“分流器”)

  • 通俗理解:后端有多个服务节点(比如 2 台 MinIO、3 台 StarRocks FE),Nginx 按规则把请求分到不同节点,避免某一台压力过大。
  • 核心策略:
    • 轮询(默认):请求依次分给每个节点,适合节点性能差不多的情况;
    • IP 哈希:同一客户端的请求始终分给同一节点,适合需要保持登录状态的场景(比如 MinIO 控制台)。

3. 核心特性:按协议分层处理(不同请求不同玩法)

  • 四层代理(Stream 模块):只处理 TCP 协议(比如数据库连接),不解析请求内容,只管“转发数据流”,速度快;
  • 七层代理(HTTP 模块):处理 HTTP 协议(比如 Web 服务、文件上传),能解析请求头、路径,支持更灵活的规则(比如改请求头、按路径转发)。

 

二、结合实战配置:串联核心知识点

下面对照配置,看 Nginx 是怎么用这3个核心知识点干活的,重点看“配置对应什么功能”,不用纠结复杂参数。

(一)基础配置:给 Nginx 搭好运行环境

worker_processes  auto;  # 自动用所有 CPU 核心,提升并发能力
error_log  /var/log/nginx/error.log warn;  # 记录错误,方便排查
pid        /var/run/nginx.pid;  # 记录 Nginx 进程 IDevents {worker_connections  4096;  # 每个进程最多处理 4096 个连接
}
  • 逻辑:这部分是 Nginx 的“基础设置”,就像给中转站搭好场地、配好工作人员,为后续代理做准备。

 

(二)四层代理(Stream 模块):处理 StarRocks JDBC 连接

stream {# 1. 定义后端集群(负载均衡的“节点池”)upstream starrocks_jdbc {server 192.168.1.10:9030 weight=1 max_fails=3 fail_timeout=60s;server 192.168.1.11:9030 weight=1 max_fails=3 fail_timeout=60s;}# 2. 定义转发规则(反向代理的“入口”)server {listen 9031;  # 客户端连接 Nginx 的 9031 端口proxy_pass starrocks_jdbc;  # 把请求转发到上面的集群proxy_connect_timeout 30s;  # 30 秒连不上后端就算失败}
}
  • 核心知识点对应:
    • 反向代理:客户端连 Nginx:9031,Nginx 转交给 StarRocks FE:9030,客户端看不到后端 IP;
    • 负载均衡:用“轮询”策略,请求依次分给 192.168.1.10 和 192.168.1.11;
    • 四层代理:Stream 模块只转发 TCP 数据流,不关心 JDBC 协议的内容,速度快。
  • 简单流程:客户端(Flink)→ Nginx:9031 → 轮询到 StarRocks FE 节点 → 返回结果。

 

(三)七层代理(HTTP 模块):处理 MinIO 和 StarRocks StreamLoad

HTTP 模块是最常用的场景,核心是“解析 HTTP 请求,按规则转发”,下面分两部分看:

1. HTTP 基础配置:统一规则
http {include       /etc/nginx/mime.types;  # 识别文件类型(比如 .json、图片)sendfile        on;  # 高效传输大文件(比如 MinIO 上传的文件)keepalive_timeout  60s;  # 长连接超时时间,减少重复握手client_max_body_size 10240m;  # 允许最大上传 10GB 文件(适配大文件写入)
}
  • 逻辑:这是所有 HTTP 代理的“通用规则”,比如允许传大文件、高效传输,不用每个服务重复配置。
2. 代理 MinIO 服务(分 API 和控制台)
http {# (1)定义 MinIO 集群(负载均衡)upstream minio {  # MinIO 数据 API 集群(无状态,用轮询)server minio1:9000 weight=1 max_fails=3 fail_timeout=600s;server minio2:9000 weight=1 max_fails=3 fail_timeout=600s;}upstream console {  # MinIO 控制台集群(有状态,用 IP 哈希)ip_hash;  # 同一客户端始终连同一节点,保持登录状态server minio1:9001 weight=1 max_fails=3 fail_timeout=600s;server minio2:9001 weight=1 max_fails=3 fail_timeout=600s;}# (2)代理 MinIO API(9000 端口,反向代理)server {listen 9000;  # 客户端访问 Nginx:9000location / {  # 所有路径的请求都匹配proxy_pass http://minio;  # 转发到 minio 集群# 转发客户端真实 IP 和域名,让 MinIO 知道请求来源proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;}}# (3)代理 MinIO 控制台(9001 端口,反向代理)server {listen 9001;  # 客户端访问 Nginx:9001location / {proxy_pass http://console;  # 转发到 console 集群proxy_set_header Host $http_host;}}
}
  • 核心知识点对应:
    • 反向代理:客户端访问 Nginx:9000(API)或 9001(控制台),Nginx 转交给 MinIO 节点;
    • 负载均衡:API 用轮询(无状态,随便分),控制台用 IP 哈希(有状态,保会话);
    • 七层代理:解析 HTTP 请求头,转发时带上客户端真实 IP,适配 MinIO 的协议要求。

 

3. 代理 StarRocks StreamLoad(数据写入)
http {# (1)定义 StreamLoad 集群(负载均衡)upstream starrocks_streamload {server 192.168.1.10:8030 weight=1 max_fails=3 fail_timeout=60s;}# (2)代理转发规则(反向代理)server {listen 8031;  # 客户端(Flink)连接 Nginx:8031location / {proxy_pass http://starrocks_streamload;  # 转发到集群proxy_set_header Expect "100-continue";  # 适配 StreamLoad 协议要求proxy_next_upstream error timeout;  # 后端节点故障,自动切到下一个}}
}
  • 核心知识点对应:
    • 反向代理:Flink 不直接连 StarRocks:8030,而是通过 Nginx:8031 转发;
    • 负载均衡:轮询分发写入请求,避免单个节点压力过大;
    • 七层代理:解析 HTTP 请求,添加 StreamLoad 必需的请求头,还能实现故障自动切换(节点挂了换另一个)。

 

三、总结:Nginx 配置的核心逻辑

不管是 TCP 代理还是 HTTP 代理,配置逻辑永远是 “先定义后端集群(upstream)→ 再定义前端入口(server)→ 最后绑定转发规则(proxy_pass)”,而支撑这一切的核心就是“反向代理”“负载均衡”“按协议分层处理”这3个知识点。

简单记:Nginx 就像一个“智能中转站”——接收客户端请求,按规则分给后端节点,还能适配不同协议,让后端服务更安全、更稳定、压力更均匀。

 

完整示例见下:

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  4096;
}# ============================================================================
# StarRocks JDBC 负载均衡配置(TCP Stream)
# ============================================================================
# 用于负载均衡 Flink 中对 StarRocks 的 JDBC 请求
# 通过 stream 模块实现 TCP 协议的反向代理
# ============================================================================
stream {upstream starrocks_jdbc {# 轮询方式(默认),因为 StarRocks FE 的 Leader 和 Follower 都可以处理请求# max_fails=3: 连续失败3次后标记为不可用# fail_timeout=60s: 60秒后重新尝试该节点# 注意:使用 IP 地址而非容器名(host 网络模式)# 此配置由 init-env.sh 脚本根据 app.env 中的 FE_NODES 自动生成# 示例配置(会被脚本自动替换):# server 192.168.1.10:9030 weight=1 max_fails=3 fail_timeout=60s;  # Leader# server 192.168.1.11:9030 weight=1 max_fails=3 fail_timeout=60s;  # Follower# server 192.168.1.12:9030 weight=1 max_fails=3 fail_timeout=60s;  # Follower}server {# Nginx 监听端口,Flink 通过此端口连接 StarRockslisten 9031;proxy_pass starrocks_jdbc;proxy_timeout 60s;proxy_connect_timeout 30s;}
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;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  /var/log/nginx/access.log  main;sendfile        on;# 用于管理 HTTP 长连接生命周期的参数# 定义了一个 TCP 连接在完成最后一次数据传输后,仍然保持打开状态等待新的请求的最大时间keepalive_timeout  60;# 允许上传大文件(用于 StreamLoad)client_max_body_size 10240m;# include /etc/nginx/conf.d/*.conf;upstream minio {server minio1:9000 weight=1 max_fails=3 fail_timeout=600s;server minio2:9000 weight=1 max_fails=3 fail_timeout=600s;
#         server minio3:9000;
#         server minio4:9000;}upstream console {ip_hash;server minio1:9001 weight=1 max_fails=3 fail_timeout=600s;server minio2:9001 weight=1 max_fails=3 fail_timeout=600s;
#         server minio3:9001;
#         server minio4:9001;}server {listen       9000;#        listen  [::]:9000;server_name  localhost;# To allow special characters in headersignore_invalid_headers off;# Allow any size file to be uploaded.# Set to a value such as 1000m; to restrict file size to a specific valueclient_max_body_size 0;# To disable bufferingproxy_buffering off;proxy_request_buffering off;location / {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_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 300;# Default is HTTP/1, keepalive is only enabled in HTTP/1.1proxy_http_version 1.1;proxy_set_header Connection "";chunked_transfer_encoding off;proxy_pass http://minio;}}server {listen       9001;
#        listen  [::]:9001;server_name  localhost;# To allow special characters in headersignore_invalid_headers off;# Allow any size file to be uploaded.# Set to a value such as 1000m; to restrict file size to a specific valueclient_max_body_size 0;# To disable bufferingproxy_buffering off;proxy_request_buffering off;location / {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_set_header X-Forwarded-Proto $scheme;proxy_set_header X-NginX-Proxy true;# This is necessary to pass the correct IP to be hashedreal_ip_header X-Real-IP;proxy_connect_timeout 300;# To support websocketproxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";chunked_transfer_encoding off;proxy_pass http://console;}}# ============================================================================# StarRocks StreamLoad 负载均衡配置(HTTP)# ============================================================================# 用于负载均衡 Flink 中通过 StarRocks 的 StreamLoad 方式写入数据# 通过 http 模块实现 HTTP 协议的反向代理# ============================================================================upstream starrocks_streamload {# 轮询方式(默认)# max_fails=3: 连续失败3次后标记为不可用# fail_timeout=60s: 60秒后重新尝试该节点# 注意:使用 IP 地址而非容器名(host 网络模式)# 此配置由 init-env.sh 脚本根据 app.env 中的 FE_NODES 自动生成# 示例配置(会被脚本自动替换):# server 192.168.1.10:8030 weight=1 max_fails=3 fail_timeout=60s;  # Leader# server 192.168.1.11:8030 weight=1 max_fails=3 fail_timeout=60s;  # Follower# server 192.168.1.12:8030 weight=1 max_fails=3 fail_timeout=60s;  # Follower}server {# Nginx 监听端口,Flink 通过此端口进行 StreamLoadlisten 8031;server_name localhost;location / {proxy_pass http://starrocks_streamload;# 添加 Expect: 100-continue 请求头# 解决 Flink StreamLoad 时 "There is no 100-continue header" 错误proxy_set_header Expect "100-continue";# 故障转移策略:当出现以下错误时,nginx 会尝试与下一台服务器连接proxy_next_upstream error timeout http_500 http_502 http_503 http_504;# 连接超时设置proxy_connect_timeout 30s;proxy_send_timeout 60s;proxy_read_timeout 60s;# 禁用缓冲,确保数据实时传输proxy_buffering off;proxy_request_buffering off;}}
}
http://www.dtcms.com/a/600682.html

相关文章:

  • 域名注册和网站设计服务如何做贴吧类网站多钱
  • python+uniapp基于微信小程序的垃圾分类信息系统
  • C语言编译器安卓版 | 强大功能助力编程学习与实践
  • STM32使用金属探测传感器自制金属探测仪
  • vmware嵌套安装esxi7.0.3扩容vmfs
  • 使用 BR 备份 TiDB 到 AWS S3 存储
  • 【OpenCV + VS】OpenCV 绘图:绘制矩形、圆形、椭圆形、线条等
  • 易语言反编译工具 - 高效破解易语言程序的利器
  • 11年始终专注营销型网站提供网站建设小程序制作
  • AOSP Android13 Launcher3——TransformParams 类
  • 网站推广问题推广公司网站有哪些方式
  • 成都网站建设公司电话美食网站建设多少钱
  • 【把Linux“聊”明白】进程的概念与状态
  • GIT版本管理工具轻松入门 | TortoiseGit,本地 Git 仓库和 Git 概念,笔记02
  • 什么是美颜sdk?美型功能开发与用户体验优化实战
  • 在 React 项目中使用 Ky 与 TanStack Query 构建现代化数据请求层
  • 计算机网络---传输层安全 SSL与TLS
  • 【Linux篇】信号机制深度剖析:从信号捕捉到SIGCHLD信号处理
  • C语言编译软件选择及优化建议
  • Linux 之 【冯诺依曼体系结构与操作系统的简介】
  • 潍坊建设gc局网站windows优化软件
  • Java虚拟机(JVM)面试题(51道含答案)
  • [27] cuda 应用之 核函数实现图像通道变换
  • Aurora RDS MySQL The table ‘/rdsdbdata/tmp/#sql14b_df16d_1bd‘ is full
  • 手机响应式网站怎么做how to use wordpress
  • 网易云音乐回应“不适配鸿蒙”:推动相关部门加快步伐
  • C语言在线编译练习 | 提高编程技能与实战能力
  • 人工智能分支——深度学习、机器学习与神经网络初概览
  • C++ STL 关联式容器:map 与 set 深度解析与应用实践
  • 鄂尔多斯网站制作 建设推广网站建设前台功能