1. 負(fù)載均衡
跨多個(gè)應(yīng)用程序?qū)嵗呢?fù)載平衡是一種常用技術(shù),用于優(yōu)化資源利用率、最大化吞吐量、減少延遲和確保容錯(cuò)配置。?使用 nginx 作為非常有效的HTTP負(fù)載平衡器,將流量分配到多個(gè)應(yīng)用程序服務(wù)器,可以提升Web應(yīng)用程序的性能,提高擴(kuò)展性和可靠性。
使用 upstream
定義一組服務(wù) 。
# 啟動(dòng)ruoyi-admin服務(wù)
[root@nginx-dev conf.d]# cd /home/apps
[root@nginx-dev apps]# java -jar ruoyi-admin.jar
# 啟動(dòng)tomcat服務(wù)
[root@nginx-dev ~]# /home/apache-tomcat-8.5.81/bin/startup.sh
# 在 /etc/nginx/conf.d文件夾下添加nginx配置文件:8003.conf
[root@nginx-dev ~]# cd /etc/nginx/conf.d
[root@nginx-dev conf.d]# vi 8003.conf
[root@nginx-dev conf.d]# nginx -s reload
8003.conf 配置文件內(nèi)容:
upstream ruoyi-apps {
#不寫(xiě),采用輪循機(jī)制
server localhost:8080;
server localhost:8088;
}
server {
listen 8003;
server_name ruoyi.loadbalance;
location / {
proxy_pass http://ruoyi-apps;
}
# 請(qǐng)求ie頁(yè)面
location = /html/ie.html {
root /some/path/static;
}
# 請(qǐng)求字體文件
location ^~ /fonts/ {
root /some/path/static;
}
# css|js|png|jpg|gif|ico 頁(yè)面
location ~ \.(css|js|png|jpg|gif|ico) {
root /some/path/static;
}
}
2. 負(fù)載均衡策略
1. 輪詢策略
upstream ruoyi-apps {
#不寫(xiě),采用輪循機(jī)制
server localhost:8080;
server localhost:8088;
}
輪詢策略(Round Robin):默認(rèn)的負(fù)載均衡策略,將請(qǐng)求依次分配給每個(gè)后端服務(wù)器,循環(huán)往復(fù)。
例如,當(dāng)請(qǐng)求 nginx 的 8003 端口時(shí),會(huì)將請(qǐng)求輪詢轉(zhuǎn)發(fā)給 tomcat 和 ruoyi-admin 兩個(gè)后端服務(wù)器,即第1次請(qǐng)求會(huì)訪問(wèn)8080端口,第2次請(qǐng)求會(huì)訪問(wèn)8088端口,循環(huán)往復(fù)。
當(dāng)訪問(wèn) nginx 的 8003 端口時(shí) ,請(qǐng)求會(huì)進(jìn)入 8088 端口的 ruoyi-admin 服務(wù),當(dāng)填寫(xiě)完密碼以后點(diǎn)擊登錄,這次請(qǐng)求會(huì)進(jìn)入 8080 端口的 tomcat 服務(wù),因此總是登錄不成功。
2. 最小連接策略
最少連接策略(Least Connections):將請(qǐng)求分配給當(dāng)前連接數(shù)最少的后端服務(wù)器,以達(dá)到負(fù)載均衡的目的。
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
請(qǐng)注意,使用輪循機(jī)制或最少連接的負(fù)載平衡,每個(gè)客戶端的請(qǐng)求都可能分發(fā)到不同的服務(wù)器。不能保證同一客戶端將始終定向到同一服務(wù)器。?
3. IP 哈希策略
IP 哈希策略(IP Hash):根據(jù)客戶端 IP 地址的哈希值來(lái)選擇后端服務(wù)器,同一個(gè)客戶端的請(qǐng)求總是被分配到同一個(gè)后端服務(wù)器上。
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
upstream ruoyi-apps {
ip_hash;
server localhost:8080;
server localhost:8088;
}
server {
listen 8003;
server_name ruoyi.loadbalance;
location / {
proxy_pass http://ruoyi-apps;
}
# 請(qǐng)求ie頁(yè)面
location = /html/ie.html {
root /some/path/static;
}
# 請(qǐng)求字體文件
location ^~ /fonts/ {
root /some/path/static;
}
# css|js|png|jpg|gif|ico 頁(yè)面
location ~ \.(css|js|png|jpg|gif|ico) {
root /some/path/static;
}
}
此方法可確保來(lái)自同一客戶端的請(qǐng)求將始終定向到同一服務(wù)器,除非此服務(wù)器不可用。
Nginx的配置文件中定義了一個(gè)名為 ruoyi-apps 的 upstream 塊,其中包含兩個(gè)服務(wù)器 localhost:8080 和 localhost:8088,并使用 ip_hash 算法進(jìn)行負(fù)載均衡。這意味著每個(gè)客戶端的請(qǐng)求將被發(fā)送到同一個(gè)服務(wù)器,以確保會(huì)話一致性。接下來(lái),該配置文件定義了一個(gè)名為ruoyi.loadbalance的服務(wù)器塊,它監(jiān)聽(tīng)端口8003,并將所有請(qǐng)求代理到 ruoyi-apps 中定義的服務(wù)器組。這意味著所有來(lái)自客戶端的請(qǐng)求都將被轉(zhuǎn)發(fā)到localhost:8080或localhost:8088中的一個(gè)服務(wù)器上,以實(shí)現(xiàn)負(fù)載均衡。
4. 哈希策略
通用hash,允許用戶自定義hash的key,key可以是字符串、變量或組合。例如,key可以是配對(duì)的源 IP 地址和端口,也可以是 URI,如以下示例所示:?
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
請(qǐng)注意:基于 IP 的哈希算法存在一個(gè)問(wèn)題,那就是當(dāng)有一個(gè)上游服務(wù)器宕機(jī)或者擴(kuò)容的時(shí)候,會(huì)引發(fā)大量的路由變更,進(jìn)而引發(fā)連鎖反應(yīng),導(dǎo)致大量緩存失效等問(wèn)題。
假設(shè)我們基于 key 來(lái)做 hash,現(xiàn)在有 4 臺(tái)上游服務(wù)器,如果 hash 算法對(duì) key 取模,請(qǐng)求根據(jù)用戶定義的哈希鍵值均勻分布在所有上游服務(wù)器之間。當(dāng)有一臺(tái)服務(wù)器宕機(jī)的時(shí)候,就需要重新對(duì) key 進(jìn)行 hash,最后會(huì)發(fā)現(xiàn)所有的對(duì)應(yīng)關(guān)系全都失效了,從而會(huì)引發(fā)緩存大范圍失效。
consistent
參數(shù)啟用 ??ketama?? 一致哈希算法,如果在上游組中添加或刪除服務(wù)器,只會(huì)重新映射部分鍵,從而最大限度地減少緩存失效。?
5. 加權(quán)輪詢策略
加權(quán)輪詢策略(Weighted Round Robin):根據(jù)后端服務(wù)器的權(quán)重來(lái)分配請(qǐng)求,權(quán)重越高的服務(wù)器被分配到的請(qǐng)求越多。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-650826.html
upstream my-server {
server performance.server weight=3;
server app1.server;
server app2.server;
}
如上所示,每 5 個(gè)新請(qǐng)求將按如下方式分布在應(yīng)用程序?qū)嵗校? 個(gè)請(qǐng)求將定向到 performance.server,一個(gè)請(qǐng)求將轉(zhuǎn)到 app1.server,另一個(gè)請(qǐng)求將轉(zhuǎn)到 app2.server。?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-650826.html
到了這里,關(guān)于分布式 - 服務(wù)器Nginx:一小時(shí)入門系列之負(fù)載均衡的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!