Nginx环境下的upstream模式php-cgi负载均衡的尝试

昨天突然间打开http://fengzi.org特别慢,由于http://fengzi.org是伪静态的,这说明PHP脚本出了问题。

netstat -anpo | grep “php-cgi” | wc -l 查了一下,发现同时请求的php-cgi程序竟然有165个。仔细想了一下,产生该问题的原因可能是php-cgi.sock处理过慢,和PHP本身的问题造成的。

Nginx的fastcgi处理模式有两种,一种是通过sock来处理,另一种是通过fastcgi的端口来处理。sock的处理虽然相比fastcgi能慢一点,但是相对稳定。下面我们要做的就是给fastcgi做本地均衡,来同享php-cgi.sock和fastcgi端口模式的优点。

具体的做法是,首先拷贝4组php-fpm.conf的配置样本

[root@ido etc]# cp php-fpm.conf php-fpm-9000.conf
[root@ido etc]# cp php-fpm.conf php-fpm-9001.conf
[root@ido etc]# cp php-fpm.conf php-fpm-9002.conf
[root@ido etc]# cp php-fpm.conf php-fpm-9003.conf

修改php-fpm9000.conf,监听地址和子进程如下<value name=”listen_address”>127.0.0.1:9000</value> <value name=”max_children”>0</value>。其他三个文档以此类推。

给Nginx.conf添加upstream,以支持php-cgi(php-fpm)的本地均衡。

                upstream king {
                server 127.0.0.1:9000;
                server 127.0.0.1:9001;
                server 127.0.0.1:9002;
                server 127.0.0.1:9003;
                }
同样,server里的location加上proxy_pass

                location ~ .*\.(php|php5)?$
                        {
                                proxy_pass  http://king;
                                fastcgi_pass  unix:/tmp/php-cgi.sock;
                                #fastcgi_pass  127.0.0.1:9000;
                                fastcgi_index index.php;
                                include fcgi.conf;
                        }

手动添加四组php-cgi均衡均衡脚本

[root@ido ~]#  /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm-9000.conf

[root@ido ~]#  /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm-9001.conf

[root@ido ~]#  /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm-9002.conf

[root@ido ~]#  /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm-9003.conf

重启nginx,观察了一下,网站运转良好,速度也很快也很稳定,但是内存占用很大。

PS. 用netstat -an | grep 9000 发现该端口一直是监听状态,并没有使用。所以我怀疑这次尝试很可能是无意义的或者是失败的。

1 Comment

美服游戏代理July 2nd, 2009 at 9:18 am

呵呵,帮你PP顶!也请来美服游戏代理看看……

Leave a comment

You must be logged in to post a comment.