真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

NginxTCP和UDP負載均衡

1 介紹

負載均衡是指有效的通過多個后端服務(wù)器分發(fā)網(wǎng)絡(luò)流量。

創(chuàng)新互聯(lián)公司專注于安平網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供安平營銷型網(wǎng)站建設(shè),安平網(wǎng)站制作、安平網(wǎng)頁設(shè)計、安平網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造安平網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供安平網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

Nginx能代理和負載均衡TCP、UDP通信。TCP(傳輸控制協(xié)議)、UDP(用戶數(shù)據(jù)包協(xié)議)是許多流行應(yīng)用程序和服務(wù)的協(xié)議,例如LDAP、MySQL和RTMP使用TCP協(xié)議,DNS、syslog和RADIUS。

2 需要

使用--with-stream配置標記構(gòu)建最新Nginx,或最新的Nginx+(不需要額外構(gòu)建步驟)

應(yīng)用程序、數(shù)據(jù)庫或服務(wù)基于TCP或UDP通信

Upstream服務(wù)器運行相同的應(yīng)用程序、數(shù)據(jù)庫或服務(wù)實例

3 配置反向代理

首先,你需要配置反向代理,因此,Nginx轉(zhuǎn)發(fā)來自客戶端的TCP連接或UDP數(shù)據(jù)包到upstream組或一個代理服務(wù)器。

打開Nginx配置文件并執(zhí)行以下步驟:

創(chuàng)建頂級stream {}塊

stream {

...

}

在頂級stream {}上下文中為每個虛擬主機定義一個或多個server {}配置塊。

在每個server {}配置塊中包括listen指令定義服務(wù)器監(jiān)聽的IP地址和/或端口。對于UDP通信,也包括udp參數(shù)。TCP是stream上下文的默認協(xié)議:

stream {

server {

listen 12345;

...

}

server {

listen 53 udp;

...

}

...

}

包括proxy_pass指令定義代理服務(wù)器或upstream組

stream {

server {

listen 12345;

proxy_pass stream_backend;

}

server {

listen 12346;

proxy_pass backend.example.com:12346;

}

server {

listen 53 udp;

proxy_pass dns_servers;

}

...

}

可選,如果你的代理服務(wù)器多個網(wǎng)絡(luò)接口,你能配置Nginx選擇源IP地址連接到upstream服務(wù)器。代理服務(wù)器在Nginx后面配置為從特定IP網(wǎng)絡(luò)或IP地址范圍接收連接是有用的。

指定proxy_bind指令和必要的網(wǎng)絡(luò)接口的IP地址:

stream {

...

server {

listen 127.0.0.1:12345;

proxy_pass backend.example.com:12345;

proxy_bind 127.0.0.1:12345;

}

}

可選,你能調(diào)整兩個內(nèi)存緩存,Nginx能從客戶端和upstream連接放入數(shù)據(jù)。如果有一個體積小的數(shù)據(jù),減少緩存可以節(jié)約內(nèi)存資源。如果有大量數(shù)據(jù),增加緩存大小減少套接字讀寫操作次數(shù)。一旦在一個連接接收到數(shù)據(jù),Nginx讀取它并在其它連接轉(zhuǎn)發(fā)。緩存使用proxy_buffer_size指令控制:

stream {

...

server {

listen 127.0.0.1:12345;

proxy_pass backend.example.com:12345;

proxy_buffer_size 16k;

}

}

4 配置TCP和UDP負載均衡

為了配置負載均衡:

1、創(chuàng)建服務(wù)器組,或upstream組將負載均衡通信。定義一個或多個upstream {}配置塊在頂級steam {}上下文,設(shè)置upstream組的名字,例如,TCP服務(wù)器steam_backed和UDP服務(wù)器dns_servers:

stream {

upstream stream_backend {

...

}

upstream dns_servers {

...

}

...

}

2、在upstream組中填充upstream服務(wù)器。upstream {}塊中,為每個upstream服務(wù)器添加server指令,指定IP地址或主機名(解析多個IP地址)和必須的端口號。

stream {

upstream stream_backend {

server backend1.example.com:12345;

server backend2.example.com:12345;

server backend3.example.com:12346;

...

}

upstream dns_servers {

server 192.168.136.130:53;

server 192.168.136.131:53;

...

}

...

}

3、配置負載均衡方法

round-robin(輪詢)——默認,Nginx使用輪詢算法負載均衡通信。因為是默認方法,所以沒有round-robin指令;只創(chuàng)建upstream配置塊在頂級stream上下文并像之前步驟添加server指令。

last_conn(最少連接)——Nginx選擇當前活躍連接數(shù)較少的服務(wù)器。

least_tome——Nginx選擇低平均延遲和最少活躍連接的服務(wù)器。低活躍連接基于least_time指令的以下參數(shù)計算:

connect——連接upstream服務(wù)器的時間

first_byte——接收第一個數(shù)據(jù)字節(jié)的時間

last_byte——從服務(wù)器接收完整響應(yīng)的時間

upstream stream_backend {

least_time first_byte;

server backend1.example.com:12345;

server backend2.example.com:12345;

server backend3.example.com:12346;

}

hash——Nginx基于用戶定義鍵選擇服務(wù)器,例如,源IP地址

upstream stream_backend {

hash $remote_addr;

server backend1.example.com:12345;

server backend2.example.com:12345;

server backend3.example.com:12346;

}

hash負載均衡方法也用于配置回話持久化。哈希函數(shù)基于客戶端IP地址,來自指定客戶端的連接總是傳遞給相同的服務(wù)器,除非服務(wù)器宕機或不可用。指定一個可選的consistent參數(shù)應(yīng)用ketama一致性哈希方法

hash $remote_addr consistent;

4、可選,指定連接數(shù)、服務(wù)器權(quán)重等

upstream stream_backend {

hash $remote_addr consistent;

server backend1.example.com:12345 weight=5;

server backend2.example.com:12345;

server backend3.example.com:12346 max_conns=3;

}

upstream dns_servers {

least_conn;

server 192.168.136.130:53;

server 192.168.136.131:53;

...

}

如果你通過主機名標識服務(wù)器,配置主機名解析多個IP地址,然后Nginx通過IP地址使用輪詢算法負載均衡。在這種情況下,你必須在proxy_pass指令中指定服務(wù)器的端口號,不必指定協(xié)議:

stream {

...

server {

listen 12345;

proxy_pass backend.example.com:12345;

}

}

5 被動健康檢查

如果試圖連接upstream服務(wù)器超時或出錯,Nginx標記服務(wù)器為不可用并在指定時間內(nèi)停止發(fā)送請求給該服務(wù)器。為了定義不可用條件,包括以下參數(shù)到server指令:

fail_timeout——同Nginx負載均衡章節(jié)

max_fails——同Nginx負載均衡章節(jié)

fail_timeout默認為10秒,max_fails默認為1次。因此,如果連接10秒內(nèi)嘗試至少一次失敗,Nginx標記服務(wù)器10秒內(nèi)不可用。

upstream stream_backend {

server backend1.example.com:12345 weight=5;

server backend2.example.com:12345 max_fails=2 fail_timeout=30s;

server backend3.example.com:12346 max_conns=3;

}

6 主動健康檢查

健康檢查能配置測試廣范圍的錯誤類型。例如,Nginx能不斷測試upstream服務(wù)器的響應(yīng)能力并避免服務(wù)器故障。

6.1 工作原理

Nginx發(fā)送特定健康檢查請求到每個upstream服務(wù)器并檢查響應(yīng)滿足某一條件。如果不能連接到服務(wù)器,那么健康檢查失敗,服務(wù)器不健康。Nginx不代理客戶端連接到不健康的服務(wù)器。如果多個健康檢查定義在服務(wù)器組中,相應(yīng)服務(wù)器的任意一個檢查不通過該服務(wù)器都是不健康的。

6.2 預(yù)備條件

你在stream上下文中配置upstream服務(wù)器組

stream {

upstream stream_backend {

server backend1.example.com:12345;

server backend2.example.com:12345;

server backend3.example.com:12345;

}

}

你配置一臺服務(wù)器傳遞通信(在這種情況下,是TCP連接)到服務(wù)器組

server {

listen 12345;

proxy_pass stream_backend;

}

6.3 基礎(chǔ)配置

指定共享內(nèi)存區(qū)域

stream {

upstream stream_backend {

zone stream_backend 64k;

server backend1.example.com:12345;

server backend2.example.com:12345;

server backend3.example.com:12345;

}

}

啟用健康檢查

server {

listen 12345;

proxy_pass stream_backend;

health_check;

health_check_timeout5s;

}

health_check指令啟用健康檢查功能,health_check_timeout覆蓋健康檢查的proxy_timeout。

為了啟用健康檢查UDP通信,為health_check指令指定udp參數(shù):

server {

listen 5053;

proxy_pass dns_servers;

health_check udp;

health_check_timeout 5s;

}

6.4 健康檢查調(diào)優(yōu)

默認,Nginx嘗試每5秒連接upstream服務(wù)器組中的每臺服務(wù)器。如果不能建立連接,Nginx認為健康檢查失敗,標記為不健康,停止轉(zhuǎn)發(fā)客戶端連接到服務(wù)器。

為了改變默認行為,包括參數(shù)到health_check指令:

interval——Nginx多久發(fā)送一次健康檢查請求(默認5秒)

passes——服務(wù)器連續(xù)多少次響應(yīng)健康檢查認為是健康(默認是1次)

fails——服務(wù)器連續(xù)多少次健康檢查失敗認為是不健康(默認是1次)

server {

listen 12345;

proxy_pass stream_backend;

health_check interval=10 passes=2 fails=3;

}

在例子中,TCP健康檢查時間間隔增加到10秒,服務(wù)器認為連續(xù)3次健康檢查失敗是不健康,服務(wù)器需要連續(xù)2次通過健康檢查才再次認為是健康的。

默認,Nginx發(fā)送健康檢查消息給upstream塊中的server指令的特定端口。你能指定其它的健康檢查端口,當許多服務(wù)在相同主機檢查健康時非常有用。為了覆蓋端口,指定health_check指令的port參數(shù):

server {

listen 12345;

proxy_pass stream_backend;

health_check port=8080;

}

6.5 使用match配置塊調(diào)優(yōu)健康檢查

你能通過配置大量健康檢查測試驗證服務(wù)響應(yīng)。這些測試放置在stream{}上下文中的match {}配置塊。指定match {}塊并設(shè)置它的名字,例如,tcp_test:

stream {

...

match tcp_test {

...

}

}

然后在health_check指令包括match參數(shù)和match塊相同名稱引用塊:

stream {

server {

listen 12345;

health_check match=tcp_test;

proxy_pass stream_backend;

}

}

健康檢查的條件或測試使用send和expect參數(shù)設(shè)置:

send——發(fā)送給服務(wù)器文本字符串或十六進制字符(“/x”后面跟兩個十六進制數(shù)字) expect——服務(wù)器返回的數(shù)據(jù)匹配的字符串貨正則表達式

這些參數(shù)能用于不同的組合,但不能同時制定超過一個send和一個expect參數(shù)。參數(shù)配置也依賴于使用(TCP或UDP)的協(xié)議。

6.5.1 調(diào)優(yōu)TCP健康檢查

為了調(diào)優(yōu)TCP健康檢查,你能組合send和expect參數(shù):

如果沒有send或expect參數(shù)指定,測試連接服務(wù)器能力。

如果expect參數(shù)被指定,服務(wù)器期望無條件發(fā)送數(shù)據(jù):

match pop3 {

expect ~* "+OK";

}

如果send參數(shù)指定,它期望連接將成功建立并指定字符串發(fā)送給服務(wù)器:

match pop_quit {

send QUIT;

}

如果send和expect參數(shù)被指定

stream {

upstream stream_backend {

zone upstream_backend 64k;

server backend1.example.com:12345;

}

match http {

send "GET / HTTP/1.0rnHost: localhostrnrn";

expect ~* "200 OK";

}

server {

listen 12345;

health_check match=http;

proxy_pass stream_backend;

}

}

例子顯示為了健康檢查傳入,HTTP請求必須發(fā)送到服務(wù)器,并期望服務(wù)器結(jié)果包含”200 OK”表示HTTP響應(yīng)成功。

6.5.2 UDP健康檢查調(diào)優(yōu)

為了調(diào)優(yōu)UDP健康檢查,你應(yīng)該指定send和expect參數(shù):

NTP例子

match ntp {

send xe3x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00;

expect ~* x24;

}

DNS例子

match dns {

send x00x2ax00x00x00x01x00x00x00x00x00x00x03x73x74x6cx04x75x6dx73x6cx03x65x64x75x00x00x01x00x01;

expect ~* "health.is.good";

}

7 動態(tài)配置

Upstream服務(wù)器組能容易使用簡單的HTTP接口重新動態(tài)配置。使用該接口,你能瀏覽所有服務(wù)器在upstream組或特定服務(wù)器,修改服務(wù)器參數(shù),并添加或刪除upstream服務(wù)器。

為了啟用動態(tài)配置:

創(chuàng)建頂級http {}塊或確保在你的配置文件中存在

http {

...

}

創(chuàng)建配置請求的location,例如,upstream_conf。

http {

server {

location /upstream_conf {

...

}

}

}

在該location中指定upstream_conf指令——一個能用于解釋和重新配置upstream組的處理器

http {

server {

location /upstream_conf {

upstream_conf;

...

}

}

}

限制該location的訪問

http {

server {

location /upstream_conf {

upstream_conf;

allow 127.0.0.1;

deny all;

}

}

}

創(chuàng)建共享內(nèi)存區(qū)域

stream {

upstream stream_backend {

zone backend 64k;

...

}

}

7.1 動態(tài)配置例子

stream {

...

upstream appservers {

zone appservers 64k;

server appserv1.example.com:12345 weight=5;

server appserv2.example.com:12345 fail_timeout=5s;

server backup1.example.com:12345 backup;

server backup2.example.com:12345 backup;

}

server {

proxy_pass appservers;

health_check;

}

}

http {

...

server {

location /upstream_conf {

upstream_conf;

allow 127.0.0.1;

deny all;

}

}

}

瀏覽所有備機

http://127.0.0.1/upstream_conf?stream=&upstream=appservers&backup=

添加新服務(wù)器到服務(wù)器組

http://127.0.0.1/upstream_conf?stream=&add=&upstream=appservers&server=appserv3.example.com:12345&weight=2&max_fails=3

從服務(wù)器組刪除服務(wù)器

http://127.0.0.1/upstream_conf?stream=&remove=&upstream=appservers&id=2

修改指定服務(wù)器

http://127.0.0.1/upstream_conf?stream=&upstream=appservers&id=2&down=

8 TCP和UDP負載均衡配置例子

stream {

upstream stream_backend {

least_conn;

server backend1.example.com:12345 weight=5;

server backend2.example.com:12345 max_fails=2 fail_timeout=30s;

server backend3.example.com:12346 max_conns=3;

}

upstream dns_servers {

least_conn;

server 192.168.136.130:53;

server 192.168.136.131:53;

server 192.168.136.132:53;

}

server {

listen 12345;

proxy_pass backend;

proxy_timeout 3s;

proxy_connect_timeout 1s;

}

server {

listen 53 udp;

proxy_pass dns_servers;

}

server {

listen 12346;

proxy_pass backend.example.com:12346;

}

}


分享標題:NginxTCP和UDP負載均衡
文章分享:http://weahome.cn/article/cpossd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部