一、負(fù)載均衡
當(dāng)一臺服務(wù)器的訪問量越大時,服務(wù)器所承受的壓力也就越大,超出自身所指定的訪問壓力就會崩掉,避免發(fā)生此類事情的發(fā)生,因此也就有了負(fù)載均衡來分擔(dān)服務(wù)器的壓力。 那么究竟什么是負(fù)載均衡呢?通俗些講,就是我們有幾十臺、幾百臺甚至更多服務(wù)器,將這些服務(wù)器組成一個服務(wù)器集群,當(dāng)客戶端訪問某臺設(shè)備的數(shù)據(jù)時,首先發(fā)送的請求先到一臺中間服務(wù)器,并通過中間服務(wù)器在服務(wù)器集群中平均分?jǐn)偟狡渌?wù)器中,因此,當(dāng)用戶每次所發(fā)送的請求都將會保證服務(wù)器集群中的設(shè)備均與平攤,以此來分擔(dān)服務(wù)器的壓力,從而保持服務(wù)器集群的整理性能最優(yōu),避免出現(xiàn)有崩潰的現(xiàn)象。

二、Nginx負(fù)載均衡的作用
轉(zhuǎn)發(fā)功能:Nginx 會按照一定的算法輪詢、權(quán)重將客戶端發(fā)來的請求轉(zhuǎn)發(fā)至不同的應(yīng)用服務(wù)器上,同時減輕單臺服務(wù)器的壓力,提高服務(wù)器的并發(fā)量;
故障遷移:當(dāng)一臺服務(wù)器出現(xiàn)了故障時,客戶端發(fā)來的請求將自動發(fā)送到其他服務(wù)器; * 添加恢復(fù):當(dāng)故障服務(wù)器恢復(fù)正常工作時,將自動添加到處理用戶請求中;
三、Nginx負(fù)載均衡的幾種策略方式
1)輪詢(默認(rèn)) 客戶端發(fā)出的每個請求將按照時間順序逐一分配到不同的后端服務(wù)器,如后端服務(wù)器down掉,能自動剔除。
upstream backserver { server 192.168.1.10; server 192.168.1.11; }
2)weight
weight 代表權(quán)重,默認(rèn)為1,權(quán)重越高被分配的客戶端也就越多。 指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況,也就是說:哪個 server 的連接數(shù)少,路由就到哪個 server 中去。
upstream backserver { server 192.168.1.10 weight=3; server 192.168.1.11 weight=7;}
3)ip_hash
每個請求按訪問 IP 的hash結(jié)果分配,每個訪客固定訪問一個后端服務(wù)器,可解決session的問題。
upstream backserver { ip_hash; server 192.168.1.10:80; server 192.168.1.11:88; }
4)fair(第三方) 按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。
upstream backserver { server server1; server server2; fair; }
5)url_hash(第三方) 按訪問url的hash結(jié)果來分配請求,使每個url定向到同一個后端服務(wù)器,后端服務(wù)器為緩存時比較有效。
upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }
這里推薦大家可以看看Linux C/C++ 高級開發(fā)架構(gòu)的【免費】課程:
課程內(nèi)容的話和騰訊C++后臺開發(fā)T8職級技術(shù)棧對標(biāo),圍繞數(shù)據(jù)結(jié)構(gòu)與算法、數(shù)據(jù)庫、網(wǎng)絡(luò)、操作系統(tǒng)、網(wǎng)絡(luò)編程、分布式架構(gòu)等方面全面提升,值得學(xué)習(xí)一波~

四、常見的負(fù)載均衡方案有哪些?
將下圖進行拆分,其常見互聯(lián)網(wǎng)分布式架構(gòu),主要分為:
客戶端層
反向代理層
服務(wù)器站點層
服務(wù)層
數(shù)據(jù)層

因此,可以看出,從一臺客戶端發(fā)出的請求到最終的數(shù)據(jù)層,上游都可以訪問到下游,實現(xiàn)最終的均勻平攤。 第一層:從客戶端層到反向代理層 客戶端層到反向代理層的負(fù)載均衡,通過DNS輪詢實現(xiàn),在DNS服務(wù)器上對應(yīng)的域名配置多個IP,當(dāng)客戶端發(fā)出的請求到DNS服務(wù)器時,會輪詢返回對應(yīng)域名配置的 IP,保證解析的IP是必須與Nginx服務(wù)器的IP是相同的,以此Nginx服務(wù)器的請求分配也將是均衡的。

第二層:從反向代理層到服務(wù)器站點層 反向代理層到服務(wù)器站點層的負(fù)載均衡,通過Nginx實現(xiàn),修改nginx.conf配置文件,實現(xiàn)多種負(fù)載均衡策略; PS:這里我們通過nginx.conf配置文件的方式進行實現(xiàn),其主要實現(xiàn)的方式可參考上述:三、Nginx負(fù)載均衡的幾種方式(主要包括:輪詢、weight、ip_hash、fair(第三方)、url_hash(第三方)的相關(guān)描述)

第三層:從服務(wù)器站點層到服務(wù)層 服務(wù)器站點層到服務(wù)層的負(fù)載均衡,是通過服務(wù)連接池實現(xiàn)的,上游連接池會建立與下游服務(wù)多個連接,每次請求將會隨機選取連接來訪問下游服務(wù)。

第四層:從服務(wù)層到數(shù)據(jù)層 服務(wù)層到數(shù)據(jù)層時,數(shù)據(jù)量很大的情況下,數(shù)據(jù)層(db,cache)會涉及數(shù)據(jù)的水平切分,所以數(shù)據(jù)層的負(fù)載均衡會更加復(fù)雜一些,分為數(shù)據(jù)的均衡與請求的均衡。
數(shù)據(jù)的均衡:是指水平切分后的每個服務(wù)(db,cache),數(shù)據(jù)量是均勻的。
請求的均衡:是指水平切分后的每個服務(wù)(db,cache),請求量是均勻的。
常見的水平切分方式有兩種: 第一種:按照range水平切分

每一個數(shù)據(jù)服務(wù),存儲一定范圍的數(shù)據(jù)
user0 服務(wù),存儲 uid 范圍:1-1kw;
user1 服務(wù),存儲 uid 范圍:1kw-2kw;
這個方案的好處是:
規(guī)則簡單,service 只需判斷一下 uid 范圍就能路由到對應(yīng)的存儲服務(wù);
數(shù)據(jù)均衡性較好;
易擴展,可隨時加一個 uid [2kw,3kw] 的數(shù)據(jù)服務(wù);
這個方案的不足是: 請求的負(fù)載不一定均衡,對新用戶會比老用戶更活躍,大 range 的服務(wù)請求壓力會更大。 第二種:按照 id 哈希水平切分

每一個數(shù)據(jù)服務(wù),存儲某個 key 值 hash 后的部分?jǐn)?shù)據(jù)
user0 服務(wù),存儲偶數(shù) uid 數(shù)據(jù);
user1 服務(wù),存儲奇數(shù) uid 數(shù)據(jù);
這個方案的好處是:
規(guī)則簡單,service 需對 uid 進行 hash 能路由到對應(yīng)的存儲服務(wù);
數(shù)據(jù)均衡性較好;
請求均勻性較好;
這個方案的不足是:
不易擴展,擴展一個數(shù)據(jù)服務(wù),hash 方法改變時候,可能需要進行數(shù)據(jù)遷移。
五、Nginx負(fù)載均衡配置實例
1、實現(xiàn)效果 在瀏覽器地址欄中輸入,負(fù)載均衡效果平均到端口號8080和8081中。 2、準(zhǔn)備工作 1) 準(zhǔn)備兩臺Tomcat服務(wù)器,一臺服務(wù)器為8080,另一臺服務(wù)器為8081。 2) 分別在兩臺Tomcat服務(wù)器中的webapps目錄中,創(chuàng)建名稱是abc文件夾,在abc文件夾中創(chuàng)建頁面20200320.html,進行測試。 在上一篇文章中,我們對其兩臺Tomcat服務(wù)創(chuàng)建好了8080和8081,所以這里我們就無需在創(chuàng)建了,并且分別查看8080和8081服務(wù)下webapps目錄中是否都存在測試頁面文件,如沒有可自行創(chuàng)建即可。
Tomcat8080
# cat /root/tomcat8080/apache-tomcat-7.0.70/webapps/abc/20200320.html
welcome to tomcat 8080!
Tomcat8081
# cd /root/tomcat8081/apache-tomcat-7.0.70/webapps/# mkdir abc# cd abc/# vim 20200320.html
welcome to tomcat 8081!
切換到
/root/tomcat8081/apache-tomcat-7.0.70/bin/目錄下,啟動8081的Tomcat服務(wù)。
# ./startup.sh Using CATALINA_BASE: /root/tomcat8081/apache-tomcat-7.0.70Using CATALINA_HOME: /root/tomcat8081/apache-tomcat-7.0.70Using CATALINA_TMPDIR: /root/tomcat8081/apache-tomcat-7.0.70/tempUsing JRE_HOME: /usrUsing CLASSPATH: /root/tomcat8081/apache-tomcat-7.0.70/bin/bootstrap.jar:/root/tomcat8081/apache-tomcat-7.0.70/bin/tomcat-juli.jarTomcat started.
測試驗證 在客戶端瀏覽器中分別測試Tomcat8080:
和Tomcat8081進行驗證。

Tomcat8080

Tomcat8081 3) 在 Nginx 的配置文件中進行負(fù)載均衡的配置; 在http模塊下添加upstream myserver配置、server_name 由原來的localhost改為Nginx服務(wù)器地址,在location下添加proxy_pass http://myserver;即可;
# vim /usr/local/nginx/conf/nginx.conf 17 http { 18 ...... 34 upstream myserver { 35 server 192.168.1.10:8080; 36 server 192.168.1.10:8081; 37 } 38 39 server { 40 listen 80; 41 server_name 192.168.1.10; 42 43 #charset koi8-r; 44 45 #access_log logs/host.access.log main; 46 47 location / { 48 proxy_pass http://myserver; 49 root html; 50 index index.html index.htm; 51 } 52 ......
操作完 Nginx 文件的負(fù)載均衡的配置后,重啟Nginx服務(wù),出現(xiàn)如下問題:
# ./nginx -s stopnginx: [warn] conflicting server name "192.168.1.10" on 0.0.0.0:80, ignored# ./nginx
意思是重復(fù)綁定了server name,該警告不會影響到服務(wù)器運行。而且,這個重復(fù)綁定的意思是現(xiàn)在運行的Nginx服務(wù)和將要加載的新配置中的重復(fù),所以,這個警告其實是不必的。 測試驗證 在客戶端瀏覽器中輸入:
,不斷刷新,觀察變化,這就是在將客戶端發(fā)出的請求分擔(dān)到不同的Tomcat服務(wù)中去,也就是所謂負(fù)載均衡的一個效果。

負(fù)載均衡所實現(xiàn)的效果 總結(jié) 通過本篇文章介紹了什么的負(fù)載均衡、Nginx負(fù)載均衡的作用、Nginx負(fù)載均衡的幾種策略方式、常見的負(fù)載均衡方案、Nginx負(fù)載均衡配置實例等;負(fù)載均衡是分布式系統(tǒng)架構(gòu)設(shè)計中必須考慮的因素之一,通常是指:將請求/數(shù)據(jù)均勻分?jǐn)偟蕉鄠€操作單元上執(zhí)行,其的關(guān)鍵在于均勻:
反向代理層的負(fù)載均衡,是通過DNS輪詢實現(xiàn);
服務(wù)器站點層的負(fù)載均衡,是通過Nginx實現(xiàn);
服務(wù)層的負(fù)載均衡,是通過服務(wù)連接池實現(xiàn);
數(shù)據(jù)層的負(fù)載均衡,要考慮數(shù)據(jù)的均衡與請求的均衡兩點,其常見的方式有按照范圍水平切分與hash水平切分
本文由網(wǎng)上采集發(fā)布,不代表我們立場,轉(zhuǎn)載聯(lián)系作者并注明出處:http://m.zltfw.cn/shbk/40691.html