二層負載均衡是經過改寫報文的目標MAC地址爲上游服務器MAC地址,源IP地址和目標IP地址是沒有變的nginx
四層負載均衡是根據端口將報文轉發到上游服務器算法
七層負載均衡是根據端口號和應用層協議,轉發報文到上游服務器緩存
upstream配置服務器
經過nginx的http指令下的upstream配置上游服務器架構
1 IP地址和端口負載均衡
2 權重分佈式
負載均衡算法代理
1 round-robin:輪詢進程
2 ip_hash:相同ip負載均衡到同一個upstreamip
3 hash key:哈希算法和一致性哈希算法
4 least_conn:將請求負載均衡到最少活躍鏈接的上游服務器
5 least_time:最小平均響應時間進行負載均衡
失敗重試
配置max_fails和fail_timeout,當fail_timeout時間內失敗了max_fails次請求,則認爲服務器不可用,而後fail_timeout時間後再次將該服務器加入
健康檢查
1 TCP心跳檢查
2 HTTP心跳檢查
其餘配置
1 域名上游服務器
在nginx解析配置文件的階段將域名解析成IP地址並保存,可是域名對應IP變化時,該upstream不會更新
2 備份上游服務器
當主服務器不存活時,纔會發給備服務器
3 不可用上游服務器
長鏈接
keepalive指令配置長鏈接數量,指每一個worker進程與上游服務器可緩存的空閒鏈接的最大數量,超過此數量,最近最少使用的鏈接將被關閉。
此指令不限制worker進程與上游服務器的總鏈接
HTTP反向代理示例
HTTP動態負載均衡
將upstream動態註冊到nginx上,從而實現upstream服務的自動發現
Consul是一款開源的分佈式服務註冊與發現系統,
實現架構:
1 consul+cousul-template
(1)upstream啓動,經過管理後臺向consule註冊服務
(2)在nginx上啓動consul-template agent,監聽服務變動
(3)動態修改upstream列表
(4)重啓nginx
2 consul+openResty
(1)經過Consul管理後臺註冊服務
(2)nginx啓動,拉取配置,更新到共享字典。經過定時器,按期去拉取配置
(3)使用共享字典的upstream列表進行動態負載均衡
nginx四層負載均衡
1 靜態負載均衡
配置在stream指令下
2 動態負載均衡