熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Nginx負載均衡配置實例詳解

2022-06-13   來源: Java高級技術 
負載均衡是我們大流量網站要做的一個東西下面我來給大家介紹在Nginx服務器上進行負載均衡配置方法希望對有需要的同學有所幫助哦

負載均衡

先來簡單了解一下什麼是負載均衡單從字面上的意思來理解就可以解釋N台服務器平均分擔負載不會因為某台服務器負載高宕機而某台服務器閒置的情況那麼負載均衡的前提就是要有多台服務器才能實現也就是兩台以上即可

測試環境
由於沒有服務器所以本次測試直接host指定域名然後在VMware裡安裝了三台CentOS

測試域名  acom

A服務器IP (主)

B服務器IP

C服務器IP

部署思路
A服務器做為主服務器域名直接解析到A服務器()上由A服務器負載均衡到B服務器()與C服務器()上

域名解析

由於不是真實環境域名就隨便使用一個acom用作測試所以acom的解析只能在hosts文件設置

打開C:WindowsSystemdriversetchosts

在末尾添加

    acom

保存退出然後啟動命令模式ping下看看是否已設置成功

從截圖上看已成功將acom解析到IP

A服務器pstream acom {
      server  :;
      server  :;
}
 
server{
    listen ;
    server_name acom;
    location / {
        proxy_pass         ;
        proxy_set_header   Host             $host;
        proxy_set_header   XRealIP        $remote_addr;
        proxy_set_header   XForwardedFor  $proxy_add_x_forwarded_for;
    }
}

保存重啟nginx

BC服務器nginxconf設置
打開nginxconfi在http段加入以下代碼

server{
    listen ;
    server_name acom;
    index indexhtml;
    root /data/htdocs/www;
}

保存重啟nginx

測試
當訪問acom的時候為了區分是轉向哪台服務器處理我分別在BC服務器下寫一個不同內容的indexhtml文件以作區分

打開浏覽器訪問acom結果刷新會發現所有的請求均分別被主服務器()分配到B服務器()與C服務器()上實現了負載均衡效果

B服務器處理頁面

C服務器處理頁面

假如其中一台服務器宕機會怎樣?
當某台服務器宕機了是否會影響訪問呢?

我們先來看看實例根據以上例子假設C服務器這台機子宕機了(由於無法模擬宕機所以我就把C服務器關機)然後再來訪問看看

訪問結果

我們發現雖然C服務器()宕機了但不影響網站訪問這樣就不會擔心在負載均衡模式下因為某台機子宕機而拖累整個站點了

如果bcom也要設置負載均衡怎麼辦?
很簡單跟acom設置一樣如下

假設bcom的主服務器IP是負載均衡到機器上

現將域名bcom解析到IP上

在主服務器()的nginxconf加入以下代碼

upstream bcom {
      server  :;
      server  :;
}
 
server{
    listen ;
    server_name bcom;
    location / {
        proxy_pass         ;
        proxy_set_header   Host             $host;
        proxy_set_header   XRealIP        $remote_addr;
        proxy_set_header   XForwardedFor  $proxy_add_x_forwarded_for;
    }
}
保存重啟nginx

機器上設置nginx打開nginxconf在末尾添加以下代碼

server{
    listen ;
    server_name bcom;
    index indexhtml;
    root /data/htdocs/www;
}

保存重啟nginx

完成以後步驟後即可實現bcom的負載均衡配置

主服務器不能提供服務嗎?
以上例子中我們都是應用到了主服務器負載均衡到其它服務器上那麼主服務器本身能不能也加在服務器列表中這樣就不會白白浪費拿一台服務器純當做轉發功能而是也參與到提供服務中來

如以上案例三台服務器

A服務器IP (主)

B服務器IP

C服務器IP

我們把域名解析到A服務器然後由A服務器轉發到B服務器與C服務器那麼A服務器只做一個轉發功能現在我們讓A服務器也提供站點服務

我們先來分析一下如果添加主服務器到upstream中那麼可能會有以下兩種情況發生

主服務器轉發到了其它IP上其它IP服務器正常處理

主服務器轉發到了自己IP上然後又進到主服務器分配IP那裡假如一直分配到本機則會造成一個死循環

怎麼解決這個問題呢?因為端口已經用來監聽負載均衡的處理那麼本服務器上就不能再使用端口來處理acom的訪問請求得用一個新的於是我們把主服務器的nginxconf加入以下一段代碼

server{
    listen ;
    server_name acom;
    index indexhtml;
    root /data/htdocs/www;
}
 
重啟nginx在浏覽器輸入acom:試試看能不能訪問結果可以正常訪問

既然能正常訪問那麼我們就可以把主服務器添加到upstream中但是端口要改一下如下代碼

upstream acom {
      server  :;
      server  :;
      server  :;
}

由於這裡可以添加主服務器IP或者均可以都表示訪問自己

重啟Nginx然後再來訪問acom看看會不會分配到主服務器上

主服務器也能正常加入服務了

最後
負載均衡不是nginx獨有著名鼎鼎的apache也有但性能可能不如nginx

多台服務器提供服務但域名只解析到主服務器而真正的服務器IP不會被ping下即可獲得增加一定安全性

upstream裡的IP不一定是內網外網IP也可以不過經典的案例是局域網中某台IP暴露在外網下域名直接解析到此IP然後又這台主服務器轉發到內網服務器IP中

某台服務器宕機不會影響網站正常運行Nginx不會把請求轉發到已宕機的IP上



From:http://tw.wingwit.com/Article/program/Java/gj/201405/30818.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.