nginx tcp负载突破端口数量限制 proxy_bind split_client

前几日再网上看到一篇文章《复工后一次百万长连接压测Nginx与OOM的问题排查分析,我裂开了!》。标题很具有吸引力,内容也很有吸引力,链接我就不放了,有兴趣的朋友可以搜一下看看。

文章中描述使用了上百台Jmeter服务器来作为百万长连接客户端连接Nginx做压测。Nginx为4台集群,让我不禁感慨Nginx的强大。随后我有思考了一个问题,既然是长连接代理,jmeter client到Nginx集群的连接数达百万,那Nginx到后端服务器之间也应该是百万连接啊,那么是如何做到4台nginx服务器对后端服务发起了百万connect 长连接保持的呢?

tcp连接元组client [ip:port]-server[ip:port]

nginx作为中继服务器的时候身份是属于client的,那么ip就会被固定,server端ip:port也是固定,那么连接数就受限于Nginx服务器本身的port数量:65535(实际达不到,会有保留端口) ,4台服务器如何也达不到保持百万长连接。

那么文章所描述的百万长连接是否是吹嘘?

当然不是吹嘘,其实还是有办法达到的,让服务器突破端口限制,在此之前我也不知道如何,通过网上搜索和向高人请教,才得知,其实可以为Nginx服务器一个网卡配置多个ip,通过增加client端的ip数量来突破限制,配合Nginx的proxy_bind和split_client功能突破单机对外65535以及负载均衡的效果。下面介绍一下实现过程

前期准备

  1. 一台Nginx服务器(需要安装stream模块用于TCP代理转发)(ip为192.168.1.53)
  2. 一台TCP server(ip:port 192.168.1.83)
  3. 多个TCP client(可使用工具代替)

Nginx配置文件nginx.conf


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    use epoll;
    worker_connections  1024;
}


stream {
    split_clients "$remote_addr$remote_port" $split_ip {
        50% 192.168.1.53;
        *   192.168.1.54;
    }
    upstream tcp_proxy {
        server 192.168.1.83:8999;// 后端TCP server 地址
    }
    server {
        listen 8998;// 监听8998端口
        proxy_pass tcp_proxy;
        proxy_bind $split_ip;
    }
}
 

配置文件中split_clients添加了两个ip192.168.1.53,192.168.1.54,两个ip都为nginx服务器的ip,一个是原始配置ip,一个为后续添加的临时ip

192.168.1.54ip 为临时增加的

ifconfig ens33:1 192.168.1.54 netmask 255.255.255.0 up

通过一个简单的TCP client工具对nginx发起连接请求,只测试了5-6个连接就可以看到效果

可以看到后端服务打印的来自nginx连接的地址ip一部分是53,一部分是54

通过增加多个网卡或者ip则单台nginx对外发起的Connect成倍增加,突破65535限制。

文章比较简单,阅读需要有一些nginx的使用基础和tcp的理论知识,另外我不清楚文章开头提到的百万连接是否是通过这种方式实现的。我只是将自己学习的结果记录以及发出来,本人水平很浅,希望大家多多指正

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值