Nginx搭配Tomcat實現(xiàn)負載均衡
Python實戰(zhàn)社群
Java實戰(zhàn)社群
長按識別下方二維碼,按需求添加
掃碼關(guān)注添加客服
進Python社群▲
掃碼關(guān)注添加客服
進Java社群▲
Nginx簡介
Nginx 是一款自由的、開源的、高性能的 HTTP 服務(wù)器和反向代理服務(wù)器,中國互聯(lián)網(wǎng)大廠使用nginx網(wǎng)站有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。
什么是反向代理呢?
反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器。簡單來說就是真實的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪問,所以需要一臺代理服務(wù)器。
Nginx 的負載均衡算法:
(1)weight 輪詢(默認):接收到的請求按照順序逐一分配到不同的后端服務(wù)器,即使在使用過程中,某一臺后端服務(wù)器宕機,Nginx 會自動將該服務(wù)器剔除出隊列,請求受理情況不會受到任何影響。
這種方式下,可以給不同的后端服務(wù)器設(shè)置一個權(quán)重值(weight),用于調(diào)整不同的服務(wù)器上請求的分配率。權(quán)重數(shù)據(jù)越大,被分配到請求的幾率越大;該權(quán)重值,主要是針對實際工作環(huán)境中不同的后端服務(wù)器硬件配置進行調(diào)整的。
(2)ip_hash:每個請求按照發(fā)起客戶端的 ip 的 hash 結(jié)果進行匹配,這樣的算法下一個固定 ip 地址的客戶端總會訪問到同一個后端服務(wù)器,這也在一定程度上解決了集群部署環(huán)境下 Session 共享的問題。
(3)fair:智能調(diào)整調(diào)度算法,動態(tài)的根據(jù)后端服務(wù)器的請求處理到響應(yīng)的時間進行均衡分配。
響應(yīng)時間短處理效率高的服務(wù)器分配到請求的概率高,響應(yīng)時間長處理效率低的服務(wù)器分配到的請求少,它是結(jié)合了前兩者的優(yōu)點的一種調(diào)度算法。但是需要注意的是 Nginx 默認不支持 fair 算法,如果要使用這種調(diào)度算法,請安裝 upstream_fair 模塊。
(4)url_hash:按照訪問的 URL 的 hash 結(jié)果分配請求,每個請求的 URL 會指向后端固定的某個服務(wù)器,可以在 Nginx 作為靜態(tài)服務(wù)器的情況下提高緩存效率。同樣要注意 Nginx 默認不支持這種調(diào)度算法,要使用的話需要安裝 Nginx 的 hash 軟件包。
安裝Nginx
下載Nginx安裝包
Nginx 官網(wǎng)(https://nginx.org)
本次選擇的是nginx-1.6.3.tar.gz版本,安裝環(huán)境是centos7。
然后把下載好的安裝包通過SecureCRT工具上傳至Centos7中或者使用wget命令下載安裝包
#下載nginx-1.6.3.tar.gz
wget?-c?https://nginx.org/download/nginx-1.6.3.tar.gz
若是出現(xiàn)下面的提示
-bash:?wget:?command?not?found
則執(zhí)行
yum?install?wget
安裝Nginx的前提環(huán)境
1)安裝 gcc 環(huán)境
yum?install?gcc-c++
2) 安裝 PCRE 依賴庫
yum?install?-y?pcre?pcre-devel
3)安裝 zlib 依賴庫
yum?install?-y?zlib?zlib-devel
4) 安裝 OpenSSL 安全套接字層密碼庫
yum?install?-y?openssl?openssl-devel
5)解壓 Nginx
#解壓文件夾
tar?-zxvf?nginx-1.6.3.tar.gz
6)執(zhí)行配置命令
cd進入文件夾
cd?nginx-1.6.3
#執(zhí)行配置命令
./configure
出現(xiàn)如下圖:表示成功

7)執(zhí)行編譯安裝命令
make?install
8)查找安裝路徑
whereis?nginx
結(jié)果如下:

9)啟動服務(wù)
進入 nginx 的目錄
cd?/usr/local/nginx/sbin/
執(zhí)行如下命令
#啟動
./nginx
#停止,此方式相當(dāng)于先查出nginx進程id再使用kill命令強制殺掉進程
./nginx?-s?stop
#停止,此方式停止步驟是待nginx進程處理任務(wù)完畢進行停止
./nginx?-s?quit
#重新加載配置文件,Nginx服務(wù)不會中斷
./nginx?-s?reload
10)修改配置文件
比如,修改端口號,默認端口號為80,咱們這里改成83;
進入配置文件夾
cd?/usr/local/nginx/conf
備份原始配置文件
cp?nginx.conf?nginx.conf.back
編輯nginx.conf配置文件
vim?nginx.conf
找到server中的listen,修改端口號為83

啟動服務(wù)
#要進入sbin/下才能執(zhí)行
./nginx
查看 nginx 進程
ps?-ef|grep?nginx

到此,nginx 安裝基本完成,直接在瀏覽器上訪問服務(wù)器地址:虛擬機的ip:83,就可以進入頁面

安裝Tomcat
tomcat 官網(wǎng)(http://tomcat.apache.org/)
本次選擇的是最新版本,本次安裝環(huán)境是centos7。
我是直接用wget命令下載

解壓文件夾
tar?-zxvf?apache-tomcat-8.5.40.tar.gz
重新命名
mv?apache-tomcat-8.5.40?tomcat-1
同樣的,再次解壓安裝包,命名為tomcat-2
mv?apache-tomcat-8.5.40?tomcat-2
1)修改 tomcat 端口號
將 tomcat-1 的 http 端口設(shè)置為8080,將 tomcat-2 的 http 端口設(shè)置為8081。
進入tomcat的conf文件夾,修改server.xml
vim?server.xml
修改SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3端口,使其錯開,避免重啟的時候,報端口被占用問題
tomcat-1 的SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3設(shè)置如下:
<Server?port="9005"?shutdown="SHUTDOWN">
...
<Connector?port="8080"?protocol="HTTP/1.1"
???????????????connectionTimeout="20000"
???????????????redirectPort="9443"?/>
<Connector?port="9009"?protocol="AJP/1.3"?redirectPort="9443"?/>
...
Server>
tomcat-2 的SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3設(shè)置如下:
<Server?port="10005"?shutdown="SHUTDOWN">
...
<Connector?port="8081"?protocol="HTTP/1.1"
???????????????connectionTimeout="20000"
???????????????redirectPort="10443"?/>
<Connector?port="10009"?protocol="AJP/1.3"?redirectPort="10443"?/>
...
Server>
2)啟動服務(wù)
分別進入 tomcat-1 、 tomcat-2 的bin文件夾,執(zhí)行腳本,啟動服務(wù)
sh?startup.sh
查看服務(wù)是否啟動成功
ps?-ef|grep?tomcat
可以直接在瀏覽器上分別輸入ip:8080、ip:8081進行訪問了,結(jié)果如下:

3)編寫Html,為了便于測試,我們創(chuàng)建一個html格式的頁面,進入tomcat-1的webapps文件夾,刪除ROOT文件夾里面的東西,創(chuàng)建index.html文件,內(nèi)容如下:
<html>
????<head>
????????<meta?charset="utf-8">
????????<title>title>
????head>
????<body>
????????Hello?server1!
????body>
html>
4)進入tomcat-2的webapps文件夾,刪除ROOT文件夾里面的東西,創(chuàng)建index.html文件;
<html>
????<head>
????????<meta?charset="utf-8">
????????<title>title>
????head>
????<body>
????????Hello?server2!
????body>
html>
5)測試,創(chuàng)建好了之后,分別在瀏覽器上訪問ip:8080、ip:8081。結(jié)果如下:


Nginx負載均衡配置
1)進入 Nginx 的配置文件夾
cd?/usr/local/nginx/conf
2)編輯nginx.conf配置文件
vim?nginx.conf
3)新增upstream集群配置點,配置如下:
worker_processes??1;
events?{
????worker_connections??1024;
}
http?{??
????include???????mime.types;
????default_type??application/octet-stream;
????sendfile????????on;
????keepalive_timeout??65;
????gzip??on;
?????#服務(wù)器的集群(這個就是我們要配置的地方)
?????#test.com:服務(wù)器集群名字,自定義
????upstream??test.com?{
????????#服務(wù)器配置?? weight是權(quán)重的意思,權(quán)重越大,分配的概率越大。
????????#127.0.0.1:8080、127.0.0.1:8081對應(yīng)tomcat服務(wù)器地址
????????server????127.0.0.1:8080??weight=1;
????????server????127.0.0.1:8081??weight=2;
????}
????server?{??
????????listen???????83;
????????server_name??localhost;
????location?/?{
????·????????#配置反向代理地址
????????????proxy_pass?http://test.com;
????????????proxy_redirect?default;
????????}
????????error_page???500?502?503?504??/50x.html;??
????????location?=?/50x.html?{??
????????????root???html;??
????????}??
????}??
}
參數(shù)說明:
worker_processes:工作進程的個數(shù),一般與計算機的cpu核數(shù)一致
worker_connections:單個進程最大連接數(shù)(最大連接數(shù)=連接數(shù)*進程數(shù))
include:文件擴展名與文件類型映射表
default_type:默認文件類型
sendfile :開啟高效文件傳輸模式,sendfile指令指定nginx是否調(diào)用sendfile函數(shù)來輸出文件,對于普通應(yīng)用設(shè)為
on,如果用來進行下載等應(yīng)用磁盤IO重負載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的負載。注意:如果圖片顯示不正常把這個改成off。keepalive_timeout:長連接超時時間,單位是秒
upstream:服務(wù)器的集群配置點
4)配置好之后,進入/usr/local/nginx/sbin/ 文件夾,重新刷新配置文件
./nginx?-s?reload
5)測試,訪問Nginx服務(wù)器所在ip:83地址,多次刷新,看看效果:

多刷幾次

搭建失敗的原因:
在搭建的過程很多人都可能搭建失敗,訪問不了Nginx的頁面,最主要的原因還是防火墻的原因,當(dāng)值訪問被攔截,訪問不了Nginx頁面。


近期精彩內(nèi)容推薦:??


