手把手教你,使用Nginx搭配Tomcat實現(xiàn)負載均衡!
一、背景介紹
Nginx(發(fā)音同engine x)是異步框架的網(wǎng)頁服務器,也可以用作反向代理、負載平衡器和HTTP緩存。該軟件由伊戈爾·賽索耶夫創(chuàng)建并于2004年首次公開發(fā)布。2011年成立同名公司以提供支持。2019年3月11日,Nginx公司被F5 Networks以6.7億美元收購。
傳統(tǒng)模型下,一個項目部署在一臺tomcat上,這個時候,假如tomcat因為服務器資源不夠,突然掛機了,那么整個項目就無法使用,給客戶造成的損失可想而知!
圖片
Nginx就可以避免單臺服務如果掛機,依然能保證服務正常使用,當我們把項目war包部署到三臺服務器上時,即使A、B服務器都掛了,依然能夠通過服務器C訪問項目資源!
圖片
好了,啥也不說了,直接開始干!
二、Nginx安裝
2.1、下載Nginx安裝包
直接訪問Nginx官網(wǎng)(https://nginx.org),下載對應的安裝包,本次案例選擇的是nginx-1.6.3.tar.gz版本,安裝環(huán)境是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
提示wget命令找不到,使用如下命令,進行安裝,之后再次執(zhí)行上述下載命令
yum install wget
2.2、安裝Nginx
在按照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 安裝完以上環(huán)境庫之后,接著進行解壓操作
#解壓文件夾
tar -zxvf nginx-1.6.3.tar.gz
6)執(zhí)行配置命令 cd進入文件夾
cd nginx-1.6.3
執(zhí)行配置命令
./configure
如下圖,表示執(zhí)行配置成功!
圖片
當然,也可以執(zhí)行自定義配置文件,例如:
./configure \
--prefix=/usr/local/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/conf/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注意:臨時文件目錄指定為/var/temp/nginx,需要在/var下創(chuàng)建temp及nginx目錄 7)執(zhí)行編譯安裝命令
make install
8)查找安裝路徑
whereis nginx
結果如下:
圖片
9)啟動服務 進入nginx的目錄
cd /usr/local/nginx/sbin/
圖片
執(zhí)行如下命令:
#啟動
./nginx
#停止,此方式相當于先查出nginx進程id再使用kill命令強制殺掉進程
./nginx -s stop
#停止,此方式停止步驟是待nginx進程處理任務完畢進行停止
./nginx -s quit
#重新加載配置文件,Nginx服務不會中斷
./nginx -s reload
10)修改配置文件 比如,修改端口號,默認端口號為80,咱們這里改成81;
進入配置文件夾
cd /usr/local/nginx/conf
備份原始配置文件
cp nginx.conf nginx.conf.back
編輯nginx.conf配置文件
vim nginx.conf
圖片
找到server中的listen,修改端口號為81
圖片
啟動服務
./nginx
查看nginx進程
ps -ef|grep nginx
圖片
到此,nginx安裝基本完成,直接在瀏覽器上訪問服務器地址ip:81,就可以進入頁面
圖片
三、Tomcat安裝
直接訪問tomcat官網(wǎng)(http://tomcat.apache.org/),下載對應的安裝包,本次案例選擇的是apache-tomcat-8.5.45.tar.gz版本,本次安裝環(huán)境是centos7。
圖片
上傳到對應的服務器文件夾中,之后解壓文件夾
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端口號將tomcat1的http端口設置為8080,將tomcat2的http端口設置為8081。
進入tomcat的conf文件夾,修改server.xml
vim server.xml
修改SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3端口,使其錯開,避免重啟的時候,報端口被占用問題
tomcat1的SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3設置如下:
<!--關閉服務端口-->
<Server port="9005" shutdown="SHUTDOWN">
...
<!--HTTP服務端口8080,跳轉端口9443-->
<Connector port="8080" protocol="HTTP/1.1"
cnotallow="20000"
redirectPort="9443" />
<!--AJP服務端口-->
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
...
</Server>
tomcat2的SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3設置如下:
<!--關閉服務端口-->
<Server port="10005" shutdown="SHUTDOWN">
...
<!--HTTP服務端口8081-->
<Connector port="8081" protocol="HTTP/1.1"
cnotallow="20000"
redirectPort="10443" />
<!--AJP服務端口-->
<Connector port="10009" protocol="AJP/1.3" redirectPort="10443" />
...
</Server>
2)啟動服務 分別進入tomcat1、tomcat2的bin文件夾,執(zhí)行腳本,啟動服務
sh startup.sh
查看服務是否啟動成功
ps -ef|grep tomcat
圖片
說明已經(jīng)啟動成功了,可以直接在瀏覽器上分別輸入ip:8080、ip:8081進行訪問了,結果如下:
圖片
3)編寫Html 為了便于測試,我們創(chuàng)建一個html格式的頁面,文件命名為index.html,內容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
Hello server!
</body>
</html>
進入tomcat的webapps文件夾,刪除ROOT文件夾里面的東西,創(chuàng)建index.html文件;
在tomcat-1中,index內容如下:
圖片
在tomcat-2中,index內容如下:
圖片
4)測試 創(chuàng)建好了之后,分別在瀏覽器上訪問ip:8080、ip:8081;
ip:8080,結果如下:
圖片
ip:8081,結果如下:
圖片
四、Nginx實現(xiàn)負載均衡
進入Nginx的配置文件夾
cd /usr/local/nginx/conf
編輯nginx.conf配置文件
vim nginx.conf
主要新增upstream集群配置點,配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
#服務器的集群(這個就是我們要配置的地方)
#test.com:服務器集群名字,自定義
upstream test.com {
#服務器配置 weight是權重的意思,權重越大,分配的概率越大。
#127.0.0.1:8080、127.0.0.1:8081對應tomcat服務器地址
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
server {
listen 81;
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是否調用sendfile函數(shù)來輸出文件,對于普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網(wǎng)絡I/O處理速度,降低系統(tǒng)的負載。注意:如果圖片顯示不正常把這個改成off。
- keepalive_timeout:長連接超時時間,單位是秒
- upstream:服務器的集群配置點
配置好之后,進入/usr/local/nginx/sbin/ 文件夾,重新刷新配置文件
./nginx -s reload
最后,訪問Nginx服務器所在ip:81地址,多次刷新,看看效果:
圖片
圖片
至此,Nginx與Tomcat搭配實現(xiàn)負載均衡已經(jīng)配置完了,是不是很酷!
趕緊去試試吧!