【伍哥原創】php
使用Nginx的upstream實現簡單的1+2負載均衡
(基於HTTP的調度,因此也叫7層負載均衡)html
伍哥的實驗環境:一臺普通PC機,安裝了CentOS 6.2,安裝了Nginx 1.2和PHP-FPMnginx
1,把實驗環境安裝好
Nginx和php-fpm安裝起來都挺輕鬆的,這裏就很少說了。如遇疑問,請參考伍哥以前的相關文章,裏面都有很詳細的操做步驟。web
2,簡單的1+2負載均衡示意圖
因爲機器所限,伍哥圖快,就用一個服務器來測試。其實安裝XenServer作幾臺虛擬機也是能夠的。
Proxy是192.168.1.27:80,若是是用在產品環境,就應該是你買來的公網IP。
真實服務器是192.168.1.27:8080和192.168.1.27:8081。若是你有另外兩個機器,也能夠配置成192.168.1.28:80和192.168.1.29:80。
用戶PC機就是伍哥本身的開發機,呵呵。vim
3,配置兩個web server
先確認你的nginx主配置文件裏面有:
include /etc/nginx/conf.d/*.conf;
後端
1
2
3
4
5
6
7
8
9
10
|
#建立web server 1的根目錄
mkdir
/web/8080
touch
/web/8080/index
.php
echo
"8080"
>
/web/8080/index
.php
#修改權限,注意下面的web是nginx和php-fpm的執行用戶
chown
web.web -R
/web/8080
#去到nginx配置目錄
cd
/etc/nginx/conf
.d
#新建web server 1的配置
vim 8080.conf
|
加入8080.conf裏面瀏覽器
1
2
3
4
5
6
7
8
9
10
11
|
server {
listen 8080;
root /web/8080;
index index.php index.html index.htm;
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;
}
}
|
web server 2也是徹底相同的操做,惟一不一樣的就是8080改爲8081。
配置好之後在用戶PC機用瀏覽器訪問192.168.1.27:8080和192.168.1.27:8081看看效果。bash
4,配置proxy服務器
1
2
|
cd
/etc/nginx/conf
.d
vim proxy.conf
|
加入到proxy.conf裏面session
1
2
3
4
5
6
7
8
9
10
11
12
13
|
upstream backend {
server 192.168.1.27:8080 weight=6 max_fails=2 fail_timeout=5;
server 192.168.1.27:8081 weight=4 max_fails=2 fail_timeout=5;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
|
這裏用的了nginx的upstream模塊。其中backend就是這個upstream的名字,能夠隨便取。花括號裏面就是放真實服務器的記錄,以分號結束。
若是你想某個機器臨時不要被調度,能夠加上 down 指令。
weight是訪問權重,默認是1,主要是體現一個調度權重的比例;max_fails是訪問失敗次數,默認是1,達到這個失敗次數就認爲機器down 了,在fail_timeout那麼多秒內再也不參與負載調度;fail_timeout就是一個被認爲down了的機器從新加入調度的等待時間。你能夠直 接不寫這三個參數,這裏是爲了說明清楚。
而後重啓nginx
1
2
3
4
|
#重啓nginx
/etc/init
.d
/nginx
restart
#或者
/usr/local/nginx/sbin/nginx
-s reload
|
全部東西配置好之後,在用戶PC機用瀏覽器訪問192.168.1.27看看效果。
5,調度策略
- 輪詢(默認,至關於weight都是1)
每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。
- 按權重 weight
指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。就是咱們上面的實驗配置了。
- ip_hash
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題。主要,不能和weight方式一塊兒使用。
1
2
3
4
5
|
upstream backend {
ip_hash;
server 192.168.1.27:8080;
server 192.168.1.27:8081;
}
|
【全文完】