Nginx+Tomcat負(fù)載均衡、動(dòng)靜分離群集
一.Nginx應(yīng)用
Nginx是一款非常優(yōu)秀的HTTP服務(wù)器軟件,支持高達(dá)50000個(gè)并發(fā)連接數(shù)的響應(yīng)、擁有強(qiáng)大的靜態(tài)資源處理能力、運(yùn)行穩(wěn)定、內(nèi)存和CPU等系統(tǒng)資源消耗非常低
目前很多大型網(wǎng)站都應(yīng)用Nginx服務(wù)器作為后端網(wǎng)站程序的反向代理及負(fù)載均衡器,提升整個(gè)站點(diǎn)的負(fù)載并發(fā)能力
Nginx實(shí)現(xiàn)負(fù)載均衡是通過(guò)反向代理實(shí)現(xiàn)
Nginx動(dòng)靜分離實(shí)現(xiàn)原理
服務(wù)端接收來(lái)自客戶端的請(qǐng)求中,既有靜態(tài)資源也有動(dòng)態(tài)資源由Nginx提供服務(wù),動(dòng)態(tài)資源Nginx轉(zhuǎn)發(fā)至后端
Nginx靜態(tài)處理優(yōu)勢(shì)
- Nginx處理靜態(tài)頁(yè)面的效率遠(yuǎn)高于Tomcat的處理能力
- 若Tomcat的請(qǐng)求量為1000次,則Nginx的請(qǐng)求量為6000次
- Tomcat每秒的吞吐量為0.6M,Nginx的每秒吞吐量為3.6M
- Nginx處理靜態(tài)資源的能力是Tomcat處理的6倍
二.部署案例過(guò)程(7層反向代理)
主機(jī) | IP |
---|---|
負(fù)載均衡器 | 192.168.230.5 |
部署Tomcat應(yīng)用服務(wù)器 | 192.168.230.4 |
Tomcat多實(shí)例服務(wù)器 | 192.168.230.3 |
關(guān)閉防火墻與selinux
systemctl stop firewalld
setenforce 0
1.部署Nginx負(fù)載均衡器(7-3)
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
cd /opt
tar xf nginx-1.24.0.tar.gz
cd nginx-1.24.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-stream
make [-j2] && make install
--with-file-aio ###啟用文件修改支持
--with-http_stub_status_module ###啟用狀態(tài)統(tǒng)計(jì)
--with-http_gzip_static_module ###啟用gzip靜態(tài)壓縮
--with-http_flv_module ###啟用flv模塊,提供對(duì)flv視頻的偽流支持
--with-http_ssl_module ###啟用SSL模塊,提供SSL加密功能
--with-stream ###啟用stream模塊,提供4層調(diào)度
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl status nginx.service
netstat -lntp | grep nginx
echo '<html><body><h1>hhhh</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
###配置負(fù)載均衡的服務(wù)器列表,weight參數(shù)表示權(quán)重,權(quán)重越高,被分配到的概率越大
upstream tomcat_server {
server 192.168.230.4:8080 weight=1;
server 192.168.230.3:8080 weight=1;
server 192.168.230.3:8081 weight=1;
}
server {
listen 80;
server_name www.xc.com;
charset utf-8;
#access_log logs/host.access.log main;
###配置Nginx處理動(dòng)態(tài)頁(yè)面請(qǐng)求,將.jsp文件請(qǐng)求轉(zhuǎn)發(fā)到Tomcat服務(wù)器處理
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server; ###設(shè)置后端的Web服務(wù)器可以獲取遠(yuǎn)程客戶端的真實(shí)IP
###設(shè)定后端的Web服務(wù)器接收到的請(qǐng)求訪問(wèn)的主機(jī)名(域名或IP、端口),默認(rèn)HOST的值為proxy_pass指令設(shè)置的主機(jī)名。如果反向代理服務(wù)器不重寫(xiě)該請(qǐng)求頭的話,那么后端真實(shí)服務(wù)器在處理時(shí)會(huì)認(rèn)為所有的請(qǐng)求都來(lái)自反向代理服務(wù)器,如果后端有防攻擊策略的話,那么機(jī)器就被封掉了
proxy_set_header HOST $host; ###把$remote_addr賦值給X-Real-IP,來(lái)獲取源IP
proxy_set_header X-Real-IP $remote_addr; ###在nginx作為代理服務(wù)器時(shí),設(shè)置的IP列表,會(huì)把經(jīng)過(guò)的機(jī)器ip,代理機(jī)器ip都記錄下來(lái)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
root html;
index index.html index.htm;
}
......
}
......
}
2.部署Tomcat應(yīng)用服務(wù)器(7-2)
###將安裝Tomcat所需軟件包傳到/opt目錄下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile.d/java.sh
java -version
cd /opt
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh
netstat -natp | grep 8080
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title> #指定為 test1 頁(yè)面
</head>
<body>
<% out.println("動(dòng)態(tài)頁(yè)面 1,http://www.test1.com");%>
</body>
</html>
vim /usr/local/tomcat/conf/server.xml
###由于主機(jī)名name配置都為localhost,需要?jiǎng)h除前面的 HOST配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
</Context>
</Host>
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
netstat -lntp | grep java
3.部署Tomcat多實(shí)例應(yīng)用服務(wù)器(7-1)
部署好多實(shí)例后配置動(dòng)靜分離
mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title> ###指定為test2頁(yè)面
</head>
<body>
<% out.println("動(dòng)態(tài)頁(yè)面 2,http://www.test2.com");%>
</body>
</html>
vim /usr/local/tomcat/tomcat1/conf/server.xml
###刪除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title> ###指定為test3頁(yè)面
</head>
<body>
<% out.println("動(dòng)態(tài)頁(yè)面 3,http://www.test3.com");%>
</body>
</html>
vim /usr/local/tomcat/tomcat2/conf/server.xml
###刪除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>
/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
測(cè)試靜態(tài)頁(yè)面效果
瀏覽器訪問(wèn) http://192.168.230.5
測(cè)試負(fù)載均衡效果,不斷刷新瀏覽器測(cè)試
瀏覽器訪問(wèn) http://192.168.230.5/test/index.jsp
Nginx 負(fù)載均衡模式:
-
rr(round robin) 輪詢 負(fù)載均衡模式:
每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果超過(guò)了最大失敗次數(shù)后(max_fails,默認(rèn)1),在失效時(shí)間內(nèi)(fail_timeout,默認(rèn)10秒),該節(jié)點(diǎn)失效權(quán)重變?yōu)?,超過(guò)失效時(shí)間后,則恢復(fù)正常,或者全部節(jié)點(diǎn)都為down后,那么將所有節(jié)點(diǎn)都恢復(fù)為有效繼續(xù)探測(cè),一般來(lái)說(shuō)rr可以根據(jù)權(quán)重來(lái)進(jìn)行均勻分配 - wrr(weight round robin)加權(quán)輪詢
-
least_conn 最少連接:
優(yōu)先將客戶端請(qǐng)求調(diào)度到當(dāng)前連接最少的服務(wù)器 -
ip_hash 負(fù)載均衡模式:
每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題,但是ip_hash會(huì)造成負(fù)載不均,有的服務(wù)請(qǐng)求接受多,有的服務(wù)請(qǐng)求接受少,所以不建議采用ip_hash模式,session共享問(wèn)題可用后端服務(wù)的session共享代替nginx的ip_hash(使用后端服務(wù)器自身通過(guò)相關(guān)機(jī)制保持session同步) -
fair(第三方)負(fù)載均衡模式:
按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配 -
url_hash(第三方)負(fù)載均衡模式:
基于用戶請(qǐng)求的uri做hash。和ip_hash算法類似,是對(duì)每個(gè)請(qǐng)求按url的hash結(jié)果分配,使每個(gè)URL定向到同一個(gè)后端服務(wù)器,但是也會(huì)造成分配不均的問(wèn)題,這種模式后端服務(wù)器為緩存時(shí)比較好 - random 隨機(jī)分配
- hash $remote_addr consistent 一致性hash算法, 客戶端IP哈希算法,是ip_hash算法的加強(qiáng)版
三.四層反向代理
再準(zhǔn)備兩臺(tái)虛擬機(jī),一臺(tái)同以上7層nginx反向代理配置相同,一臺(tái)做4層反向代理文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-487960.html
./configure --with-stream ###四層必備模塊
和http同等級(jí):所以一般只在http外面一段設(shè)置
vim /usr/local/nginx/conf/nginx.conf
stream {
upstream appserver {
server 192.168.230.5:80 weight=1;
server 192.168.230.6:80 weight=1;
}
server {
listen 80;
proxy_pass appserver;
}
}
http {
......
server {
listen 8080;
......
}
}
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-487960.html
到了這里,關(guān)于Nginx+Tomcat負(fù)載均衡、動(dòng)靜分離群集的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!