高性能Web服務(wù)器Nginx實戰(zhàn)入門—負載均衡

負載均衡概述
在網(wǎng)站創(chuàng)立初期,我們一般都使用單臺機器對外提供集中式服務(wù)。隨著業(yè)務(wù)量的增大,我們一臺服務(wù)器不夠用,此時就會把多臺機器組成一個集群對外提供服務(wù),但是,我們網(wǎng)站對外提供的訪問入口通常只有一個,比如?www.web.com。那么當用戶在瀏覽器輸入www.web.com進行訪問的時候,如何將用戶的請求分發(fā)到集群中不同的機器上呢,這就是負載均衡要做的事情。
負載均衡通常是指將請求"均勻"分攤到集群中多個服務(wù)器節(jié)點上執(zhí)行,這里的均勻是指在一個比較大的統(tǒng)計范圍內(nèi)是基本均勻的,并不是完全均勻。
視頻觀看~~~戳??????

負載均衡實現(xiàn)方式
硬件負載均衡
比如?F5、深信服、Array 等
優(yōu)點是有廠商專業(yè)的技術(shù)服務(wù)團隊提供支持,性能穩(wěn)定
缺點是費用昂貴,對于規(guī)模較小的網(wǎng)絡(luò)應(yīng)用成本太高
軟件負載均衡
比如?Nginx、LVS、HAProxy 等
優(yōu)點是免費開源,成本低廉
Nginx負載均衡
Nginx通過在nginx.conf文件進行配置即可實現(xiàn)負載均衡
原理圖

配置如下:(配置2步即可)
A、在http模塊加上upstream配置
upstream www.myweb.com {
????? server ?127.0.0.1:9100 weight=3;
?????? server ?127.0.0.1:9200 weight=1; ?
}
其中weight=1表示權(quán)重,用于后端服務(wù)器性能不均的情況,訪問比率約等于權(quán)重之比,權(quán)重越大訪問機會越多
upstream是配置nginx與后端服務(wù)器負載均衡非常重要的一個模塊,并且它還能對后端的服務(wù)器的健康狀態(tài)進行檢查,若后端服務(wù)器中的一臺發(fā)生故障,則前端的請求不會轉(zhuǎn)發(fā)到該故障的機器
B、在server模塊里添加location,并配置proxy_pass
location /myweb {
proxy_pass http://www.myweb.com;
}
其中?www.myweb.com 字符串要和?upstream 后面的字符串相等
案例:將resources/site中的myweb.war部署到兩臺不同的tomcat上,通過nginx實現(xiàn)負載均衡
C、在linux服務(wù)器/usr/local目錄下,拷貝兩臺新的tomcat

D、將這兩臺tomcat服務(wù)器webapps目錄下沒用的項目刪掉


E、修改其中一臺tomcat9100的端口號為9100

F、修改tomcat9200的端口號為9200 ,因為需要同時啟動兩臺,這里其它的端口號也要修改



G、將myweb.war上傳到兩臺tomcat服務(wù)器的webapps目錄下


H、啟動兩臺tomcat


I、瀏覽器直接訪問兩臺tomcat,進行測試


但是我們網(wǎng)站一般對外之后提供一個入口地址,所以這個時候可以使用nginx進行負載。
J、配置nginx
在http模塊上加

在server模塊加

K、重啟Nginx

L、瀏覽器直接訪問nginx進行測試
為了看到效果,在tomcat9100的index.jsp中加一個標記

這個時候可以看到,服務(wù)器的端口為80,是nginx服務(wù)器的默認端口

多訪問幾次,如果沒有端口號,說明是tomcat9200被訪問了

Nginx常用負載均衡策略
輪詢(默認)
注意:這里的輪詢并不是每個請求輪流分配到不同的后端服務(wù)器,與ip_hash類似,但是按照訪問url的hash結(jié)果來分配請求,使得每個url定向到同一個后端服務(wù)器,主要應(yīng)用于后端服務(wù)器為緩存時的場景下。如果后端服務(wù)器down掉,將自動剔除
upstream backserver {
?????server 127.0.0.1:8080;
?????server 127.0.0.1:9090;
}?
權(quán)重
每個請求按一定比例分發(fā)到不同的后端服務(wù)器,weight值越大訪問的比例越大,用于后端服務(wù)器性能不均的情況
upstream backserver {
???? server 192.168.0.14 weight=5;
???? server 192.168.0.15 weight=2;
}
ip_hash
ip_hash也叫IP綁定,每個請求按訪問ip的hash值分配,這樣每個訪問客戶端會固定訪問一個后端服務(wù)器,可以解決會話Session丟失的問題
算法:hash("124.207.55.82") % 2 = 0, 1
upstream backserver {
???? ip_hash;
???? server 127.0.0.1:8080;
???? server 127.0.0.1:9090;
}
最少連接
web請求會被轉(zhuǎn)發(fā)到連接數(shù)最少的服務(wù)器上
upstream backserver {
???? least_conn;
???? server 127.0.0.1:8080;
???? server 127.0.0.1:9090;
}
案例:將負載均衡策略修改為ip_hash進行測試
修改nginx.conf配置文件

重啟nginx

瀏覽器訪問測試,始終訪問的是同一臺tomcat服務(wù)器
不管刷新多少遍,始終訪問的是同一臺tomcat服務(wù)器

負載均衡其他幾個配置
配置1:
upstream backserver {
???? server 127.0.0.1:9100;
#其它所有的非backup機器down的時候,才請求backup機器
???? server 127.0.0.1:9200 backup;
}
配置2:
upstream backserver {
server 127.0.0.1:9100;
#down表示當前的server是down狀態(tài),不參與負載均衡
????server 127.0.0.1:9200 down;
}
一般在項目上線的時候,可以分配部署不同的服務(wù)器上,然后對Nginx重新reload。
reload不會影響用戶的訪問,或者可以給一個提示頁面,系統(tǒng)正在升級...
最后,奉上Nginx視頻教程,視頻學(xué)習(xí)效果更佳,走過路過別忘素質(zhì)三連哦~~

