自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Nginx基于TCP/UDP端口的四層負(fù)載均衡(Stream模塊)配置梳理

網(wǎng)絡(luò) 通信技術(shù)
在關(guān)系數(shù)據(jù)庫(kù)中,索引是一種單獨(dú)的、物理的對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種存儲(chǔ)結(jié)構(gòu),它是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁(yè)的邏輯指針清單。

HTTP負(fù)載均衡,也就是我們通常所有"七層負(fù)載均衡",工作在第七層"應(yīng)用層"。而TCP負(fù)載均衡,就是我們通常所說(shuō)的"四層負(fù)載均衡",工作在"網(wǎng)絡(luò)層"和"傳輸層"。例如,LVS(Linux Virtual Server,Linux虛擬服務(wù))和F5(一種硬件負(fù)載均衡設(shè)備),也是屬于"四層負(fù)載均衡"

[[276718]]

  1. nginx-1.9.0 已發(fā)布,該版本增加了stream 模塊用于一般的TCP 代理和負(fù)載均衡,ngx_stream_core_module 這個(gè)模塊在1.90版本后將被啟用。但是并不會(huì)默認(rèn)安裝, 
  2. 需要在編譯時(shí)通過(guò)指定 --with-stream 參數(shù)來(lái)激活這個(gè)模塊。 
  3.   
  4. 1)配置Nginx編譯文件參數(shù) 
  5. ./configure --with-http_stub_status_module --with-stream 
  6. ------------------------------------------------------------------ 
  7.   
  8. 2)編譯、安裝,make && make install 
  9. ------------------------------------------------------------------ 
  10.   
  11. 3)配置nginx.conf文件 
  12.   
  13. stream { 
  14.  upstream kevin { 
  15.  server 192.168.10.10:8080; #這里配置成要訪問(wèn)的地址 
  16.  server 192.168.10.20:8081; 
  17.  server 192.168.10.30:8081; #需要代理的端口,在這里我代理一一個(gè)kevin模塊的接口8081 
  18.  } 
  19.  server { 
  20.  listen 8081; #需要監(jiān)聽(tīng)的端口 
  21.  proxy_timeout 20s; 
  22.  proxy_pass kevin; 
  23.  } 
  24.   
  25. 創(chuàng)建最高級(jí)別的stream(與http同一級(jí)別),定義一個(gè)upstream組 名稱為kevin,由多個(gè)服務(wù)組成達(dá)到負(fù)載均衡 定義一個(gè)服務(wù)用來(lái)監(jiān)聽(tīng)TCP連接(如:8081端口), 
  26. 并且把他們代理到一個(gè)upstream組的kevin中,配置負(fù)載均衡的方法和參數(shù)為每個(gè)server;配置些如:連接數(shù)、權(quán)重等等。 
  27.   
  28. 首先創(chuàng)建一個(gè)server組,用來(lái)作為TCP負(fù)載均衡組。定義一個(gè)upstream塊在stream上下文中,在這個(gè)塊里面添加由server命令定義的server,指定他的IP地址和 
  29. 主機(jī)名(能夠被解析成多地址的主機(jī)名)和端口號(hào)。下面的例子是建立一個(gè)被稱之為kevin組,兩個(gè)監(jiān)聽(tīng)1395端口的server ,一個(gè)監(jiān)聽(tīng)8080端口的server。 
  30.   
  31. upstream kevin { 
  32.  server 192.168.10.10:8080; #這里配置成要訪問(wèn)的地址 
  33.  server 192.168.10.20:8081; 
  34.  server 192.168.10.30:8081; #需要代理的端口,在這里我代理一一個(gè)kevin模塊的接口8081 
  35.  } 
  36.   
  37.   
  38. 需要特別注意的是: 
  39. 你不能為每個(gè)server定義協(xié)議,因?yàn)檫@個(gè)stream命令建立TCP作為整個(gè) server的協(xié)議了。 
  40.   
  41. 配置反向代理使Nginx能夠把TCP請(qǐng)求從一個(gè)客戶端轉(zhuǎn)發(fā)到負(fù)載均衡組中(如:kevin組)。在每個(gè)server配置塊中 通過(guò)每個(gè)虛擬server的server的配置信息和在 
  42. 每個(gè)server中定義的監(jiān)聽(tīng)端口(客戶端需求的代理端口號(hào),如我推流的的是kevin協(xié)議,則端口號(hào)為:8081)的配置信息和proxy_passs 命令把TCP通信發(fā)送到 
  43. upstream的哪個(gè)server中去。下面我們將TCP通信發(fā)送到kevin 組中去。 
  44.   
  45.  server { 
  46.  listen 8081; #需要監(jiān)聽(tīng)的端口 
  47.  proxy_timeout 20s; 
  48.  proxy_pass kevin; 
  49.  } 
  50.   
  51. 當(dāng)然我們也可以采用單一的代理方式: 
  52.   
  53. server { 
  54.  listen 8081; #需要監(jiān)聽(tīng)的端口 
  55.  proxy_timeout 20s; 
  56.  proxy_pass 192.168.10.30:8081; #需要代理的端口,在這里我代理一一個(gè)kevin模塊的接口8081 
  57. ------------------------------------------------------------------ 
  58.   
  59. 4)改變負(fù)載均衡的方法: 
  60. 默認(rèn)nginx是通過(guò)輪詢算法來(lái)進(jìn)行負(fù)載均衡的通信的。引導(dǎo)這個(gè)請(qǐng)求循環(huán)的到配置在upstream組中server端口上去。 因?yàn)樗悄J(rèn)的方法,這里沒(méi)有輪詢命令, 
  61. 只是簡(jiǎn)單的創(chuàng)建一個(gè)upstream配置組在這兒stream山下文中,而且在其中添加server。 
  62.   
  63. a)least-connected :對(duì)于每個(gè)請(qǐng)求,nginx plus選擇當(dāng)前連接數(shù)最少的server來(lái)處理: 
  64.   
  65.  upstream kevin { 
  66.     least_conn; 
  67.  server 192.168.10.10:8080; #這里配置成要訪問(wèn)的地址 
  68.  server 192.168.10.20:8081; 
  69.  server 192.168.10.30:8081; #需要代理的端口,在這里我代理一一個(gè)kevin模塊的接口8081 
  70.  } 
  71.   
  72. b)least time :對(duì)于每個(gè)鏈接,nginx pluns 通過(guò)幾點(diǎn)來(lái)選擇server的: 最底平均延時(shí):通過(guò)包含在least_time命令中指定的參數(shù)計(jì)算出來(lái)的: 
  73. connect:連接到一個(gè)server所花的時(shí)間 
  74. first_byte:接收到第一個(gè)字節(jié)的時(shí)間 
  75. last_byte:全部接收完了的時(shí)間 最少活躍的連接數(shù): 
  76.   
  77.  upstream kevin { 
  78.     least_time first_byte; 
  79.  server 192.168.10.10:8080; #這里配置成要訪問(wèn)的地址 
  80.  server 192.168.10.20:8081; 
  81.  server 192.168.10.30:8081; #需要代理的端口,在這里我代理一一個(gè)kevin模塊的接口8081 
  82.  } 
  83.   
  84. c)普通的hash算法:nginx plus選擇這個(gè)server是通過(guò)user_defined 關(guān)鍵字,就是IP地址:$remote_addr; 
  85.   
  86.   upstream kevin { 
  87.     hash $remote_addr consistent; 
  88.  server 192.168.10.10:8080 weight=5; #這里配置成要訪問(wèn)的地址 
  89.  server 192.168.10.20:8081 max_fails=2 fail_timeout=30s; 
  90.  server 192.168.10.30:8081 max_conns=3; #需要代理的端口,在這里我代理一一個(gè)kevin模塊的接口8081 
  91.  } 

 

Nginx基于TCP/UDP端口的四層負(fù)載均衡(stream模塊)配置梳理

 

Nginx的TCP負(fù)載均衡的執(zhí)行原理

當(dāng)Nginx從監(jiān)聽(tīng)端口收到一個(gè)新的客戶端鏈接時(shí),立刻執(zhí)行路由調(diào)度算法,獲得指定需要連接的服務(wù)IP,然后創(chuàng)建一個(gè)新的上游連接,連接到指定服務(wù)器。

 

Nginx基于TCP/UDP端口的四層負(fù)載均衡(stream模塊)配置梳理

 

TCP負(fù)載均衡支持Nginx原有的調(diào)度算法,包括Round Robin(默認(rèn),輪詢調(diào)度),哈希(選擇一致)等。同時(shí),調(diào)度信息數(shù)據(jù)也會(huì)和健壯性檢測(cè)模塊一起協(xié)作,為每個(gè)連接選擇適當(dāng)?shù)哪繕?biāo)上游服務(wù)器。如果使用Hash負(fù)載均衡的調(diào)度方法,你可以使用$remote_addr(客戶端IP)來(lái)達(dá)成簡(jiǎn)單持久化會(huì)話(同一個(gè)客戶端IP的連接,總是落到同一個(gè)服務(wù)server上)。

和其他upstream模塊一樣,TCP的stream模塊也支持自定義負(fù)載均和的轉(zhuǎn)發(fā)權(quán)重(配置“weight=2”),還有backup和down的參數(shù),用于踢掉失效的上游服務(wù)器。max_conns參數(shù)可以限制一臺(tái)服務(wù)器的TCP連接數(shù)量,根據(jù)服務(wù)器的容量來(lái)設(shè)置恰當(dāng)?shù)呐渲脭?shù)值,尤其在高并發(fā)的場(chǎng)景下,可以達(dá)到過(guò)載保護(hù)的目的。

Nginx監(jiān)控客戶端連接和上游連接,一旦接收到數(shù)據(jù),則Nginx會(huì)立刻讀取并且推送到上游連接,不會(huì)做TCP連接內(nèi)的數(shù)據(jù)檢測(cè)。Nginx維護(hù)一份內(nèi)存緩沖區(qū),用于客戶端和上游數(shù)據(jù)的寫(xiě)入。如果客戶端或者服務(wù)端傳輸了量很大的數(shù)據(jù),緩沖區(qū)會(huì)適當(dāng)增加內(nèi)存的大小。

 

Nginx基于TCP/UDP端口的四層負(fù)載均衡(stream模塊)配置梳理

 

當(dāng)Nginx收到任意一方的關(guān)閉連接通知,或者TCP連接被閑置超過(guò)了proxy_timeout配置的時(shí)間,連接將會(huì)被關(guān)閉。對(duì)于TCP長(zhǎng)連接,我們更應(yīng)該選擇適當(dāng)?shù)膒roxy_timeout的時(shí)間,同時(shí),關(guān)注監(jiān)聽(tīng)socke的so_keepalive參數(shù),防止過(guò)早地?cái)嚅_(kāi)連接。

Nginx的TCP負(fù)載均衡服務(wù)健壯性監(jiān)控

TCP負(fù)載均衡模塊支持內(nèi)置健壯性檢測(cè),一臺(tái)上游服務(wù)器如果拒絕TCP連接超過(guò)proxy_connect_timeout配置的時(shí)間,將會(huì)被認(rèn)為已經(jīng)失效。在這種情況下,Nginx立刻嘗試連接upstream組內(nèi)的另一臺(tái)正常的服務(wù)器。連接失敗信息將會(huì)記錄到Nginx的錯(cuò)誤日志中。

 

Nginx基于TCP/UDP端口的四層負(fù)載均衡(stream模塊)配置梳理

 

如果一臺(tái)服務(wù)器,反復(fù)失敗(超過(guò)了max_fails或者fail_timeout配置的參數(shù)),Nginx也會(huì)踢掉這臺(tái)服務(wù)器。服務(wù)器被踢掉60秒后,Nginx會(huì)偶爾嘗試重連它,檢測(cè)它是否恢復(fù)正常。如果服務(wù)器恢復(fù)正常,Nginx將它加回到upstream組內(nèi),緩慢加大連接請(qǐng)求的比例。

之所"緩慢加大",因?yàn)橥ǔR粋€(gè)服務(wù)都有"熱點(diǎn)數(shù)據(jù)",也就是說(shuō),80%以上甚至更多的請(qǐng)求,實(shí)際都會(huì)被阻擋在"熱點(diǎn)數(shù)據(jù)緩存"中,真正執(zhí)行處理的請(qǐng)求只有很少的一部分。在機(jī)器剛剛啟動(dòng)的時(shí)候,"熱點(diǎn)數(shù)據(jù)緩存"實(shí)際上還沒(méi)有建立,這個(gè)時(shí)候爆發(fā)性地轉(zhuǎn)發(fā)大量請(qǐng)求過(guò)來(lái),很可能導(dǎo)致機(jī)器無(wú)法"承受"而再次掛掉。以mysql為例子,我們的mysql查詢,通常95%以上都是落在了內(nèi)存cache中,真正執(zhí)行查詢的并不多。

其實(shí),無(wú)論是單臺(tái)機(jī)器或者一個(gè)集群,在高并發(fā)請(qǐng)求場(chǎng)景下,重啟或者切換,都存在這個(gè)風(fēng)險(xiǎn),解決的途徑主要是兩種:

1)請(qǐng)求逐步增加,從少到多,逐步積累熱點(diǎn)數(shù)據(jù),最終達(dá)到正常服務(wù)狀態(tài)。

2)提前準(zhǔn)備好"常用"的數(shù)據(jù),主動(dòng)對(duì)服務(wù)做"預(yù)熱",預(yù)熱完成之后,再開(kāi)放服務(wù)器的訪問(wèn)。

TCP負(fù)載均衡原理上和LVS等是一致的,工作在更為底層,性能會(huì)高于原來(lái)HTTP負(fù)載均衡不少。但是,不會(huì)比LVS更為出色,LVS被置于內(nèi)核模塊,而Nginx工作在用戶態(tài),而且,Nginx相對(duì)比較重。另外一點(diǎn),令人感到非??上?,這個(gè)模塊竟然是個(gè)付費(fèi)功能。

 

 

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2019-06-24 15:58:53

TCPUDPNginx

2013-08-27 13:48:12

Nginx stickNginx負(fù)載均衡

2010-05-10 18:11:24

負(fù)載均衡機(jī)

2012-02-15 00:15:48

2012-11-12 11:26:44

2014-07-24 09:38:34

2020-09-07 06:28:37

Nginx靜態(tài)負(fù)載均衡動(dòng)態(tài)負(fù)載均衡

2014-07-28 11:37:49

NginxTomcat

2018-02-01 10:31:12

Nginx負(fù)載均衡軟件

2010-04-22 16:41:56

負(fù)載均衡端口規(guī)則

2010-03-30 13:59:56

Nginx負(fù)載均衡配置

2010-03-25 18:52:15

Nginx負(fù)載均衡

2013-02-20 09:59:49

負(fù)載均衡PuppetNginx

2010-04-22 20:57:13

四層交換Alteon負(fù)載均衡

2019-10-25 17:24:26

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全技術(shù)周刊

2019-09-18 10:39:08

負(fù)載均衡反向代理TCP

2010-05-04 13:32:37

nginx負(fù)載均衡器

2012-07-31 09:25:42

nginx負(fù)載均衡反向代理

2013-04-22 11:29:14

Nginx

2017-05-08 08:44:07

TCP負(fù)載均衡擴(kuò)展性架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)