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 发现该端口一直是监听状态,并没有使用。所以我怀疑这次尝试很可能是无意义的或者是失败的。
呵呵,帮你PP顶!也请来美服游戏代理看看……