您好,登錄后才能下訂單哦!
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è)資訊頻道,感謝各位的閱讀!
免責(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)容。