在 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 支持多种负载均衡策略,具体如下:
- 轮询(Round Robin):默认策略,依次将请求分配给 upstream 中的服务器。
- 加权轮询(Weighted Round Robin):根据服务器的权重分配请求,权重越高,服务器处理的请求越多。
- 最少连接(Least Connections):使用
least_conn;
指令,将请求分配给当前连接数最少的服务器,适用于服务器性能差异较大的场景。