溫馨提示×

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

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

nginx中怎么做tcp負(fù)載

發(fā)布時(shí)間:2021-07-30 15:19:30 來(lái)源:億速云 閱讀:152 作者:Leah 欄目:大數(shù)據(jù)

nginx中怎么做tcp負(fù)載,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

負(fù)載配置的條件

(1) nginx的版本1.9.0以上。
(2) 數(shù)據(jù)庫(kù)需要主主備份或以上。
范例環(huán)境

操作系統(tǒng): windows7
nginx版本: 1.13.3
服務(wù)器A的IP: 192.168.68.56
服務(wù)器B的IP: 192.168.68.139
負(fù)載配置實(shí)現(xiàn)

通過(guò)修改max_fails和fail_timeout配置一定程度上實(shí)現(xiàn)負(fù)載均衡和自動(dòng)切換。 
修改nginx的config/nginx.conf文件。 
添加配置如下:

stream {
    upstream backend {
        #hash $remote_addr consistent;
        server 192.168.68.56:3306 max_fails=2 fail_timeout=10s;
        # IP和端口是數(shù)據(jù)庫(kù)配置的數(shù)據(jù)
        server 192.168.68.139:3306 max_fails=2 fail_timeout=10s;
        #max_fails: 允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤
        #fail_timeout: max_fails次失敗后,暫停的時(shí)間。
    }
    server {
        listen *:14330;# 需要修改數(shù)據(jù)庫(kù)的通用訪問(wèn)接口為這個(gè)
        proxy_pass backend;
    }
}
注:stream和http是平級(jí)的

按照上面配置,模擬雙機(jī)切換,兩次請(qǐng)求某服務(wù)器失敗則10s內(nèi)(可調(diào)整)內(nèi)不再訪問(wèn)失敗的服務(wù)器,這期間內(nèi)可以對(duì)雙機(jī)中失敗的數(shù)據(jù)庫(kù)進(jìn)行重啟。 
經(jīng)測(cè)試,如果配置了雙機(jī)主主備份,當(dāng)一臺(tái)宕機(jī)后再重啟,會(huì)自動(dòng)同步數(shù)據(jù)。

然而使用上面的方法實(shí)際上是屬于輪詢算法,存在一些問(wèn)題,不推薦使用。

目前使用backup的方式配置,在其中一臺(tái)數(shù)據(jù)庫(kù)宕機(jī)的情況下一定時(shí)間內(nèi)能恢復(fù)正常。 
缺點(diǎn)是宕機(jī)的1分鐘左右的時(shí)間內(nèi)無(wú)法操作。

windows下是否有其他更好的解決方案?后面再思考下。

參考資料

nginx的五種負(fù)載算法模式

輪詢(默認(rèn))

每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。

weight

指定輪詢幾率,weight和訪問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況。 
例如:

upstream bakend {
    server 192.168.0.14 weight=10;
    server 192.168.0.15 weight=10;
}
ip_hash

每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題。 
例如:

upstream bakend {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}
fair(第三方)

按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。 
例如:

upstream backend {
    server server1;
    server server2;
    fair;
}
url_hash(第三方)

按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。 
例:在upstream中加入hash語(yǔ)句,server語(yǔ)句中不能寫(xiě)入weight等其他的參數(shù),hash_method是使用的hash算法

upstream backend {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
}
tips

upstream bakend {
    #定義負(fù)載均衡設(shè)備的Ip及設(shè)備狀態(tài)
    ip_hash;
    server 127.0.0.1:9090 down;
    server 127.0.0.1:8080 weight=2;
    server 127.0.0.1:6060;
    server 127.0.0.1:7070 backup;
}
在需要使用負(fù)載均衡的server中增加 
proxy_pass http://bakend/;

每個(gè)設(shè)備的狀態(tài)設(shè)置為: 
1.down 表示單前的server暫時(shí)不參與負(fù)載 
2.weight 默認(rèn)為1.weight越大,負(fù)載的權(quán)重就越大。 
3.max_fails :允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤 
4.fail_timeout:max_fails次失敗后,暫停的時(shí)間。 
5.backup: 其它所有的非backup機(jī)器down或者忙的時(shí)候,請(qǐng)求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。

nginx支持同時(shí)設(shè)置多組的負(fù)載均衡,用來(lái)給不用的server來(lái)使用。

client_body_in_file_only 設(shè)置為On 可以講client post過(guò)來(lái)的數(shù)據(jù)記錄到文件中用來(lái)做debug 
client_body_temp_path 設(shè)置記錄文件的目錄 可以設(shè)置最多3層目錄

location 對(duì)URL進(jìn)行匹配.可以進(jìn)行重定向或者進(jìn)行新的代理 負(fù)載均衡

看完上述內(nèi)容,你們掌握nginx中怎么做tcp負(fù)載的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

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

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

AI