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

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

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

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

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

安裝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 端口號(hào)
將 tomcat-1 的 http 端口設(shè)置為8080,將 tomcat-2 的 http 端口設(shè)置為8081。
進(jìn)入tomcat的conf文件夾,修改server.xml
vim?server.xml
修改SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3端口,使其錯(cuò)開,避免重啟的時(shí)候,報(bào)端口被占用問題
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)啟動(dòng)服務(wù)
分別進(jìn)入 tomcat-1 、 tomcat-2 的bin文件夾,執(zhí)行腳本,啟動(dòng)服務(wù)
sh?startup.sh
查看服務(wù)是否啟動(dòng)成功
ps?-ef|grep?tomcat
可以直接在瀏覽器上分別輸入ip:8080、ip:8081進(jìn)行訪問了,結(jié)果如下:

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


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

多刷幾次

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


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


