利用tcpcopy,对nginx进行压力测试,效果见正文(注意用的是tcpcopy 0.5以下的版本)

本文详述了一次使用tcpcopy 0.5以下版本对4台nginx服务器进行压力测试的过程,测试期间遇到ip_queue_full问题,通过调整ip_queue_maxlen解决。分析结果显示,nginx在调整后能有效处理接近在线服务器2倍的流量。

从上午10:41分开始试验,一直到18:17,7个半小时左右。

从4台nginx服务器拷贝流量到测试服务器,由于lvs有两个虚拟ip,在在线服务器执行命令如下:

[root@bgp176-141 work]# ./tcpcopy xxx.xxx.xxx.140 80  xxx.xxx.xxx.148 18080

root@bgp176-142 work]#  ./tcpcopy xxx.xxx.xxx.137 80 xxx.xxx.xxx.148 18080
[root@bgp176-143 work]# ./tcpcopy xxx.xxx.xxx.140 80 xxx.xxx.xxx.148 18080

[root@bgp176-144 work]# ./tcpcopy xxx.xxx.xxx.137 80 xxx.xxx.xxx.148 18080  
 

上述4台服务器所copy的流量大概是在线服务器的2倍流量

测试服务器中途遇到ip queue full的情况,修改ip queue length后就没有再出现

echo 4096 > /proc/sys/net/ipv4/ip_queue_maxlen

cat /var/log/messages部分数据如下:

Nov  2 10:45:13 bgp176-148 kernel: printk: 118 messages suppressed.
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243413
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243414
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243415
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243416
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243417
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243418
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243419
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243420
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243421
Nov  2 10:45:13 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243422
Nov  2 10:56:53 bgp176-148 kernel: printk: 274 messages suppressed.
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243697
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243698
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243699
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243700
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243701
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243702
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243703
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243704
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243705
Nov  2 10:56:53 bgp176-148 kernel: ip_queue: full at 1024 entries, dropping packets(s). Dropped: 2243706
Nov  2 11:18:42 bgp176-148 ntpd[1851]: time reset +0.212364 s
Nov  2 11:22:56 bgp176-148 ntpd[1851]: synchronized to LOCAL(0), stratum 10
Nov  2 11:23:33 bgp176-148 ntpd[1851]: synchronized to 220.181.28.157, stratum 2
Nov  2 11:27:15 bgp176-148 ntpd[1851]: synchronized to 122.226.192.4, stratum 2

执行到18点多的时候,我们来分析使用情况

root@bgp176-148 logs]# date

Wed Nov  2 18:17:02 CST 2011

[root@bgp176-148 logs]# ps aux|grep interception

root      7855 34.6  4.4  94052 92708 pts/1    S+   10:40 158:09 ./interception

[wangbin@bgp176-141 logs]$ ps aux|grep tcpcopy
wangbin   9041  0.0  0.0  61188   732 pts/1    S+   18:17   0:00 grep tcpcopy

root     27198 21.3  0.7  40952 28068 pts/0    Rl+  10:41  97:24 ./tcpcopy xxx.xxx.xxx.140 80 xxx.xxx.xxx.148 18080

测试服务器数据如下:

 7830 adrun     15   0 22340  18m  932 S 30.8  0.9 202:34.59 nginx                                                                  
 7832 adrun     15   0 22456  19m  932 S 30.8  0.9 206:58.98 nginx                                                                  
 7829 adrun     15   0 21848  18m  932 S 29.7  0.9 181:29.62 nginx                                                                  
 7831 adrun     15   0 22084  18m  932 S 27.4  0.9 192:06.58 nginx                                                                  
 7855 root      15   0 94052  90m  400 S 25.1  4.5 159:41.30 interception                                                           
 5363 root      18   0 37764  23m  744 S 17.1  1.2 155:03.92 asyn_server
 

-rw-r--r-- 1 root  root  25393322281 Nov  2 18:18 access.log

我们分析请求处理情况:

[wangbin@bgp176-141 logs]$ grep '2011:18:35' access.log |wc -l
69737

[root@bgp176-148 logs]# tail -n 1000000 access.log |grep '2011:18:35' |wc -l    
139653
2倍流量=69737×2=139474,接近在线流量的2倍

中间的情况如下:

[root@bgp176-148 logs]# tail -n 1000000 access.log |grep '2011:13:36' |wc -l
191913
[root@bgp176-148 logs]# tail -n 1000000 access.log |grep '2011:13:37' |wc -l
190548
[root@bgp176-148 logs]# tail -n 1000000 access.log |grep '2011:13:44' |wc -l  
190721
[root@bgp176-148 logs]# tail -n 1000000 access.log |grep '2011:13:47' |wc -l  
189788


[wangbin@bgp176-141 logs]$ grep '2011:13:37' access.log |wc -l
97498
[wangbin@bgp176-141 logs]$ grep '2011:13:36' access.log |wc -l
97693
[wangbin@bgp176-141 logs]$ grep '2011:13:44' access.log |wc -l  
94891
[wangbin@bgp176-141 logs]$ grep '2011:13:47' access.log |wc -l
94464
两倍=97498×2=194996
两倍=97693×2=195386
两倍=94891×2=189782
两倍=94464×2=188928

我们可以得出结论,通过tcpcopy,nginx目前能够承受2倍的在线压力

<think>好的,我需要帮助用户在openEuler 22.03 Linux虚拟机上从源码安装支持负载均衡模块和RTMP模块的Nginx稳定版,并验证功能。首先,我得理清楚整个流程。 用户提到了要添加负载均衡模块和RTMP模块。根据示例中的引用[^1],负载均衡配置可能涉及stream模块和upstream配置。但这里用户需要的是编译时添加这些模块,可能需要确认是否默认包含或者需要额外模块。 首先,Nginx的负载均衡功能通常属于HTTP模块中的upstream,而stream模块用于TCP/UDP负载均衡。用户可能需要确保编译时包含这些模块。不过Nginx默认的源码中应该已经包含这些基础模块,但可能需要确认。而RTMP模块是第三方模块,需要单独下载源码并编译进去。 接下来,步骤应该是:安装依赖、下载Nginx源码和第三方模块(如RTMP)、配置编译参数、编译安装、配置文件和测试。 需要注意的点: 1. 安装编译所需的依赖包,比如gcc、make、pcre-devel、zlib-devel、openssl-devel等。 2. 下载Nginx稳定版源码,比如从官网获取最新稳定版本。 3. 下载RTMP模块的源码,比如nginx-rtmp-module。 4. 配置编译参数,使用--with-http_ssl_module(如果需要SSL),--with-stream(用于stream模块的负载均衡,可能用户需要的),以及添加RTMP模块的路径(--add-module=../nginx-rtmp-module)。 5. 编译和安装过程中可能遇到的错误,比如依赖缺失,需要处理。 6. 安装后的配置,比如修改nginx.conf,设置HTTP负载均衡或RTMP服务。 7. 启动服务,测试功能是否正常。 验证部分,对于负载均衡,可以配置多个后端服务器,或者用测试工具模拟请求。对于RTMP,可以使用推流工具测试流媒体功能。 可能遇到的问题:第三方模块的兼容性,比如RTMP模块是否支持最新的Nginx版本。需要确认版本匹配。 现在需要把这些步骤详细写出来,确保用户能正确执行。同时要提醒用户注意权限问题,比如可能需要开放防火墙端口,或者使用root权限操作。</think>在 openEuler 22.03 中通过源码编译安装 Nginx 并添加模块的完整步骤如下: ### 一、环境准备 1. 安装编译依赖 ```bash sudo dnf install -y gcc make pcre-devel zlib-devel openssl-devel git ``` 2. 下载源码 ```bash wget https://nginx.org/download/nginx-1.24.0.tar.gz tar zxvf nginx-1.24.0.tar.gz ``` 3. 获取第三方模块 ```bash git clone https://github.com/arut/nginx-rtmp-module.git ``` ### 二、编译配置 1. 进入源码目录 ```bash cd nginx-1.24.0 ``` 2. 配置编译参数(关键步骤) ```bash ./configure \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-stream \ --add-module=../nginx-rtmp-module ``` *注意:`--with-stream` 启用 TCP/UDP 负载均衡支持[^1],`--add-module` 添加 RTMP 模块* ### 三、编译安装 ```bash make -j$(nproc) sudo make install ``` ### 四、功能验证 1. 创建配置文件 `/usr/local/nginx/conf/nginx.conf`: ```nginx worker_processes auto; events { worker_connections 1024; } http { upstream web { server 10.0.0.5:80; # 示例后端服务器 server 10.0.0.6:80; } server { listen 80; location / { proxy_pass http://web; } } } rtmp { server { listen 1935; application live { live on; record off; } } } ``` 2. 启动服务 ```bash sudo /usr/local/nginx/sbin/nginx ``` 3. 测试负载均衡 ```bash curl -I http://localhost ``` 4. 测试 RTMP 推流(需安装 OBS 或 ffmpeg): ```bash ffmpeg -re -i test.mp4 -c copy -f flv rtmp://localhost/live/streamkey ``` ### 五、问题排查 1. 查看编译模块列表 ```bash /usr/local/nginx/sbin/nginx -V ``` 2. 日志查看 ```bash tail -f /usr/local/nginx/logs/error.log ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值