搜尋
首頁運維NginxNginx怎麼使用ngx_http_upstream_module實現負載平衡功能

    負載平衡介紹

    什麼是負載平衡

    負載平衡(Load Balance),意思是將負載(工作任務,訪問請求)進行平衡、分攤到多個操作單元(伺服器,元件)上執行。

    為什麼需要負載平衡

    當單一web伺服器直接面向用戶,可能要承載著大量的並發請求,單一伺服器可能難以負荷,我們需要使用多台web伺服器組成一個集群,利用Nginx負載平衡功能,將請求分發給不同的後端伺服器,實現負載的流量分發,提升整體效能、以及系統的容災能力。

    • 負載平衡與代理有什麼區別

    #代理程式是代理一台伺服器基於URI調度,調度到不同功能的應用節點

    負載平衡是將客戶端請求透過proxy_pass代理到一組upstream資源池

    • #實作負載平衡場景

    ##實現負載均衡功能需要使用兩個模組:

    • proxy_pass:代理模組

    • upstream:虛擬資源池

    範例:一個官方的負載平衡展示

    upstream backend {
        server backend1.example.com       weight=5;
        server backend2.example.com:8080;
        server unix:/tmp/backend3;
    
        server backup1.example.com:8080   backup;
        server backup2.example.com:8080   backup;
    }
    
    server {
        location / {
            proxy_pass http://backend;
        }
    }

    範例:自己完成一個小例子

    upstream node {
        server 192.168.10.3:80;
        server 192.168.10.4:80;
    }
    server {
        listen 80;
        server_name www.yyang.com;
        location / {
            proxy_pass http://node;
            include prxoy_params;
        }
    }

    負載平衡調度演算法

    輪詢調度

    依序逐一分配到不同的後端節點,也是預設演算法。 (簡單來說就是1:1:1)

    加權輪詢考慮到不同伺服器的效能不同,給予節點不同的權值,使其接收對應的權值請求數

    server 192.168.10.3:80 weight=3;
    server 192.168.10.4:80 weight=1;

    以上這個例子是說每4個請求會分配給10.3三個,10.4一個,以此循環。

    ip_hash

    根據使用者請求的IP,對該IP進行hash運算,根據運算的值將請求指派給後端特定的一台節點進行處理。

    取值範圍為ipv4位址的前三個8位元或ipv6的整個位址作為雜湊鍵,確保來自從一個客戶端的IP始終傳遞給同一台伺服器,除非次伺服器不可用。簡單點說,172.16.20.1和172.16.20.2的前三組數字是一樣的(都是172.16.20)

    ip_hash運算公式:hash(ip)%node_counts=index

    ip_hash帶來的問題:

    大量相同IP的請求會造成某個節點流量過大
    如果暫時下線一台節點,會重新計算hash值,建議使用down狀態

    範例:注意ip_hash與權重不可同時使用

    ip_hash;
    server 192.168.10.3:80;
    server 192.168.10.4:80;

    一致性hash

    為了避免上述問題,所以誕生了一致性hash,使用取模的方式,但不對伺服器節點數量取模,而是對2的32次方取模,hash函數值為0​​~2^32-1。 (形成一個虛擬圓環,用戶請求會發給順時針相鄰的節點)

    有一個問題:如果後端節點較少可能會造成資料傾斜,所以一致性hash引入了虛擬節點機制,即對每個伺服器計算多個哈希,每個計算結果位置都放置一個虛擬節點。
    如果我們想使用ip_hash,但計算公式使用一致性hash,該怎麼做?

    hash $remote_addr consistent;
    server 192.168.10.3:80;
    server 192.168.10.4:80;

    url_hash

    根據使用者的url進行hash取模,根據運算值,將請求分配給特定的後端伺服器。

    1.用戶請求nginx負載均衡,透過url演算法,請求調度至cache1

    2.cache1沒有數據,會向後端獲取,返回數據,並將數據緩存
    3.當其他使用者存取相同url時,調度器仍會調度到cache1節點
    4.cache1會直接將資料傳回

    hash $request_uri consistent;
    server 192.168.10.3:80;
    server 192.168.10.4:80;

    least_conn

    #哪台伺服器的連線數最少,就將請求調度到這台伺服器

    least_conn;
    server 192.168.10.3:80;
    server 192.168.10.4:80;

    負載平衡後端節點狀態

    down##將伺服器節點標記為不可用狀態,一般用於停機維護。

    server 192.168.10.3:80 down;
    server 192.168.10.4:80;

    backup

    備用節點,正常情況不會調度到此節點;當正常工作節點全部不可用時,會啟用此節點;當節點恢復時此節點會繼續恢復備用狀態。

    server 192.168.10.3:80;
    server 192.168.10.4:80;
    server 192.168.10.5:80 backup;

    max_conns

    用來限制每個後端節點接收到的最大的TCP連線數,如果超出限制就會拋出錯誤。

    server 192.168.10.3:80 max_conns=10;
    server 192.168.10.4:80 max_conns=10;

    一台可以連接10.兩台是20,超過20就會出錯。

    keepalived

    與後端伺服器啟動緩存,也就是長鏈接,提升網站吞吐量。

    預設不啟用此功能,當有請求時,會建立連接,維護連接,關閉連接,所以會存在網路消耗;但是如果所有連接都快取了,當連接空閒了又會佔用其他系統資源,所以可以使用keepalived參數。

    server 192.168.10.3:80;
    server 192.168.10.4:80;
    
    keepalived 32;   # 最大空闲连接数的个数
    keepalived_timeout 100s; # 空闲连接的超时时间
    
    # 需要配合以下两个参数使用
    
    proxy_http_version 1.1;
    proxy_set_header connection "";

    max_fails與fail_timeout

    max_fails=2:服务器通信失败两次,认为服务器不可用
    fail_timeout=5s:服务器通信失败后,每5秒探测一次服务器是否恢复正常。
    在fail_timeout设定时间内,与服务器连接失败次数达到max_fails数量,则认为服务器不可用。
    如果不设置的话默认是探测一次,间隔10s。

    server 192.168.10.3:80 max_fails=2 fail_timeout=5s;
    server 192.168.10.4:80 max_fails=2 fail_timeout=5s;

    以上是Nginx怎麼使用ngx_http_upstream_module實現負載平衡功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
    NGINX單元:架構及其工作原理NGINX單元:架構及其工作原理Apr 23, 2025 am 12:18 AM

    NGINXUnit通過其模塊化架構和動態重配置功能提高了應用的性能和可管理性。 1)模塊化設計包括主控進程、路由器和應用進程,支持高效管理和擴展。 2)動態重配置允許在運行時無縫更新配置,適用於CI/CD環境。 3)多語言支持通過動態加載語言運行時實現,提升了開發靈活性。 4)高性能通過事件驅動模型和異步I/O實現,即使在高並發下也保持高效。 5)安全性通過隔離應用進程提高,減少應用間相互影響。

    使用NGINX單元:部署和管理應用程序使用NGINX單元:部署和管理應用程序Apr 22, 2025 am 12:06 AM

    NGINXUnit可用於部署和管理多種語言的應用。 1)安裝NGINXUnit。 2)配置它以運行不同類型的應用,如Python和PHP。 3)利用其動態配置功能進行應用管理。通過這些步驟,你可以高效地部署和管理應用,提升項目效率。

    NGINX與Apache:Web服務器的比較分析NGINX與Apache:Web服務器的比較分析Apr 21, 2025 am 12:08 AM

    NGINX更适合处理高并发连接,而Apache更适合需要复杂配置和模块扩展的场景。1.NGINX以高性能和低资源消耗著称,适合高并发。2.Apache以稳定性和丰富的模块扩展闻名,适合复杂配置需求。

    NGINX單元的優勢:靈活性和性能NGINX單元的優勢:靈活性和性能Apr 20, 2025 am 12:07 AM

    NGINXUnit通過其動態配置和高性能架構提升應用的靈活性和性能。 1.動態配置允許在不重啟服務器的情況下調整應用配置。 2.高性能體現在事件驅動和非阻塞架構以及多進程模型上,能夠高效處理並發連接和利用多核CPU。

    NGINX與Apache:性能,可伸縮性和效率NGINX與Apache:性能,可伸縮性和效率Apr 19, 2025 am 12:05 AM

    NGINX和Apache都是強大的Web服務器,各自在性能、可擴展性和效率上有獨特的優勢和不足。 1)NGINX在處理靜態內容和反向代理時表現出色,適合高並發場景。 2)Apache在處理動態內容時表現更好,適合需要豐富模塊支持的項目。選擇服務器應根據項目需求和場景來決定。

    終極攤牌:nginx vs. apache終極攤牌:nginx vs. apacheApr 18, 2025 am 12:02 AM

    NGINX適合處理高並發請求,Apache適合需要復雜配置和功能擴展的場景。 1.NGINX採用事件驅動、非阻塞架構,適用於高並發環境。 2.Apache採用進程或線程模型,提供豐富的模塊生態系統,適合複雜配置需求。

    nginx行動:示例和現實應用程序nginx行動:示例和現實應用程序Apr 17, 2025 am 12:18 AM

    NGINX可用於提升網站性能、安全性和可擴展性。 1)作為反向代理和負載均衡器,NGINX可優化後端服務和分擔流量。 2)通過事件驅動和異步架構,NGINX高效處理高並發連接。 3)配置文件允許靈活定義規則,如靜態文件服務和負載均衡。 4)優化建議包括啟用Gzip壓縮、使用緩存和調整worker進程。

    NGINX單元:支持不同的編程語言NGINX單元:支持不同的編程語言Apr 16, 2025 am 12:15 AM

    NGINXUnit支持多種編程語言,通過模塊化設計實現。 1.加載語言模塊:根據配置文件加載相應模塊。 2.應用啟動:調用語言運行時執行應用代碼。 3.請求處理:將請求轉發給應用實例。 4.響應返回:將處理後的響應返回給客戶端。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版

    VSCode Windows 64位元 下載

    VSCode Windows 64位元 下載

    微軟推出的免費、功能強大的一款IDE編輯器

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

    Dreamweaver Mac版

    Dreamweaver Mac版

    視覺化網頁開發工具

    DVWA

    DVWA

    Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中