首頁 > 軟體

使用nginx進行負載均衡的搭建全過程

2022-08-25 14:05:09

1. nginx負載均衡介紹

nginx應用場景之一就是負載均衡。在存取量較多的時候,可以通過負載均衡,將多個請求分攤到多臺伺服器上,相當於把一臺伺服器需要承擔的負載量交給多臺伺服器處理,進而提高系統的吞吐率;另外如果其中某一臺伺服器掛掉,其他伺服器還可以正常提供服務,以此來提高系統的可伸縮性與可靠性。

下圖為負載均衡範例圖,當用戶請求傳送後,首先傳送到負載均衡伺服器,而後由負載均衡伺服器根據設定規則將請求轉發到不同的web伺服器上。

2. nginx負載均衡策略

以下截圖為nginx官網檔案

nginx內建負載均衡策略主要分為三大類,分別是輪詢、最少連線和ip hash

  • 最少連線

請求分配給活動連線數最少的伺服器,哪臺伺服器連線數最少,則把請求交給哪臺伺服器,由nginx統計伺服器連線數

  • ip hash

基於使用者端ip的分配方式

2.1 輪詢

以迴圈方式分發對應用伺服器的請求,將請求平均分發到每臺伺服器上。

2.1.1 普通輪詢方式

該方式是預設方式,輪詢適合伺服器設定相當,無狀態且短平快的服務使用。另外在輪詢中,如果伺服器掛掉,會自動剔除該伺服器。

http {
    # 定義轉發分配規則
    upstream myapp1 {
        server srv1.com; # 要轉發到的伺服器,如ip、ip:埠號、域名、域名:埠號
        server srv2.com:8088;
        server 192.168.0.100:8088;
    }

    server {
        listen 80; # nginx監聽的埠

        location / {
        	# 使用myapp1分配規則,即剛自定義新增的upstream節點
        	# 將所有請求轉發到myapp1伺服器組中設定的某一臺伺服器上
            proxy_pass http://myapp1; 
        }
    }
}

2.1.2 權重輪詢方式

如果在 upstream 中設定的server引數後追加 weight 設定,則會根據設定的權重進行請求分發。此策略可以與least_conn和ip_hash結合使用,適合伺服器的硬體設定差別比較大的情況。

# 定義轉發分配規則
upstream myapp1 {
	server srv1.com weight=1; # 該臺伺服器接受1/6的請求量
	server srv2.com:8088 weight=2; # 該臺伺服器接受2/6的請求量
	server 192.168.0.100:8088 weight=3; # 該臺伺服器接受3/6的請求量;
}

2.2 最少連線

輪詢演演算法是把請求平均的轉發給各個後端,使它們的負載大致相同;但是,有些請求佔用的時間很長,會導致其所在的後端負載較高。這種情況下,least_conn這種方式就可以達到更好的負載均衡效果,適合請求處理時間長短不一造成伺服器過載的情況。

# 定義轉發分配規則
upstream myapp1 {
	least_conn; # 把請求分派給連線數最少的伺服器
	server srv1.com;
	server srv2.com:8088;
	server 192.168.0.100:8088;
}

2.3 ip hash

這個方法確保了相同的使用者端的請求一直傳送到相同的伺服器,這樣每個訪客都固定存取一個後端伺服器。如使用者需要分片上傳檔案到伺服器下,然後再由伺服器將分片合併,這時如果使用者的請求到達了不同的伺服器,那麼分片將儲存於不同的伺服器目錄中,導致無法將分片合併,該場景則需要使用ip hash策略。

需要注意的是,ip_hash不能與backup同時使用,另外當有伺服器需要剔除,必須手動down掉,此模式適合有狀態服務,比如session。

# 定義轉發分配規則
upstream myapp1 {
	ip_hash; # #保證每個請求固定存取一個後端伺服器
	server srv1.com;
	server srv2.com:8088;
	server 192.168.0.100:8088;
}

3. nginx負載均衡搭建範例

該範例使用一臺nginx作為負載均衡伺服器,兩臺tomcat作為web伺服器;可以把三個服務均在一臺機器進行搭建,也可以使用虛擬機器器虛擬三臺機器,然後進行測試。教學這裡就只在一臺機器進行搭建,採用預設的權重方式進行設定。

3.1 tomcat設定

將兩臺tomcat解壓出來,設定完畢相應的埠,然後在webapps目錄下建立test目錄,然後在test目錄中建立index.html檔案,隨便寫入一些內容,兩臺tomcat中test目錄下的index.html檔案內容要區分開來,例如寫入1111111 / 222222222,如下圖所示。

3.2 nginx設定

首先進行nginx的安裝,安裝教學可以參考

https://www.jb51.net/article/231249.htm

安裝完畢後,進入nginx目錄下的conf目錄,編輯 nginx.conf 檔案,修改內容為在http節點下增加

upstream tomcat { # 該部分內容與 server 節點同級
	server tomcat服務的ip:tomcat服務的埠號;
	server tomcat服務的ip:tomcat服務的埠號;
}

server節點下的location /節點中,把預設的

location / {
	root   html;
	index  index.html index.htm;
}

修改為

location / {
	proxy_pass http://tomcat;
}

然後啟動 兩臺tomcat與nginx服務,在瀏覽器輸入nginx服務的地址:埠,不停重新整理頁面,就可以看到每次請求的伺服器發生了改變。

總結

到此這篇關於使用nginx進行負載均衡的文章就介紹到這了,更多相關nginx負載均衡內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com