Nginx與LUA(2)

2023-01-12 18:32:35 來(lái)源:51CTO博客

您好,我是湘王,這是我的51CTO博客,歡迎您來(lái),歡迎您再來(lái)~


除了反向代理,Nginx另一個(gè)主要的功能就是「負(fù)載均衡」。


【資料圖】

所謂負(fù)載均衡,就是將請(qǐng)求分?jǐn)偟蕉鄠€(gè)服務(wù)器上執(zhí)行,從而減輕單臺(tái)服務(wù)器的訪(fǎng)問(wèn)壓力。負(fù)載均衡一般都需要同時(shí)配置反向代理,通過(guò)反向代理跳轉(zhuǎn)到指定的服務(wù)器上。

Nginx目前支持自帶三種負(fù)載均衡策略,還有兩種常用的第三方策略。

先準(zhǔn)備好環(huán)境:

1、先安裝三臺(tái)Linux虛擬機(jī),每臺(tái)虛擬機(jī)上安裝好JDK環(huán)境(不想裝虛擬機(jī),docker也可以)

2、開(kāi)發(fā)一個(gè)最簡(jiǎn)單的SpringBoot應(yīng)用

3、分別部署到其中兩臺(tái)服務(wù)器上,一臺(tái)叫server01,一臺(tái)叫server02

4、另一臺(tái)服務(wù)器安裝Nginx,做負(fù)載均衡,叫做server03

在application.properties文件中增加:server.port=8080

修改啟動(dòng)類(lèi),排除數(shù)據(jù)源的自動(dòng)加載:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

增加Controller類(lèi):

打包應(yīng)用,并上傳到server02,啟動(dòng)應(yīng)用

java -jar nginx-0.0.1-SNAPSHOT.jar

修改Controller類(lèi)

打包應(yīng)用,并上傳到server03,啟動(dòng)應(yīng)用

java -jar nginx-0.0.1-SNAPSHOT.jar

訪(fǎng)問(wèn)server01和server02(或者docker)的地址:

http://172.16.185.130:8080/test?username=test1

http://172.16.185.131:8080/test?username=test1

使用Nginx的默認(rèn)方式,也就是輪詢(xún):每個(gè)請(qǐng)求按順序輪流地分配到不同的后端服務(wù)器。如果某些后端服務(wù)器宕機(jī)或離線(xiàn),也能自動(dòng)剔除。

修改配置:

重新加載Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

訪(fǎng)問(wèn)server03的地址:http://172.16.185.136/test?username=test1

結(jié)果是:

第n次訪(fǎng)問(wèn)會(huì)返回「server02」

第n+1次訪(fǎng)問(wèn)會(huì)返回「server03」

或者相反。

說(shuō)明配置已生效。

現(xiàn)在給輪詢(xún)?cè)黾右幌聶?quán)重,避免平均主義:每個(gè)請(qǐng)求指定輪詢(xún)幾率,weight和訪(fǎng)問(wèn)比率成正比。這可以用于后端服務(wù)器性能不均的情況,如果某些后端服務(wù)器宕機(jī)或離線(xiàn),也能自動(dòng)剔除。

修改配置,增加weight關(guān)鍵字:

重新加載Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

再訪(fǎng)問(wèn)server03:??http://172.16.185.136/test?username=test1??

連續(xù)訪(fǎng)問(wèn)多次的結(jié)果:

多數(shù)訪(fǎng)問(wèn)會(huì)返回「server02」

少數(shù)訪(fǎng)問(wèn)會(huì)返回「server03」

大概就是三七開(kāi),說(shuō)明配置已生效。

輪詢(xún)和權(quán)重的方式只能滿(mǎn)足無(wú)狀態(tài)的或者冪等的業(yè)務(wù)應(yīng)用。但很多時(shí)候業(yè)務(wù)需要滿(mǎn)足一個(gè)客戶(hù)只能訪(fǎng)問(wèn)一個(gè)服務(wù)器的條件因此,這種情況就需要采用iphash方式來(lái)分配后端服務(wù)器。

修改配置,增加ip_hash關(guān)鍵字:

重新加載Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

再次訪(fǎng)問(wèn)server03:http://172.16.185.136/test?username=test1

連續(xù)訪(fǎng)問(wèn)多次的結(jié)果:如果每次訪(fǎng)問(wèn)都只返回了「server01」或者「server02」,則說(shuō)明配置已生效。

除了輪詢(xún)、權(quán)重和iphash,另外還可以通過(guò)第三方插件來(lái)設(shè)置負(fù)載均衡的方式:

如果需要按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求的話(huà),可以使用第三方插件fair。

1、下載地址:https://github.com/gnosek/nginx-upstream-fair

(或者h(yuǎn)ttps://www.nginx.com/resources/wiki/modules/index.html)

2、下載后解壓到/home/work/upstream-fair/

3、安裝時(shí)增加參數(shù):./configure --add-module=/home/work/upstream-fair/

4、錯(cuò)誤「"ngx_http_upstream_srv_conf_t"沒(méi)有名為"default_port"的成員」的解決辦法:

cd /home/work/upstream-fair/

Linux輸入:sed -i "s/default_port/no_port/g" ngx_http_upstream_fair_module.c

mac輸入:sed -i "" "s/default_port/no_port/g" ngx_http_upstream_fair_module.c

修改配置,將關(guān)鍵字ip_hash改為fair:

重新加載Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

訪(fǎng)問(wèn)server03:http://172.16.185.136/test?username=test1

連續(xù)訪(fǎng)問(wèn)多次的結(jié)果:

有時(shí)返回「server02」

有時(shí)返回「server03」

既不是輪詢(xún)、也不是權(quán)重和ip,這說(shuō)明配置已生效。

另外一種第三方插件是「一致性hash」:它可以根據(jù)參數(shù)采取不同的方式,將請(qǐng)求均勻映射到后端服務(wù)器:

1、根據(jù)客戶(hù)端ip映射;

2、根據(jù)客戶(hù)端uri映射;

3、根據(jù)客戶(hù)端參數(shù)映射。

安裝插件:

1、下載:https://github.com/replay/ngx_http_consistent_hash

(或者h(yuǎn)ttps://www.nginx.com/resources/wiki/modules/index.html)

2、下載后解壓到/home/work/upstream-hash/

3、安裝時(shí)增加參數(shù):./configure --add-module=/home/work/upstream-hash/

4、修改配置,將關(guān)鍵字fair改為consistent_hash $request_uri

重新加載Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

訪(fǎng)問(wèn)server03:http://172.16.185.136/test?username=test1

連續(xù)訪(fǎng)問(wèn)多次的結(jié)果:每次訪(fǎng)問(wèn)都只返回了「server01」或者「server02」

說(shuō)明配置已生效。


感謝您的大駕光臨!咨詢(xún)技術(shù)、產(chǎn)品、運(yùn)營(yíng)和管理相關(guān)問(wèn)題,請(qǐng)關(guān)注后留言。歡迎騷擾,不勝榮幸~

?

標(biāo)簽: 負(fù)載均衡 服務(wù)器的 反向代理

上一篇:當(dāng)前熱文:如何制作一個(gè)羊了個(gè)羊游戲4:道具的實(shí)現(xiàn)
下一篇:rs485和rs232協(xié)議的區(qū)別是什么(rs485和rs232是什么意思)