Tomcat+Nginx實現動靜分離和負載均衡架構部署
Tomcat+Nginx實現動靜分離和負載均衡架構部署
Tomcat
Tomcat簡介
- 最初是由Sun的軟體構架師詹姆斯鄧肯.戴維森開發
- 安裝Tomcat後, 安裝路徑下面的目錄和檔案,是使用或者配置Tomcat的重要檔案
Tomcat重要目錄
- bin:存放啟動和關閉Tomcat指令碼
- conf:存放Tomcat不同的配置檔案
- doc:存放Tomcat文件
- lib:存放Tomcat執行需要的庫檔案
- logs:存放Tomcat執行時的LOG檔案
- src:存放Tomcat的原始碼
- webapps:Tomcat的主要Web釋出目錄
- work:存放jsp編譯後產生的class檔案
Tomcat部署與測試網站的搭建
- 要求部署兩臺後端Tomcat伺服器
- 為了進行測試,搭建兩個內容不同的網站
- Tomcat部署與網站搭建步驟
- 關閉firewall防火牆
- 安裝JDK,配置JAVA環境
- 安裝Tomcat
- 建立 /web/webapp1目錄,修改server.html,將網站檔案目錄更改到/web/webapp1/路徑下
- /web/webapp1/下建立測試頁面index.jsp,並進行測試
Nginx
Nginx應用
- Nginx是一款非常優秀的HTTP伺服器軟體
- 支援高達50000個併發連線數的響應
- 擁有強大的靜態資源處理能力
- 執行穩定
- 記憶體、CPU等系統資源消耗非常低
- 目前很多大型網站都應用Nginx伺服器作為後端網站程式的反向代理及負載均衡器,提升整個站點的負載併發能力
Nginx負載均衡實現原理
- Nginx實現負載均衡是通過反向代理實現
- 反向代理原理
- Nginx配置反向代理的主要引數
- upstream 服務池名 { }
- 配置後端伺服器池,以提供響應資料
- proxy_pass http://服務池名
- 配置將訪問請求轉發給後端伺服器池的伺服器處理
- upstream 服務池名 { }
Nginx動靜分離實現原理
- 動靜分離原理
- 服務端接收來自客戶端的請求中,既有靜態資源也有動態資源,靜態資源由Nginx提供服務,動態資源Nginx轉發至後端
- 服務端接收來自客戶端的請求中,既有靜態資源也有動態資源,靜態資源由Nginx提供服務,動態資源Nginx轉發至後端
- Nginx靜態處理優勢
- Nginx處理靜態頁面的效率遠高於Tomcat的處理能力
- 若Tomcat的請求量為1000次,則Nginx的請求量為6000次
- Tomcat每秒的吞吐量為0.6M,Nginx的每秒吞吐量為3.6M
- Nginx處理靜態資源的能力是Tomcat處理的6倍
Nginx配置負載均衡、動靜分離
- 在Nginx伺服器上安裝Nginx,反向代理兩個Tomcat站點,並實現負載均衡
- 關閉Firewalld防火牆
- 安裝Nginx依賴軟體包
- 解壓並編譯安裝Nginx
- 配置nginx.conf,新增location靜態頁面處理及新增upstream配置段與proxy_pass
- 檢測配置檔案與啟動Nginx
- 測試負載均衡、動靜分離效果
實現動靜分離和負載均衡架構部署專案
專案準備
nginx1 : 20.0.0.13
nginx2 : 20.0.0.14
tomcat1 : 20.0.0.15
tomcat2 : 20.0.0.16
nfs : 20.0.0.17
client : 20.0.0.18
專案配置
在nfs上
[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# setenforce 0
[root@nfs ~]# mkdir /web1
[root@nfs ~]# mkdir /web2
[root@nfs ~]# cd /web1
[root@nfs web1]# vi index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>tomcat1</title>
</head>
<body>
<% out.println("this is tomcat1 server");%>
<div>動態頁面</div><br/><img src="1.jpg" />
</body>
</html>
[root@nfs web1]# cp index.jsp /web2
[root@nfs web1]# cd /web2
[root@nfs web2]# vi index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>tomcat2</title>
</head>
<body>
<% out.println("this is tomcat2 server");%>
<div>動態頁面</div><br/><img src="2.jpg" />
</body>
</html>
[root@nfs web2]#cd
[root@nfs ~]# vi /etc/exports
/web1 20.0.0.15(ro)
/web2 20.0.0.16(ro)
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# showmount -e
在tomcat1上編輯
先加入安裝包
[root@tomcat1 ~]# systemctl stop firewalld
[root@tomcat1 ~]# setenforce 0
[root@tomcat1 ~]# ll
[root@tomcat1 ~]# tar zxvf apache-tomcat-8.5.16.tar.gz #解壓軟體包
[root@tomcat1 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz
[root@tomcat1 ~]# mv jdk1.8.0_91/ /usr/local/java
[root@tomcat1 ~]# vi /etc/profile
在末尾新增
export JAVA_HOME=/usr/local/java # 設定全域性變數
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre #設定環境變數
[root@tomcat1 ~]# source /etc/profile
[root@tomcat1 ~]# echo $PATH
[root@tomcat1 ~]# java -version #檢視版本
[root@tomcat1 ~]# vi abc.java #編寫一個Java小程式來驗證
public class abc {
public static void main (String[] args) {
System.out.println("你好。。。。。");
}
}
[root@tomcat1 ~]# javac abc.java #編譯
[root@tomcat1 ~]# java abc
#可以顯示出測試內容,則Java元件是好的
安裝tomcat
先解壓縮安裝包
[root@tomcat1 ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8
[root@tomcat1 ~]# mkdir /webapp1
[root@tomcat1 ~]# mount 20.0.0.17:/web1 /webapp1 #掛載
[root@tomcat1 ~]# df -Th
[root@tomcat1 ~]# vi /usr/local/tomcat8/conf/server.xml #站點目錄
[root@tomcat1 ~]# vi /usr/local/tomcat8/conf/server.xml
新增
<Context docBase="/webapp1" path="" reloadable="false">
</Context>
驗證
[root@tomcat1 ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@tomcat1 ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@tomcat1 ~]#tomcatup
[root@tomcat1 ~]# netstat -anpt | grep 8080
[root@tomcat1 ~]# curl http://localhost:8080
在/webapp1的資料夾中加入圖片
訪問測試
在tomcat2上
步驟與部署tomcat1一致
修改web1,webapp1為web2,webapp2即可
在webapp2檔案中加入
訪問測試
部署排程器
在nginx1上部署
先新增nginx,keepalived安裝包
[root@nginx1 ~]# ls -lh
[root@nginx1 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel
[root@nginx1 ~]# useradd -M -s /sbin/nologin nginx #建立不可登入,不帶宿主的使用者
[root@nginx1 ~]# tar zxvf nginx-1.12.2.tar.gz # 解壓縮
[root@nginx1 ~]# cd nginx-1.12.2/
[root@nginx1 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx #安裝路徑,屬主,屬組設定
[root@nginx1 nginx-1.12.2]# make && make install # 編譯安裝
[root@nginx1 nginx-1.12.2]# ln -s /usr/local/nginx/conf/nginx.conf /etc/ #建立設定連結
[root@nginx1 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ # 建立命令連結
[root@nginx1 nginx-1.12.2]# cd
[root@nginx1 ~]# vi /usr/local/nginx/conf/nginx.conf
upstream tomcat_server {
server 20.0.0.15:8080 weight=1;
server 20.0.0.16:8080 weight=1;
}
location ~ \.jsp$ {
proxy_pass http://tomcat_server;
}
[root@nginx1 ~]# nginx -t #檢查語法
[root@nginx1 ~]# nginx #服務啟動
[root@nginx1 ~]# netstat -anpt | grep 80 # 檢視埠狀態
在/usr/local/nginx/html中新增圖片
訪問測試
安裝keepalived
[root@nginx1 ~]# modprobe ip_vs #載入ip_vs模組
[root@nginx1 ~]# yum -y install ipvsadm.x86_64 #安裝管理軟體ipvsadm
[root@nginx1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel #安裝編譯工具及外掛
[root@nginx1 ~]# tar zxvf keepalived-2.0.13.tar.gz #解壓keepalived安裝包
[root@nginx1 ~]# cd keepalived-2.0.13/
[root@nginx1 keepalived-2.0.13]# ./configure --prefix=/ #配置安裝到/目錄下
[root@nginx1 keepalived-2.0.13]# make && make install #編譯與安裝
[root@nginx1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d/ #加入系統管理服務,用以支援systemctl管理
[root@nginx1 keepalived-2.0.13]# systemctl enable keepalived #設定開機啟動
[root@nginx1 keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf #編輯配置檔案
刪除所有
新增
! Configuration File for keepalived
global_defs {
router_id nginx1 # 本伺服器的名稱
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx.sh" #指令碼路徑 最後手動執行此指令碼,以確保指令碼能夠正常執行
interval 2 #檢測間隔時間 單位秒
weight 2
}
vrrp_instance vi_1 {
state MASTER
interface ens33
virtual_router_id 51 #虛擬路由編號,主從要一致
priority 110 #優先順序
adver_int 1 #檢查間隔,預設為1s (vrrp組播週期秒數)
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #呼叫檢測指令碼
}
virtual_ipaddress {
20.0.0.100 虛擬ip
}
}
[root@nginx1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d
[root@nginx1 keepalived-2.0.13]# vi /etc/init.d/keepalived
[root@nginx1 keepalived-2.0.13]# chmod 755 /etc/init.d
[root@nginx1 keepalived-2.0.13]# chkconfig --add keepalived
[root@nginx1 keepalived-2.0.13]# chkconfig --list
# chkconfig: 35 21 79 執行級別
配置keepalived
編寫指令碼
[root@nginx1 keepalived-2.0.13]# vi /usr/local/src/nginx.sh
[root@nginx1 keepalived-2.0.13]# chmod +x /usr/local/src/nginx.sh
[root@nginx1 keepalived-2.0.13]# systemctl start keepalived
[root@nginx1 keepalived-2.0.13]# systemctl status keepalived
[root@nginx1 ~]# tail -100 /var/log/messages #檢視日誌
[root@nginx1 ~]# ip addr #檢視虛擬地址
在nginx2上
新增安裝包
在html檔案中新增圖片
[root@nginx2 ~]# ls -lh
[root@nginx2 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel
[root@nginx2 ~]# useradd -M -s /sbin/nologin nginx #建立不可登入,不帶宿主的使用者
[root@nginx2 ~]# tar zxvf nginx-1.12.2.tar.gz #解壓縮
[root@nginx2 ~]# cd nginx-1.12.2/
[root@nginx2 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx #安裝路徑,屬主,屬組設定
[root@nginx2 nginx-1.12.2]# make && make install #編譯安裝
[root@nginx2 nginx-1.12.2]# ln -s /usr/local/nginx/conf/nginx.conf /etc/ #建立設定連結
[root@nginx2 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ #建立命令連結
[root@nginx2 nginx-1.12.2]# cd
[root@nginx2 ~]# cd /usr/local/nginx/html
新增圖片
訪問測試
在nginx2上安裝keepalived
與nginx1上配置相同
[root@nginx2 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@nginx2 ~]# tar zxvf keepalived-2.0.13.tar.gz #解壓縮
[root@nginx2 ~]# cd keepalived-2.0.13/
[root@nginx2 keepalived-2.0.13]# ./configure --prefix=/ #路徑設定
[root@nginx2 keepalived-2.0.13]# make && make install #編譯安裝
[root@nginx2 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d
[root@nginx2 keepalived-2.0.13]# vi /etc/init.d/keepalived
[root@nginx2 keepalived-2.0.13]# chmod 755 /etc/init.d
[root@nginx2 keepalived-2.0.13]# chkconfig --add keepalived
[root@nginx2 keepalived-2.0.13]# chkconfig --list
新增執行級別
# chkconfig: 35 21 79
[root@nginx2 keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id nginx2
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx.sh"
interval 2
weight 2
}
vrrp_instance vi_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 105
adver_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
20.0.0.100
}
}
編寫指令碼
[root@nginx2 keepalived-2.0.13]# vi /usr/local/src/nginx.sh
[root@nginx2 keepalived-2.0.13]# chmod +x /usr/local/src/nginx.sh
[root@nginx2 keepalived-2.0.13]# systemctl start keepalived
[root@nginx2 keepalived-2.0.13]# systemctl status keepalived
#!/bin/bash
A=`ps -C nginx --no-header | wc -l` 查詢程式數
if [ $A -eq 0 ]
then /usr/local/nginx/sbin/nginx
if [ `ps -C nginx --no-header | wc -l` -eq 0 ]
then exit 1
else exit 0
fi
else
exit 0
fi
[root@nginx2 keepalived-2.0.13]# tail -100 /var/log/messages
[root@nginx2 keepalived-2.0.13]# ip addr
關閉主排程器上面的keepalive服務後,虛擬地址將自行漂移到備用排程器上面
相關文章
- Nginx 動靜分離與負載均衡的實現Nginx負載
- Nginx + Tomcat 動靜分離實現負載均衡NginxTomcat負載
- Nginx+Tomcat實現負載均衡、動靜分離叢集部署NginxTomcat負載
- Nginx使用篇:實現負載均衡、限流與動靜分離Nginx負載
- Nginx+Tomcat負載均衡,動靜分離群集部署解析NginxTomcat負載
- Nginx—tomcat負載均衡動靜分離群集NginxTomcat負載
- nginx反向代理負載均衡與動靜頁面分離Nginx負載
- 分離mysql和儲存實現雙web負載均衡MySqlWeb負載
- 【DB寶42】MySQL高可用架構MHA+ProxySQL實現讀寫分離和負載均衡MySql架構負載
- Nginx作為動靜分離、快取與負載均衡初探Nginx快取負載
- Mycat實現mysql的負載均衡讀寫分離MySql負載
- Linux下Nginx+Tomcat負載均衡和動靜分離配置要點LinuxNginxTomcat負載
- 帶你瞭解Nginx+Tomcat負載均衡,動靜分離群集NginxTomcat負載
- Nginx+Tomcat+Keepalived+Memcache 負載均衡動靜分離技術NginxTomcat負載
- 負載均衡和動態負載均衡分別是什麼?-VeCloud負載Cloud
- 【Tony 老師】基於 Maxscale 實現讀寫分離和負載均衡負載
- 伺服器群集—Nginx+Tomcat+keepalived負載均衡、動靜分離群集伺服器NginxTomcat負載
- 微服務架構如何實現客戶端負載均衡微服務架構客戶端負載
- Nginx實現動靜分離Nginx
- 網際網路動靜分離架構架構
- 雙機高可用、負載均衡、MySQL(讀寫分離、主從自動切換)架構設計負載MySql架構
- 大型網站--負載均衡架構網站負載架構
- Nginx+Tomcat+Redis實現負載均衡、資源分離、session共享NginxTomcatRedis負載Session
- haproxy + varnish 實現動靜分離
- nginx實現負載均衡Nginx負載
- 採用Atlas+Keepalived實現MySQL讀寫分離、讀負載均衡MySql負載
- Windows平臺分散式架構實踐 - 負載均衡(轉載)Windows分散式架構負載
- 【Mycat】Mycat讀寫分離與負載均衡2負載
- 【Nginx】Nginx反向代理和負載均衡部署Nginx負載
- 《Nginx系列》之青銅入門篇 反向代理 負載均衡 動靜分離就是這麼簡單Nginx負載
- 基於滴滴雲部署 HAProxy 實現 7 層和 4 層負載均衡負載
- GRPC 負載均衡實現RPC負載
- HaProxy 實現 MySQL 負載均衡MySql負載
- Ribbon實現負載均衡負載
- Oracle負載均衡實現方式Oracle負載
- Nginx + IIS 實現負載均衡Nginx負載
- 負載均衡是什麼?怎麼理解負載均衡的部署方式和工作原理負載
- Nginx+Tomcat實現動靜分離NginxTomcat