Nginx分佈式的簡單實現

查看Nginx安裝後的各路徑:

[root@code sbin]# whereis nginx
nginx: /usr/local/nginx

 查看Nginx安裝狀態

[root@code sbin]# cd /usr/local/nginx/sbin/
[root@code sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

每次修改完Nginx配置文件後需要重啓,需要在nginx執行文件路徑下

[root@code sbin]# ./nginx -s reload

啓動Nginx

介紹下Nginx的啓動、停止、重啓命令:

命令 價格
nginx 根據配置文件/etc/nginx/nginx.conf啓動
nginx -s stop 停止
nginx -s reload 重啓

執行以上三個命令都不會有任何輸出提示,但可以通過ps命令查看進程狀態:

[root@... ...]# nginx
[root@... ...]# ps -ef |grep nginx
root     10133     1  0 21:00 ?        00:00:00 nginx: master process nginx
nginx    10134 10133  0 21:00 ?        00:00:00 nginx: worker process
root     10136  9121  0 21:00 pts/1    00:00:00 grep --color=auto nginx
[root@... ...]# nginx -s stop
[root@... ...]# ps -ef |grep nginx
root     10181  9121  0 21:05 pts/1    00:00:00 grep --color=auto nginx

Nginx的配置路徑如上,一般

http {
    #...
    #添加測試用的轉向配置
    server {
        #Nginx服務器監聽8080端口
        listen 8080;
        #監聽的服務的名稱,因爲並未設置任何服務,所以直接使用localhost
        server_name localhost;
        #代理有可能導致請求頭丟失,以下三行保證請求一定會有請求頭
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #要轉向的IP及端口
        location / {
            #博主的Tomcat與Nginx安裝在同一臺服務器上,所以直接將請求轉向本地的8081端口
            proxy_pass http://127.0.0.1:8081;
        }
    }
}

這裏要注意server標籤要寫在http標籤內部,並且要開啓8080端口,但8081、8082、8083端口不需要開啓,這也是Nginx安全性特點的體現之一。

測試轉向

在Linux服務器上啓動一個訪問端口爲8081的Tomcat服務器,使用瀏覽器訪問服務器的8080端口(注意開啓8080端口或關閉防火牆),會發現請求被轉發到8081端口的Tomcat服務器中,測試完成,成功完成轉向。

Nginx負載均衡

由於單臺Tomcat服務器能夠承受的併發量太小,所以開發環境下都要配置多臺Tomcat服務器,形成分佈式集羣,這時也可以通過Nginx來實現。
三種常用的均衡算法:

均衡策略 說明
輪詢 將所有請求依次發送給所有服務器
權重 將所有請求按照權重的比例發送給各服務器
IP_HASH 根據用戶的訪問IP將請求發送給固定的服務器
   server {
        listen 8080;
        server_name localhost;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        location / {
            #這裏的“bal”應與已存在的某一策略名稱一致
            proxy_pass http://bal;
        }
    }
    #配置均衡策略,"bal"爲策略名稱
    upstream bal {
        #輪詢
        server  127.0.0.1:8081;
        server  127.0.0.1:8082;
        server  127.0.0.1:8083;
    }

測試輪詢負載均衡

啓動三臺內容各不相同的Tomcat服務器,分別監聽8081、8082、8083端口。在瀏覽器中訪問服務器8080端口,多次刷新會發現三臺Tomcat依次被訪問: 

如果有Tomcat服務器意外宕機,Nginx能夠檢測Tomcat的狀態,並只將請求發往能夠正常接收請求的服務器(但是不排除能夠接受卻不能返回結果的服務器,這裏可以通過worker_processes設置超時後轉發到另一臺服務器)

權重負載均衡策略

因爲一般情況下,一家公司中的服務器性能不一,使用輪詢式策略會出現資源分配不均的現象,所以權重式的負載均衡策略是開發中最常用的負載策略。

upstream bal {
        server 127.0.0.1:8081 weight=6;
        server 127.0.0.1:8082 weight=1;
        server 127.0.0.1:8083 weight=3;
    }

在地址後加上weight屬性即可,Nginx會根據同一個策略中的中weight值,按照各自值所佔百分比將請求儘量均勻的發送至每一個服務器,值越大的服務器獲得的請求越多。

IP_HASH負載均衡策略

IP_HASH負載均衡策略實現方式非常簡單,在策略中加入ip_hash語句即可,一旦添加ip_hash語句,其他策略將不起作用(即使添加了weight屬性也會按照IP_HASH策略分發請求)。
Nginx服務器將用戶的IP進行hash運算獲得映射值,將特定的IP與特定的服務器綁定,以後該IP的所有請求都會發往該服務器。

upstream bal {
        ip_hash;
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
        server 127.0.0.1:8083;
    }

在分佈式系統環境下,可以利用Session黏着的現象實現Session共享。但這是一種低級的實現方式,因爲不可能所有用戶的IP分佈與真實的服務器性能分佈情況正好吻合,並且在IP可變的情況下因Session黏着現象會導致安全問題。所以這種負載策略一般不會使用,而通過單點登錄的方式實現Session共享。

備用機機制

在某臺服務器後添加backup屬性即可將該服務器設置爲備用機。Nginx一般情況下不會將請求發送給備用機,只有所有的非備用機全部宕機或全部忙碌,沒有非備用機能夠響應新的請求時,纔會將請求發送給備用機,使其承擔一部分壓力。如果非備用機重啓或壓力減小,可以正常處理用戶請求時,則備用機再次處於等待狀態。

upstream bal {
        server 127.0.0.1:8081 weight=6;
        server 127.0.0.1:8082 weight=1 backup;
        server 127.0.0.1:8083 weight=3;
    }

這裏需要注意,備用機機制不能與IP_HASH負載均衡策略一起使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章