需要學(xué)會的Nginx知識——負載均衡和緩存

操作系統(tǒng):CentOS-7.8
nginx版本:1.18.0
Tomcat版本:9.0.36

在上一篇文章中我們對Nginx進行了簡單介紹薪贫,也學(xué)習(xí)了nginx的基本配置和操作恍箭,今天這次我們將學(xué)習(xí)Nginx在生產(chǎn)中常被使用的功能負載均衡和緩存加速。上一篇文章《需要學(xué)會的Nginx知識》

一瞧省、概念

1.OSI七層網(wǎng)絡(luò)模型

OSI七層網(wǎng)絡(luò)模型是國際標準化組織(ISO)制定的一個用于計算機或通信系統(tǒng)間互聯(lián)的標準體系

應(yīng)用層扯夭。網(wǎng)絡(luò)服務(wù)與最終用戶的一個接口鳍贾,與用戶交互

應(yīng)用層是與用戶最近的一層,應(yīng)用層為用戶提供了交互接口交洗,以此來為用戶提供交互服務(wù)骑科。在這一層常用的協(xié)議有HTTP,HTTPS构拳,F(xiàn)TP咆爽,POP3等。

表示層置森。數(shù)據(jù)的表示伍掀、安全、壓縮

表示層提供數(shù)據(jù)格式編碼以及加解密功能暇藏,確保從請求端發(fā)出的數(shù)據(jù)到響應(yīng)端能被識別蜜笤。

會話層。創(chuàng)建盐碱、管理和銷毀會話

會話存在于從請求發(fā)出到接受響應(yīng)這個過程之間把兔,會話層充當這一過程的管理者,包括會話創(chuàng)建瓮顽、維持到銷毀

傳輸層县好。定義傳輸數(shù)據(jù)的協(xié)議端口號,以及流控和差錯校驗等功能

傳輸層創(chuàng)建以及管理端到端的連接暖混,提供數(shù)據(jù)傳輸服務(wù)缕贡。在傳輸層常見的協(xié)議是TCP、UDP協(xié)議

網(wǎng)絡(luò)層拣播。進行邏輯地址尋址晾咪,實現(xiàn)不同網(wǎng)絡(luò)之間的路徑選擇

網(wǎng)絡(luò)層也被稱為IP層,在網(wǎng)絡(luò)層中通過IP尋址來建立兩個節(jié)點之間的連接贮配,選擇合適的路由和交換節(jié)點谍倦,正確無誤地按照地址將數(shù)據(jù)傳送給目的端的運輸層。

數(shù)據(jù)鏈路層泪勒。建立邏輯連接昼蛀、進行硬件地址尋址、差錯校驗圆存,提供介質(zhì)訪問和鏈路管理

數(shù)據(jù)鏈路層會提供計算機MAC地址叼旋,通信的時候會攜帶,為了確保數(shù)據(jù)的正確投遞沦辙,會對MAC地址進行校驗夫植,以保證請求響應(yīng)的可靠性

物理層。傳輸介質(zhì)怕轿,物理媒介

物理層是端到端通信過程的物理介質(zhì)偷崩,實際最終信號的傳輸都是通過物理層實現(xiàn)的辟拷。常用設(shè)備有(各種物理設(shè)備)集線器阐斜、中繼器隅俘、調(diào)制解調(diào)器杀狡、網(wǎng)線膳凝、雙絞線休玩、同軸電纜等永部,這些都是物理層的傳輸介質(zhì)凫佛。

2.負載均衡

負載均衡是指將負載(工作任務(wù))進行平衡衫画、分攤到多個操作單元上進行運行,在網(wǎng)絡(luò)應(yīng)用中就是根據(jù)請求的信息不同,來決定怎么樣轉(zhuǎn)發(fā)流量糙麦。

負載均衡建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上魄缚,它提供了一種廉價有效透明的方法擴展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量焚廊、加強網(wǎng)絡(luò)數(shù)據(jù)處理能力鲜滩、提高網(wǎng)絡(luò)的靈活性和可用性。

在OSI七層網(wǎng)絡(luò)模型的基礎(chǔ)上节值,負載均衡也有不同的分類徙硅,主要有以下幾種

  • 二層負載:基于MAC地址,通過一個虛擬MAC地址接受請求搞疗,然后再分配到真實的MAC地址嗓蘑。

  • 三層負載:基于IP地址,通過一個虛擬IP地址匿乃,然后再分配到真實的IP桩皿。

  • 四層負載:基于IP和端口,通過虛機的IP+端口接收請求幢炸,然后再分配到真實的服務(wù)器泄隔,LVS是典型的四層負載均衡應(yīng)用

  • 七層負載:基于應(yīng)用信息,通過虛機主機名或者URL接收請求宛徊,再根據(jù)一些規(guī)則分配到真實的服務(wù)器佛嬉,nginx就是典型的七層負載均衡應(yīng)用

二、配置

1闸天、負載均衡策略

輪詢

輪詢策略下暖呕,所有上游服務(wù)器被訪問到的概率是一致的,且是按照一定的順序依次被請求到苞氮。如下示例配置湾揽,hdh100:9001、hdh100:9002和hdh100:9003三臺tomcat服務(wù)器依次被請求,每刷新一次就切換一次库物。


#上游tomcat集群
upstream www.learn.com{
        server hdh100:9001;
        server hdh100:9002;
        server hdh100:9003;
}

#反向代理服務(wù)器
server {
        listen 80;
        server_name www.learn.com;

        location / {
                proxy_pass http://www.learn.com;
        }
}

加權(quán)輪詢

加權(quán)輪詢策略下霸旗,是按照每個上游服務(wù)器分配的權(quán)重不同處理的連接數(shù)也不同,權(quán)重越大戚揭,被訪問到的次數(shù)就越多定硝。如下示例配置,hdh100:9001毫目、hdh100:9002和hdh100:9003的權(quán)重分別是1蔬啡,3,5镀虐,權(quán)重越大箱蟆,被分配的流量就越多。


#上游tomcat集群刮便,后面weight就是配置權(quán)重空猜,在設(shè)置weight時,默認權(quán)重是1
upstream www.learn.com{
        server hdh100:9001 weight=1;
        server hdh100:9002 weight=3;
        server hdh100:9003 weight=5;
}

#反向代理服務(wù)器
server {
        listen 80;
        server_name www.learn.com;

        location / {
                proxy_pass http://www.learn.com;
        }
}

ip_hash

ip_hash是根據(jù)用戶的ip進行hash散列將其請求分配到指定上游服務(wù)器恨旱。在用戶ip沒有發(fā)生變化的情況下辈毯,且上游服務(wù)器無變更時狈网,用戶的多次請求都會被轉(zhuǎn)發(fā)到同一臺上游服務(wù)器站玄。

且在使用ip_hash負責(zé)均衡策略時,如果需要臨時刪除其中一臺服務(wù)器介袜,則應(yīng)使用down參數(shù)對其進行標記仪芒,以便保留客戶端IP地址的當前哈希值唁影。


upstream www.learn.com{
       ip_hash;
       
        server hdh100:9001 weight=1;
        server hdh100:9002 weight=3;
        server hdh100:9003 weight=5;
}

url_hash

url_hash策略是根據(jù)url進行hash散列將其請求分配到指定的上游服務(wù)器。同一個url在上游服務(wù)器沒有發(fā)生變更的情況下是請求到同一臺服務(wù)器掂名。


upstream www.learn.com{
       hash $request_uri;
       
        server hdh100:9001 weight=1;
        server hdh100:9002 weight=3;
        server hdh100:9003 weight=5;
}

last_conn

last_conn將流量分發(fā)到當前連接數(shù)最少的服務(wù)器上的一個策略


upstream www.learn.com{
       least_conn;
       
        server hdh100:9001 weight=1;
        server hdh100:9002 weight=3;
        server hdh100:9003 weight=5;
}


2据沈、優(yōu)化配置

max_conns

限制上游服務(wù)器的最大連接數(shù),用于保護避免過載饺蔑,可以起到限流的作用锌介,在nginx1.11.5之前,該配置只能作用于商業(yè)版本的nginx猾警,默認值是0表示沒有限制孔祸,配置如下:


#上游服務(wù)器配置,每個服務(wù)器都可以設(shè)置max_conns
upstream www.learn.com{
        server hdh100:9001 max_conns=200;
        server hdh100:9002 max_conns=200;
        server hdh100:9003 max_conns=200;
}

slow_start

緩慢開始肿嘲,當我們給上游服務(wù)器設(shè)置權(quán)重時融击,在配置了slow_start的情況下,該服務(wù)的權(quán)重是從0在配置的時間內(nèi)慢慢增長到所配置的權(quán)重雳窟,該配置目前是在商業(yè)版本的nginx中生效

  • slow_start不適用hash和random load balancing

  • 上游服務(wù)器只有一臺的情況下,該參數(shù)也無效

如下配置則表示hdh100:9003這個服務(wù),在啟動后的60s內(nèi)權(quán)重是從0慢慢提升到5封救。


#上游服務(wù)器配置拇涤,給hdh100:9003配置了權(quán)重5和slow_start 60s,則在集群啟動后該服務(wù)器的權(quán)重是在60s的時間內(nèi)慢慢從0變?yōu)?
upstream www.learn.com{
        server hdh100:9001 weight=1;
        server hdh100:9002 weight=3;
        server hdh100:9003 weight=5 slow_start=60s;
}


down和backup

down是將標記的服務(wù)器移除當前的服務(wù)器集群誉结,被標記的服務(wù)器不會被訪問到鹅士。

backup表示的是備用的意思,即在其他服務(wù)器可以提供服務(wù)的時候被backup標記的服務(wù)器不會被訪問到惩坑,當其他服務(wù)器都掛掉后掉盅,backup標記的服務(wù)開始提供服務(wù)。


#down配置示例以舒,如下配置趾痘,則hdh100:9001這臺服務(wù)器是不能提供服務(wù)的,不會被分配流量
upstream www.learn.com{
        server hdh100:9001 down;
        server hdh100:9002;
        server hdh100:9003;
}

#backup配置示例蔓钟,如下配置永票,在hdh100:9002和hdh100:9003正常服務(wù)的時候,hdh100:9001不會提供服務(wù)滥沫,僅當另外兩臺服務(wù)都掛掉后侣集,hdh100:9001開始提供服務(wù)
upstream www.learn.com{
        server hdh100:9001 backup;
        server hdh100:9002;
        server hdh100:9003;
}


max_fails和fail_timeout

max_fails是一個驗證服務(wù)器是否能提供正常服務(wù)的校驗,需結(jié)合fail_timeout使用兰绣,表示在一定時間段內(nèi)請求當前服務(wù)失敗的次數(shù)超過該值時世分,則認為該服務(wù)宕機失敗掉,就將該服務(wù)剔除上游服務(wù)器集群缀辩,不再給其分配訪問流量罚攀。

fail_timeout表示失敗服務(wù)的重試時間,即當該服務(wù)器被認為宕機失敗時雌澄,間隔指定時間后再來重新嘗試請求斋泄,如果仍請求失敗則繼續(xù)間隔指定時間再嘗試請求,一直重復(fù)這種行為


#如下是示例配置镐牺,表示在30s的時間內(nèi)請求hdh100:9001的失敗次數(shù)超過10次時炫掐,則認為hdh100:9001服務(wù)宕機,則隨后的30s內(nèi)該服務(wù)器不再被分配請求睬涧,30s后會重新嘗試請求該服務(wù)器募胃,若仍然請求失敗,則重復(fù)上述行為
upstream www.learn.com{
        server hdh100:9001 max_fails=10 fail_timeout=30s;
        server hdh100:9002;
        server hdh100:9003;
}

keepalive

設(shè)置nginx和上游服務(wù)器直接保持的長連接數(shù)量畦浓,目的是為了減少創(chuàng)建連接和關(guān)閉連接的損耗


#如下示例痹束,設(shè)置保持的長連接數(shù)量為32
upstream www.learn.com{
        server hdh100:9001 max_fails=10 fail_timeout=30s;
        server hdh100:9002;
        server hdh100:9003;
        
        keepalive 32
}

#設(shè)置http版本為1.1,默認是http1.0版本是短連接
#設(shè)置Connection header為空
server {
        listen 80;
        server_name www.learn.com;

        location / {
                proxy_pass http://www.learn.com;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
        }
}


3讶请、緩存配置

nginx緩存

瀏覽器中的緩存加快單個用戶瀏覽器的訪問的速度祷嘶,緩存是存在瀏覽器本地。


location / {
            root   html;
            index  index.html;
            
            #設(shè)置緩存過期時間為10s
            # expires 10s;
            #設(shè)置具體到期時間,如下示例代表緩存過期時間為晚上10點30分時
         # expires @22h30m;
         #設(shè)置過期時間為現(xiàn)在的前一個小時论巍,則代表不使用緩存
         # expires -1h;
         #設(shè)置不使用緩存
         # expires epoch;
         # nginx關(guān)閉expires烛谊,則緩存機制是根據(jù)瀏覽器而定的
         # expires off;
         #設(shè)置緩存過期時間最大
         # expires max;
        }
        

nginx反向代理緩存

反向代理緩存是將,要代理的上游服務(wù)器的數(shù)據(jù)緩存在nginx端嘉汰,目的是為了提升訪問nginx端的用戶的訪問速度


#proxy_cache_path 設(shè)置存儲存儲目錄
#keys_zone 設(shè)置名稱以及共享內(nèi)存大小
#max_size 設(shè)置緩存大小
#inactive設(shè)置緩存過期時間丹禀,超過該時間則被清理
#use_temp_path設(shè)置是否使用臨時目錄,默認是使用鞋怀,在這里設(shè)置關(guān)閉
proxy_cache_path /home/local/cache  keys_zone=learncache:5m max_size=2g inactive=60s use_temp_path=off;

server {
        listen 80;
        server_name www.learn.com;

       #開啟緩存
       proxy_cache learncache;
       #對200和304狀態(tài)的請求設(shè)置緩存過期時間
       proxy_cache_valid 200 304 1h;

        location / {
                proxy_pass http://www.learn.com;
        }
}


個人公眾號【愛做夢的錘子】双泪,全網(wǎng)同id,個站 http://te-amo.site密似,歡迎關(guān)注焙矛,里面會分享更多有用知識,還有我的私密照片

覺得不錯就點個贊叭QAQ

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辛友,一起剝皮案震驚了整個濱河市薄扁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌废累,老刑警劉巖邓梅,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異邑滨,居然都是意外死亡日缨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門掖看,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匣距,“玉大人,你說我怎么就攤上這事哎壳∫愦” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵归榕,是天一觀的道長尸红。 經(jīng)常有香客問我,道長刹泄,這世上最難降的妖魔是什么外里? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮特石,結(jié)果婚禮上盅蝗,老公的妹妹穿的比我還像新娘。我一直安慰自己姆蘸,他們只是感情好墩莫,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布芙委。 她就那樣靜靜地躺著,像睡著了一般贼穆。 火紅的嫁衣襯著肌膚如雪题山。 梳的紋絲不亂的頭發(fā)上兰粉,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天故痊,我揣著相機與錄音,去河邊找鬼玖姑。 笑死愕秫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的焰络。 我是一名探鬼主播戴甩,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闪彼!你這毒婦竟也來了甜孤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤畏腕,失蹤者是張志新(化名)和其女友劉穎缴川,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體描馅,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡把夸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铭污。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恋日。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嘹狞,靈堂內(nèi)的尸體忽然破棺而出岂膳,到底是詐尸還是另有隱情,我是刑警寧澤磅网,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布谈截,位于F島的核電站,受9級特大地震影響知市,放射性物質(zhì)發(fā)生泄漏傻盟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一嫂丙、第九天 我趴在偏房一處隱蔽的房頂上張望娘赴。 院中可真熱鬧,春花似錦跟啤、人聲如沸诽表。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竿奏。三九已至袄简,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泛啸,已是汗流浹背绿语。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留候址,地道東北人吕粹。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像岗仑,于是被迫代替她去往敵國和親匹耕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354