Nginx實(shí)現(xiàn)負(fù)載均衡的項(xiàng)目實(shí)踐
一、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ù)增長(zhǎng)的業(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í)間很長(zhǎng),會(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í)間長(zhǎng)短智能地進(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ù)載均衡。因篇幅較長(zhǎng)這里不再做具體的介紹,有興趣的可自行百度。這里以七層負(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 --配置子配置文件
(2)后端服務(wù)器配置
vim /usr/local/nginx/conf/nginx.conf --修改配置文件 vim /usr/local/nginx/html/index.html --添加測(cè)試數(shù)據(jù)
(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ù)載均衡的效果。
當(dāng)我添加權(quán)重(weight)時(shí)
再次訪問http://10.20.151.240/
加權(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í)
再次訪問http://10.20.151.240/
此時(shí)我故意停掉第一臺(tái)后端服務(wù)器,繼續(xù)訪問http://10.20.151.240/
當(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>
總結(jié)
通過上述簡(jiǎn)單案例不難看出負(fù)載均衡的重要性,不管是大中小型企業(yè),都會(huì)用到負(fù)載均衡,尤其是某些大型購物網(wǎng)站,如果不做負(fù)載均衡,估計(jì)剛上線幾分鐘后端服務(wù)器就會(huì)被客戶端的請(qǐng)求給弄癱瘓了。因此Nginx負(fù)載均衡實(shí)現(xiàn)的就是后端服務(wù)器的平均分?jǐn)偪蛻舳说脑L問壓力,同時(shí)借助Nginx的高并發(fā)、高性能、高可靠性等特點(diǎn),對(duì)我們的實(shí)際生產(chǎn)提供了最大化服務(wù)和性能保障。
到此這篇關(guān)于Nginx實(shí)現(xiàn)負(fù)載均衡的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)Nginx 負(fù)載均衡內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Nginx http資源請(qǐng)求限制(三種方法)
這篇文章主要介紹了Nginx http資源請(qǐng)求限制,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05Linux Nginx下SSL證書安裝方法及WordPress CDN配置
這篇文章主要介紹了Linux Nginx下SSL證書安裝方法及WordPress CDN配置,需要的朋友可以參考下2017-08-08Nginx文件下載站點(diǎn)搭建的實(shí)現(xiàn)步驟
本文主要介紹了Nginx文件下載站點(diǎn)搭建的實(shí)現(xiàn)步驟,包含配置Nginx和Fancyindex來搭建文件下載站點(diǎn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02Nginx?Rewrit實(shí)現(xiàn)網(wǎng)頁跳轉(zhuǎn)功能詳細(xì)步驟
Rewrite主要實(shí)現(xiàn)url地址重寫,以及重定向,就是把傳入web的請(qǐng)求重定向到其他url的過程,這篇文章主要介紹了Nginx?Rewrit實(shí)現(xiàn)網(wǎng)頁跳轉(zhuǎn)功能詳細(xì)步驟,需要的朋友可以參考下2024-02-02Nginx+SSL實(shí)現(xiàn)雙向認(rèn)證的示例代碼
這篇文章主要介紹了Nginx+SSL實(shí)現(xiàn)雙向認(rèn)證的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01