目錄
一、Nginx負(fù)載均衡實現(xiàn)原理
1.Nginx 實現(xiàn)負(fù)載均衡是通過反向代理實現(xiàn)
?2、Nginx配置反向代理主要參數(shù)
3、動靜分離原理
?4、Nginx靜態(tài)處理優(yōu)勢
5、并發(fā)量和吞吐量計算
二:7層反向代理
? ? ? ? ?1、環(huán)境準(zhǔn)備
?2、配置Nginx Server
3、tomcat1 和tomcat2配置
4、?搭建tomcat3
5、設(shè)置tomcat1
6、設(shè)置tomcat2
?7、Nginx進(jìn)行負(fù)載均衡和動靜分離設(shè)置?
?8、進(jìn)行負(fù)載均衡和動靜分離配置
9、測試效果?
三: 四層代理配置
四:Nginx 負(fù)載均衡模式
1、rr 輪詢 負(fù)載均衡模式:
2、least_conn 最少連接:
3、ip_hash 負(fù)載均衡模式:
4、fair(第三方)負(fù)載均衡模式:
5、url_hash(第三方)負(fù)載均衡模式:
一、Nginx負(fù)載均衡實現(xiàn)原理
1.Nginx 實現(xiàn)負(fù)載均衡是通過反向代理實現(xiàn)
Nginx服務(wù)器作為前端,Tomcat服務(wù)器作為后端,web頁面請求由Nginx服務(wù)來進(jìn)行轉(zhuǎn)發(fā)。但是不是把所有的web請求轉(zhuǎn)發(fā),而是將靜態(tài)頁面請求Nginx服務(wù)器自己來處理,動態(tài)頁面請求,轉(zhuǎn)發(fā)給后端的Tomcat服務(wù)器來處理。
反向代理(Reverse Proxy)是指以代理服務(wù)器(例:Nginx) 來接受 internet 上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器(例:Tomcat),并將從服務(wù)器上得到的結(jié)果返回給 internet 上請求連接的客戶端,此時代理服務(wù)器(例:Nginx)對外就表現(xiàn)為一個反向代理服務(wù)器。
我們從客戶端的視野來看,實際上客戶端并不知道真實的服務(wù)提供者是哪臺服務(wù)器,它只知道它請求了反向代理服務(wù)器。因此反向代理這種方式又對外隱藏了真實服務(wù)器的地址,從一定程度上降低了安全隱患。
?2、Nginx配置反向代理主要參數(shù)
配置后端服務(wù)器池,以提供響應(yīng)數(shù)據(jù)
upstream 服務(wù)器名 {}
配置將訪問請求轉(zhuǎn)發(fā)給后端服務(wù)器池名
proxy_pass http://服務(wù)器名
3、動靜分離原理
服務(wù)端接收來自客戶端的請求中,既有靜態(tài)資源也有動態(tài)資源,靜態(tài)資源由Nginx提供服務(wù),動態(tài)資源Nginx轉(zhuǎn)發(fā)至后端
?4、Nginx靜態(tài)處理優(yōu)勢
- Nginx處理靜態(tài)頁面的效率遠(yuǎn)高于Tomcat的處理能力
- 若Tomcat的請求量為1000次,則Nginx的請求量為6000次
- Tomcat每秒的吞吐量為0.6M,Nginx的每秒吞吐量為3 .6M
- Nginx處理靜態(tài)資源的能力是Tomcat處理的6倍
5、并發(fā)量和吞吐量計算
并發(fā)量:以10分鐘有5000萬用戶平均每人訪問2次為例,并發(fā)量為每秒(5000w2)/(6010)=16.7萬,再double下,就說每秒25萬并發(fā)量
吞吐量可以理解成帶寬流量,以每個請求0.5KB大小,并發(fā)每秒25萬,0.5/1024MB250000=122MB8bit=977Mbps
二:7層反向代理
1、環(huán)境準(zhǔn)備
主機(jī) | 操作系統(tǒng) | IP地址 | 所需軟件 |
---|---|---|---|
Nginx Server | CentOS7 | 192.168.231.101 | nginx-1.12.0.tar.gz |
Tomcat Server1 | CentOS7 | 192.168.231.100:8080 | apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm |
Tomcat Server2 | CentOS7 | 192.168.231.100:8081 | apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm |
Tomcat Server3 | CentOS7 | 192.168.231.102:8080 | apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm |
實驗邏輯圖:?
2、配置Nginx Server
systemctl stop firewalld
setenforce 0
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \ #啟用文件修改支持
--with-http_stub_status_module \ #啟用狀態(tài)統(tǒng)計
--with-http_gzip_static_module \ #啟用 gzip靜態(tài)壓縮
--with-http_flv_module \ #啟用 flv模塊,提供對 flv 視頻的偽流支持
--with-http_ssl_module #啟用 SSL模塊,提供SSL加密功能
--with-stream #啟用 stream模塊,提供4層調(diào)度
----------------------------------------------------------------------------------------------------------
./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-stream
make && make install
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 enable nginx.service
3、tomcat1 和tomcat2配置
4、?搭建tomcat3
systemctl stop firewalld
setenforce 0
#軟件包的方式安裝jdk環(huán)境
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
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
tar zxvf apache-tomcat-8.5.16.tar.gz
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
netstat -ntap | grep 8080
5、設(shè)置tomcat1
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 test1 page</title> #指定為 test2 頁面
</head>
<body>
<% out.println("動態(tài)頁面 1,http://www.test1.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
?????
?
6、設(shè)置tomcat2
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("動態(tài)頁面 2,http://www.test2.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
?
?7、Nginx進(jìn)行負(fù)載均衡和動靜分離設(shè)置?
vim /usr/local/nginx/html/index.html
<html>
<body>
<h1> this is Nginx static test !</h2>
<img src="game.jpg"/>
</body>
</html>
?8、進(jìn)行負(fù)載均衡和動靜分離配置
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
#配置負(fù)載均衡的服務(wù)器列表,weight參數(shù)表示權(quán)重,權(quán)重越高,被分配到的概率越大
upstream tomcat_server {
server 192.168.231.100:8080 weight=1;
server 192.168.231.100:8081 weight=1;
server 192.168.231.102:8080 weight=1;
}
server {
listen 80;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
#配置Nginx處理動態(tài)頁面請求,將 .jsp文件請求轉(zhuǎn)發(fā)到Tomcat 服務(wù)器處理
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server;
#設(shè)置后端的Web服務(wù)器可以獲取遠(yuǎn)程客戶端的真實IP
##設(shè)定后端的Web服務(wù)器接收到的請求訪問的主機(jī)名(域名或IP、端口),默認(rèn)HOST的值為proxy_pass指令設(shè)置的主機(jī)名。如果反向代理服務(wù)器不重寫該請求頭的話,那么后端真實服務(wù)器在處理時會認(rèn)為所有的請求都來自反向代理服務(wù)器,如果后端有防攻擊策略的話,那么機(jī)器就被封掉了。
proxy_set_header HOST $host;
##把$remote_addr賦值給X-Real-IP,來獲取源IP
proxy_set_header X-Real-IP $remote_addr;
##在nginx 作為代理服務(wù)器時,設(shè)置的IP列表,會把經(jīng)過的機(jī)器ip,代理機(jī)器ip都記錄下來
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#配置Nginx處理靜態(tài)圖片請求
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html;
expires 10d;
}
location / {
root html;
index index.html index.htm;
}
......
}
......
}
????????
9、測試效果?
?
?
三: 四層代理配置
- Nginx 負(fù)載均衡服務(wù)器: 192.168.137.101
- 兩臺Nginx 服務(wù)器七層代理服務(wù)器 192.168.137.102;192.168.137.103
- 一臺tomcat服務(wù)器 : 192.168.137.10
兩臺服務(wù)器七層代理操作同上,tomcat操作也同上
?
?所有的Nginx服務(wù)器配置文件長連接超時設(shè)置為0關(guān)閉
配置Nginx負(fù)載均衡服務(wù)器
./configure --with-stream
和http同等級:所以一般只在http上面一段設(shè)置,
stream {
upstream appserver {
server 192.168.80.100:8080 weight=1;
server 192.168.80.101:8080 weight=1;
server 192.168.80.101:8081 weight=1;
}
server {
listen 8080;
proxy_pass appserver;
}
}
http {
......
?
?瀏覽器訪問Nginx負(fù)載均衡服務(wù)器
?
四:Nginx 負(fù)載均衡模式
1、rr 輪詢 負(fù)載均衡模式:
每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果超過了最大失敗次數(shù)后(max_fails,默認(rèn)1),在失效時間內(nèi)(fail_timeout,默認(rèn)10秒),該節(jié)點(diǎn)失效權(quán)重變?yōu)?,超過失效時間后,則恢復(fù)正常,或者全部節(jié)點(diǎn)都為down后,那么將所有節(jié)點(diǎn)都恢復(fù)為有效繼續(xù)探測,一般來說rr可以根據(jù)權(quán)重來進(jìn)行均勻分配。
2、least_conn 最少連接:
優(yōu)先將客戶端請求調(diào)度到當(dāng)前連接最少的服務(wù)器。
3、ip_hash 負(fù)載均衡模式:
每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決session的問題,但是ip_hash會造成負(fù)載不均,有的服務(wù)請求接受多,有的服務(wù)請求接受少,所以不建議采用ip_hash模式,session 共享問題可用后端服務(wù)的 session 共享代替 nginx 的 ip_hash(使用后端服務(wù)器自身通過相關(guān)機(jī)制保持session同步)。
4、fair(第三方)負(fù)載均衡模式:
按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。
5、url_hash(第三方)負(fù)載均衡模式:
基于用戶請求的uri做hash。和ip_hash算法類似,是對每個請求按url的hash結(jié)果分配,使每個URL定向到同一個后端服務(wù)器,但是也會造成分配不均的問題,這種模式后端服務(wù)器為緩存時比較好。
?文章來源:http://www.zghlxwxcb.cn/news/detail-751676.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-751676.html
到了這里,關(guān)于Nginx+Tomcat實現(xiàn)負(fù)載均衡、動靜分離的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!