使用Nginx的upstream實現簡單的1+2負載均衡

【伍哥原創】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;
}

【全文完】

相關文章
相關標籤/搜索