天天看點

使用nginx進行負載均衡配置詳細說明

使用nginx進行負載均衡

1. nginx負載均衡介紹

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

下圖為負載均衡示例圖,當使用者請求發送後,首先發送到負載均衡伺服器,而後由負載均衡伺服器根據配置規則将請求轉發到不同的web伺服器上。

使用nginx進行負載均衡配置詳細說明

2. 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;
}