溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

發(fā)布時(shí)間:2022-03-18 13:35:24 來源:億速云 閱讀:189 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“Nginx怎樣實(shí)現(xiàn)負(fù)載均衡”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Nginx怎樣實(shí)現(xiàn)負(fù)載均衡”這篇文章吧。

    一、Nginx介紹

    Nginx是一款高性能的Http和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP服務(wù)器(電子郵件代理),最早開發(fā)這個(gè)產(chǎn)品的目的之一也是作為郵件代理服務(wù)器。因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗及其高并發(fā)性能強(qiáng)而廣泛應(yīng)用于各種生產(chǎn)部署之中。而且nginx是基于事件驅(qū)動(dòng)模型(epoll)實(shí)現(xiàn)的I/O多路復(fù)用,并通過異步、非阻塞的方式處理請(qǐng)求。在高連接并發(fā)的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品。而我們?yōu)槭裁匆x擇Nginx呢?

    二、Nginx特點(diǎn)

    • 高并發(fā)、高性能;

    • 高可靠(可以7*24小時(shí)不間斷運(yùn)行);

    • 可擴(kuò)展性強(qiáng)(高度模塊化設(shè)計(jì),添加模塊平穩(wěn));

    • 作為 Web 服務(wù)器:相比 Apache,Nginx 使用更少的資源,支持更多的并發(fā)連接;

    • 作為負(fù)載均衡服務(wù)器:可以進(jìn)行自定義配置,支持虛擬主機(jī)、支持URL重定向、支持網(wǎng)絡(luò)監(jiān)控等。

    • Nginx 安裝非常的簡(jiǎn)單,配置文件 非常簡(jiǎn)潔(還能夠支持perl語法),Bugs少;

    • 處理靜態(tài)文件,索引文件以及自動(dòng)索引;

    • 反向代理加速(無緩存),簡(jiǎn)單的負(fù)載均衡和容錯(cuò);

    • 支持熱部署(可在不停止服務(wù)器的情況下升級(jí)nginx)。

    這就是為什么要選擇Nginx的原因。而且Nginx的功能特點(diǎn)還不止這些,上面只是簡(jiǎn)單列舉了幾點(diǎn)常見功能。

    三、Nginx負(fù)載均衡

    在我們實(shí)際生產(chǎn)中,一臺(tái)服務(wù)器的處理能力、存儲(chǔ)空間是有限的, 不要企圖去換更強(qiáng)大的服務(wù)器,對(duì)大型網(wǎng)站而言,不管多么強(qiáng)大的服務(wù)器,都滿足不了網(wǎng)站持續(xù)增長的業(yè)務(wù)需求。這種情況下,更恰當(dāng)?shù)淖龇ㄊ窃黾右慌_(tái)服務(wù)器來分擔(dān)原有服務(wù)器的訪問及存儲(chǔ)壓力。實(shí)際上這就是我們所謂的負(fù)載均衡,Nginx作為負(fù)載均衡服務(wù)器,它通過反向代理來對(duì)后端多臺(tái)服務(wù)器負(fù)載均衡。首先來說一下Nginx負(fù)載均衡策略及負(fù)載均衡算法。

    3.1 認(rèn)識(shí) upstream 模塊

    upstream 這個(gè)模塊是寫一組被代理的服務(wù)器地址(即定義的后端服務(wù)器列表中選取一臺(tái)服務(wù)器接受用戶的請(qǐng)求 ),然后配置負(fù)載均衡的算法。 來看一下最基本的負(fù)載均衡實(shí)例:

    upstream test { 
          server 10.20.151.114:80;
          server 10.20.151.115:80;
    }
    server {
          ....
          location / {         
                 proxy_pass  http://test;     --請(qǐng)求轉(zhuǎn)向 test 定義的服務(wù)器列表         
          }

    3.2 Nginx負(fù)載均衡策略

    (1)輪詢

    最基本的配置方法,上面的例子就是輪詢的方式,它是upstream模塊默認(rèn)的負(fù)載均衡默認(rèn)策略。每個(gè)請(qǐng)求會(huì)按時(shí)間順序逐一分配到不同的后端服務(wù)器。

    upstream test { 
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }

    (2)ip_hash

    每個(gè)請(qǐng)求按訪問IP的hash結(jié)果分配,同一個(gè)IP客戶端固定訪問一個(gè)后端服務(wù)器。可以保證來自同一ip的請(qǐng)求被打到固定的機(jī)器上,可以解決session問題。

    upstream test { 
    	  ip_hash;  --同一個(gè)IP客戶端固定訪問一個(gè)后端服務(wù)器
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }

    (3)url_hash

    按訪問url的hash結(jié)果來分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器。一旦緩存住了資源,再此收到請(qǐng)求,就可以從緩存中讀取。

    upstream test { 
    	  hash $request_uri;  --實(shí)現(xiàn)每個(gè)url定向到同一個(gè)后端服務(wù)器
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }

    (4)least_conn

    把請(qǐng)求轉(zhuǎn)發(fā)給連接數(shù)較少的后端服務(wù)器。輪詢算法是把請(qǐng)求平均的轉(zhuǎn)發(fā)給各個(gè)后端,使它們的負(fù)載大致相同;但是,有些請(qǐng)求占用的時(shí)間很長,會(huì)導(dǎo)致其所在的后端負(fù)載較高。這種情況下,least_conn這種方式就可以達(dá)到更好的負(fù)載均衡效果。

    upstream test { 
    	  least_conn;  --把請(qǐng)求轉(zhuǎn)發(fā)給連接數(shù)較少的后端服務(wù)器
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
    }

    (5)weight

    權(quán)重方式,在輪詢策略的基礎(chǔ)上指定輪詢的幾率。

    upstream test { 
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;  --輪詢的幾率相對(duì)上一條要大
    }

    (6)fair

    此種算法可以依據(jù)頁面大小和加載時(shí)間長短智能地進(jìn)行負(fù)載均衡,也就是根據(jù)后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。

    upstream test { 
          server 10.20.151.114:80; weight=1;
          server 10.20.151.115:80; weight=2;
          fair;  --實(shí)現(xiàn)響應(yīng)時(shí)間短的優(yōu)先分配
    }

    nginx負(fù)載均衡配置狀態(tài)參數(shù)

    • down:表示當(dāng)前的server暫時(shí)不參與負(fù)載均衡。

    • backup:預(yù)留的備份機(jī)器。當(dāng)其他所有的非backup機(jī)器出現(xiàn)故障或者忙的時(shí)候,才會(huì)請(qǐng)求backup機(jī)器,因此這臺(tái)機(jī)器的壓力最輕。

    • max_fails:允許請(qǐng)求失敗的次數(shù),默認(rèn)為1。當(dāng)超過最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤。

    • fail_timeout:在經(jīng)歷了max_fails次失敗后,暫停服務(wù)的時(shí)間單位秒。max_fails可以和fail_timeout一起使用。

    Nginx可分為二層、三層、四層、七層負(fù)載均衡。 所謂的二層就是基于MAC地址的負(fù)載均衡, 三層就是基于IP地址的負(fù)載均衡,四層就是基于IP+端口的負(fù)載均衡,七層就是基于URL等應(yīng)用層信息的負(fù)載均衡。因篇幅較長這里不再做具體的介紹,有興趣的可自行百度。這里以七層負(fù)載均衡來做實(shí)例。

    3.3 Nginx負(fù)載均衡實(shí)例

    環(huán)境準(zhǔn)備:準(zhǔn)備3臺(tái)Nginx服務(wù)器,一臺(tái)作為負(fù)載均衡服務(wù)器,其它兩臺(tái)作為后端服務(wù)器。

    10.20.151.240 ----proxy_server(負(fù)載均衡服務(wù)器)

    10.20.151.112 ----server1(后端服務(wù)器1)

    10.20.151.113 ----server2(后端服務(wù)器2)

    (1)負(fù)載均衡服務(wù)器配置

    vim /etc/nginx/nginx.conf        --配置主配置文件
    vim /etc/nginx/conf.d/test.conf  --配置子配置文件

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    (2)后端服務(wù)器配置

    vim /usr/local/nginx/conf/nginx.conf    --修改配置文件
    vim /usr/local/nginx/html/index.html    --添加測(cè)試數(shù)據(jù)

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    (3)負(fù)載均衡測(cè)試

    在瀏覽器端訪問http://10.20.151.240/,在實(shí)際生產(chǎn)中,這兩個(gè)頁面返回的結(jié)果是一樣的,這里是為了測(cè)試效果,所以返回了不同的內(nèi)容。而為什么刷新后又會(huì)返回不同結(jié)果呢?那是因?yàn)樨?fù)載均衡默認(rèn)的均衡策略(或算法)是輪詢,所以每刷新一次就會(huì)從不同的后端服務(wù)器返回不同的請(qǐng)求結(jié)果,減輕單個(gè)后端服務(wù)器的訪問量,提升客戶端的訪問效率,從而達(dá)到負(fù)載均衡的效果。

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    當(dāng)我添加權(quán)重(weight)時(shí)

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    再次訪問http://10.20.151.240/

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    加權(quán)重和沒加權(quán)重有什么區(qū)別呢?在實(shí)際生產(chǎn)中,我們一般會(huì)將配置較高的服務(wù)器的權(quán)重設(shè)置高一點(diǎn),其實(shí)就是客戶端在訪問時(shí),權(quán)重較高的服務(wù)器會(huì)被多次請(qǐng)求,這樣能減輕配置較低的服務(wù)器的請(qǐng)求量,從而更好的實(shí)現(xiàn)負(fù)載均衡。

    當(dāng)我添加backup狀態(tài)參數(shù)時(shí)

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    再次訪問http://10.20.151.240/

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    此時(shí)我故意停掉第一臺(tái)后端服務(wù)器,繼續(xù)訪問http://10.20.151.240/

    Nginx怎樣實(shí)現(xiàn)負(fù)載均衡

    當(dāng)我給113這臺(tái)后端服務(wù)器添加backup后,它就會(huì)作為熱備服務(wù)器,添加的主要目的就是當(dāng)我其他后端服務(wù)器都宕機(jī)的情況下,我的熱備服務(wù)器還能繼續(xù)提供同樣的服務(wù)(注意:在其他后端服務(wù)器還未宕機(jī)之前,該熱備服務(wù)器是不工作的)。因此負(fù)載均衡不僅能達(dá)到各個(gè)后端服務(wù)器負(fù)載的均衡,同時(shí)通過配置相關(guān)轉(zhuǎn)態(tài)參數(shù)還能保證客戶端請(qǐng)求時(shí)不造成服務(wù)器宕機(jī)的情況,保證了后端服務(wù)器的穩(wěn)定性。其他狀態(tài)參數(shù)這里我不再做演示(因?yàn)榕渲梅绞蕉家粯樱?/p>

    以上是“Nginx怎樣實(shí)現(xiàn)負(fù)載均衡”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI