用Nginx做负载均衡,表现很不稳定.解决中..

在使用Nginx进行负载均衡测试时,遇到502错误和性能不稳定的问题。通过调整nginx的upstream设置、解决超时问题、统一worker_rlimit_nofile配置以及优化php-fpm的配置,包括启用fastcgi_pass的unix套接字,成功提高了并发处理能力和稳定性。同时,max_fails和proxy_read_timeout的设置对于大型系统的负载分配也起到关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近用loadrunner测试一个php应用的并发(相当于论坛).
客户要求.每秒达到4000-5000并发请求.
提供了8台联想PC..4G内存,双核的CPU. 而且无光驱,又不能上外网.

其中4台用硬盘安装了双系统.CentOS.32位.网口100M.(板载网卡性能差,改用独立的)
4台装loadrunner测试.每台模拟1000用户,thinktime设成0.

1,先单机测试. nginx + php-fpm + mysql
平均:1700hits/s, 800trans/s, CPU 80%多, 内存占用2G左右, 网络90%.
应用加了Cache数据库命中率不高但仍然占了20%CPU. 按这个测试,也就差不多极限了.

2,接下来做负载均衡. 1台nginx proxy pass 到后面3台 如上面测试的配置.
发现出现502错误,连接不稳定,负载不均衡. 网络流量也不稳定.直接刷页面也不慢.
测试结果并没有3X,反而是0.5X,很是郁闷.
修改多次php-fpm,nginx的workprocessor等等参数. 不见效.今日以遗憾告终.

3,回来后赶紧查资料.发现以下可能项,需要优化.

1),nginx upstream的排错逻辑可能造成的问题. (修改后有效)
2),nginx proxy时,如果后端响应超时或失败会暂停请求10s(已印证)
3),nginx 超时时间设置过长. (修改后有效)
4),worker_rlimit_nofile配置要和系统内核配置一致,我的是65535.(修改有效)
5),linux内核配置问题. 启动 nginx前执行ulimit -HSn 65535,

计划1. 修改upstream的设置.
计划2. 配置lvs.替代nginx做负载均衡.

记下来几个东西,明天配置看结果. 再修改此帖.



upstream bbs_server_pool {
server 192.168.1.15:80 weight=1 max_fails=0 fail_timeout=30s;(尝试下降低timeout,降低max_fails)
}

location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://bbs_server_pool;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}

#让TIME_WAIT尽快回收,我也不知是多久,观察大概是一秒钟(我都已设置)
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
echo "40001 61000" > /proc/sys/net/ipv4/ip_local_port_range



再增加一个优化

启用/tmp/php-cgi.sock,修改如下即可。

fastcgi_pass unix:/tmp/php-cgi.sock;

# fastcgi_pass 127.0.0.1:9000;


php-fpm.conf的优化

1、启用/tmp/php-cgi.sock,查找并修改成如下代码即可。

  <value name=”listen_address”>/tmp/php-cgi.sock</value>

结论:
(1)proxy_next_upstream参数很有用,他可以避免很多 错误
(2)max_fails 参数在繁忙的大型系统中建议设置为3,如果没有几个后端服务器的话保持默认即可。不怕出错,可以设置成0,这样负载分配更均衡。
(3)proxy_read_timeout要根据自身程序而定,不要过大,也不 要太小。如果是php程序,请参照php.ini中的max_execution_time选项值,默认30s。

老梁的博客有很多测试和说明
http://blog.sina.com.cn/s/blog_66b600260100ijg7.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值