5.Nginx-upstream負載均衡

upstream負載均衡

語法規則

upstream *name* { … }

Default:——
Context:http

定義一組服務器。服務器可以偵聽不同的端口(可以混合偵聽TCP和UNIX域套接字的服務器)

http{
    # backend是虛擬服務的名字,可自行定義
    upstream backend {
        server backend1.example.com weight=5;
        server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
        server backup1.example.com  backup;
	}
    server {
        listen 80;
        server_name dh
        
        location / {
            # 這裏的proxy_pass的http://後面的部分要配置成 upstream的服務名稱
        	proxy_pass http://dh;
    	}
    }
    
    upstream dh {
        server localhost:8088;
        server localhost:8089;
    }
}

服務器在負載均衡調度的狀態

調度狀態 狀態解析
down 當前的server暫時不參與負載均衡
backup 預留的備份服務器
max_fails 允許請求失敗的次數
fail_timeout 經過max_fails的失敗次數後,服務暫停的時間
max_conns 限制最大的接收的連接數
upstream dh {
    # 負載均衡不會分配到 dh1.com 這臺機子
    server dh1.com down;
    # 預留備份即其他參與負載均衡的機子都提供不了服務的時候
    # 預留的機子就會頂上,由預留機子提供服務直到其他機子其中一個恢復
    # 當其他提供服務的機子恢復後,該機子會自動變回預留狀態,從而由其他機子提供服務
    server dh2.com backup;
    # 表示允許失敗的次數是10次,十次調用失敗後,需要等待30s再重新檢查該機子
    server dh3.com max_fails=10 fail_timeout=30s;
    server dh4.com max_conns=1000;
}

調度算法

算法名稱 算法原理
輪詢 按時間順序逐一分配到不同的後端服務器
加權輪詢 weight值越大,分配到的訪問機率越高
ip_hash 每個請求按訪問IP的hash結果分配,這樣來自同一個IP的請求將會固定訪問一個後端服務器
url_hash 按照訪問URL的hash結果來分配請求,這樣每個URL定向到同一個後端服務器
least_conn 最少連接數,哪個機器的連接數少就分發給哪個機器
hash關鍵數值 hash自定義的key來分發請求
# 加權方式(weight默認是1)
upstream dh {
    server dh1.com down weight=8;
    server dh2.com backup weight=6;
    server dh3.com max_fails=10 fail_timeout=30s weight=1;
}

# ip_hash方式
upstream dh {
    ip_hash;
    
    server dh1.com down;
    server dh2.com backup;
    server dh3.com max_fails=10 fail_timeout=30s;
}

# url_hash方式 (其實也就是採用了hash 關鍵字的形式)
upstream dh {
    hash $request_uri;
    
    server dh1.com down;
    server dh2.com backup;
    server dh3.com max_fails=10 fail_timeout=30s;
}

#  least_conn方式
# 指定組應使用負載平衡方法,其中請求以最少數量的活動連接傳遞給服務器
#同時考慮服務器的權重。如果有多個這樣的服務器,則使用加權循環平衡方法依次嘗試它們
upstream dh {
    least_conn;
    
    server dh1.com down;
    server dh2.com backup;
    server dh3.com max_fails=10 fail_timeout=30s;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章