当前位置: 首页 > 后端技术 > PHP

nginx+php-fpm负载均衡及性能测试

时间:2023-03-29 16:05:51 PHP

一直都知道nginx本身可以进行负载均衡,但是没有测试过。我今天做了实验。以下是笔记和记录。0.准备vagrant+centos6.7vbox1。构建和配置Plan3Web服务器以实现负载平衡。由于之前已经有虚拟机了,我现在再添加2台。依次执行以下操作1、在E盘创建servers目录,初始化vagrantinit2、配置vagrantfile,添加2台虚拟机机器分别在192.168.33.11、192.168.33.12和之前的192.168.33.10组成3个集群Vagrant.configure(2)执行|config|config.vm.define"web_1"做|web_1|web_1.vm.box="centos67"web_1.vm.network"private_network",ip:"192.168.33.11"web_1.vm.provider"virtualbox"do|v|v.memory="1024"endendconfig.vm.define"web_2"do|web_2|web_2.vm.box="centos67"web_2.vm.network"private_network",ip:"192.168.33.12"web_2.vm.provider"virtualbox"do|v|v.memory="1024"endendend3.添加了在两台服务器上安装php和一些必要的软件。为了提高效率,我写了一个脚本,分别在两台机器上运行yuminstall-ygccvimsu-c'rpm-Uvh。http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'rpm-Uvhhttp://mirror.webtatic.com/yum/el6/latest.rpmyuminstall-ynginxyuminstall-yphp71w-*--skip-brokengroupadddevuseradd-s/bin/bash-gdevvison本次实验中web_1和web_2两台服务器实际上只使用了php-fpm,而之前的host_1(192.168.33.10)会使用nginx和php-fpm4。配置web_1web_2的php-fpm的www.conf配置文件主要涉及listen和listen.allowed_clients的配置。前者表示php-fpm监听的ip和端口。由于要反向代理host_1的nginx,所以应该使用局域网ip,而不是默认的127.0.0.1.#192.168.33.11的www.conflisten=192.168.33.11:9000listen.allowed_clients=192.168.33.10#192.168。33.11的www.conflisten=192.168.33.12:9000listen.allowed_clients=192.168.33.10配置之后,注意reload配置服务php-fpmreload5。配置host_1的nginx做负载均衡#nginx.conf#配置balancelog看哪个机器的fpmlog_formatupstreamlog'[$time_local]$remote_addr-$remote_user-$server_nameto:$upstream_addr:$requestupstream_response_time$upstream_response_timemsec$msecrequest_time$请求时间';access_log/var/log/nginx/$host.access.log上游日志;upstreamphp-fpm-backend{#round-robinscheduling(Round-RobinScheduling)模式server127.0.0.1:9000;服务器192.168.33.11:9000;服务器192.168.33.12:9000;}#test-dev.conf虚拟主机配置server_nametest.dev;根/home/vison/www/demaya/webroot;位置~\.php${fastcgi_passphp-fpm-backend;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;包括fastcgi_params;}6.同步php文件由于不同的fpm会找机器的根目录,也就是之前配置的/home/vison/www/demaya/webroot,所以需要在192.168.33.10-12三台机器都有相同的代码。为了测试方便,我特意在这里改了三台机器的index.php文件代码。host_1输出hello,host_1,web_1输出hello,web_1等等。2、测试浏览器访问测试.dev结果:helloforthefirsttime,helloforthesecondtimeforhost_1,helloforthirdtimeforweb_1,web_2...依次说明:nginx已经代理到host_1web_1web_2轮换模式,查看host_1的access.log也会发现3.性能测试多个serveragent一定会提升性能吗?笔者在负载均衡前后分别使用ab进行了测试,得到的答案是否定的。配置RPS可以达到900+,但是加2个相同配置的虚拟机代理只能达到800+。自动配置php-fpm进程数会起作用,php-fpm进程数会自动增加。但是性能提升效果并不明显,但是nginx的auto不行,还是只有一个。通过手动增加nginx配置,发现rps有所提升,但效果不明显。在使用vmstat查看分析性能瓶颈时,感觉是CPU到了瓶颈。如果vmstat显示很多r,说明CPU处理不了。于是又把host_1的cpus配置改成了2.ab,结果RPS可以达到1500左右,几乎翻了一番!4.结论性能问题不是那么容易解决的,需要耐心排查。