nginx,php-fpm,phpfastcgi,upstream實現負載均衡
應用的最前端是一臺nginx服務器,所有靜態的內容都由nginx來處理,而將所有php的請求都分攤到下游的若干臺運行php fastcgi守護進程的服務器中,這樣可以以一種廉價的方案來實現對系統負載的分攤,擴展系統的負載能力。
三臺php fastcgi服務器的ip地址分別為:
172.16.236.110 , 172.16.236.111, 172.16.236.112
運行php fastcgi進程時,需要讓php-cgi監聽到服務器的局域網地址(分別如上所示),而不是之前一般都是監聽的本地地址(127.0.0.1)。以172.16.236.110這臺服務器為例:
- /usr/local/php5/bin/php-cgi -b 172.16.236.110:9000
或許你用spawn-fcgi來啟動php-fcgi,那么就是這樣(供參考,其實也就是修改監聽的地址和端口即可):
- /usr/local/lighttpd/bin/spawn-fcgi -f /usr/local/php5/bin/php-cgi -a 172.16.236.110 -p 9000
又或許你是用php-fpm來管理php-fcgi,那么你需要修改php-fpm的配置
- vi /usr/local/php5/etc/php-fpm.conf
找到這個配置項(其中的地址可能需要根據你自己環境來調整)
- <value name="listen_address">127.0.0.1:9000</value>
修改為:
- <value name="listen_address">172.16.236.110:9000</value>
修改完畢后,重啟你的php-fpm進程。
然后按照上面的步驟,依次修改其他php fastcgi服務器。
php方面的工作暫時就是這些,下面修改nginx。
- vi /usr/local/nginx/conf/nginx.conf
在配置文件的http段內增加類似如下的配置:
- upstream myfastcgi {
- server 172.16.236.110 weight=1;
- server 172.16.236.111 weight=1;
- server 172.16.236.112 weight=1;
- }
我這里三臺php fastcgi服務器的權重是相同的,所以其中的weight值都是1,如果你的php fastcgi服務器需要分主次,那么可以通過調整其weight值來達到目的。比如以***臺服務器為主,其他兩臺為輔,則就是這樣:
- upstream myfastcgi {
- server 172.16.236.110 weight=1;
- server 172.16.236.111 weight=2;
- server 172.16.236.112 weight=2;
- }
然后找到原來nginx關于php fastcgi配置的部分,比如:
- location ~ \.php$ {
- fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
將其中的fastcgi_pass那一段改為:
- fastcgi_pass myfastcgi;
其中的myfastcgi也就是上面剛剛配置的php fastcgi均衡器的名字了。
完了以后,重啟nginx即可