Karp 的技术博客

2025-01-06T09:02:16.png

在 Nginx 中配置 Stream 模块,以实现 TCP/UDP 的负载均衡和流量转发。我们将涵盖如何确认 Nginx 是否编译了 Stream 模块、配置文件的设置以及负载均衡策略的使用。

Nginx四层负载均衡应用场景

1.四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalive
2.tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。
3.数据库读写分离负载
4.跳板机端口映射

1. 确认 Nginx 是否支持 Stream 模块

首先,我们需要确认 Nginx 是否在编译时启用了 Stream 模块。可以通过以下命令来检查:

nginx -V | grep stream

如果输出包含以下内容,说明 Nginx 支持 Stream 模块:

--with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module

2. 配置 Nginx

2.1 动态加载 Stream 模块

接下来,我们需要在 Nginx 的配置文件中加载 Stream 模块。可以在 nginx.conf 文件中添加以下行:

load_module /usr/lib64/nginx/modules/ngx_stream_module.so;

或者使用通用的包含指令:

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

2.2 配置 Stream 块

nginx.conf 文件中,我们需要在 http 块的同级位置添加 stream 块。例如:

stream {
    log_format tcp_log '$remote_addr [$time_local] '
                      '$status $bytes_sent $bytes_received';
    include /etc/nginx/rpc/*.conf;
}

2.3 配置 TCP 负载均衡

我们可以创建一个新的配置文件,比如 iprpc_5019.conf,用于指定流量的监听和转发:

server {
    listen 5019;
    access_log /var/log/nginx/iprpc_5019_access.log tcp_log;
    error_log /var/log/nginx/iprpc_5019_error.log;
    proxy_pass iprpc_5019;  # 将流量转发到 upstream
    proxy_timeout 600s;  # 可以根据需要调整超时
    proxy_connect_timeout 60s;  # 配置连接超时
}

2.4 定义 Upstream 服务器

在另一个配置文件,比如 rpc_upstream.conf 中,我们需要定义 upstream 服务器:

upstream iprpc_5019 {
    # least_conn;  # 使用最少连接策略
    # server 10.10.10.14:5019 weight=5;  # 设置权重
    server 10.10.10.14:5019;
    server 10.10.10.15:5019;
    server 10.10.10.16:5019;
}

3. 支持的负载均衡策略

Nginx 支持多种负载均衡策略,具体如下:

  1. 轮询(Round Robin):默认策略,依次将请求分配给 upstream 中的服务器。
  2. 加权轮询(Weighted Round Robin):根据服务器的权重分配请求,权重越高,服务器处理的请求越多。
  3. 最少连接(Least Connections):使用 least_conn; 指令,将请求分配给当前连接数最少的服务器,适用于服务器性能差异较大的场景。

nginx

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2025年01月06日 09:04
1

目录

来自 《Nginx 四层协议 Tcp 负载均衡》