1. 程式人生 > >複習電商筆記-16-Linux版本TOMCAT的安裝、程式碼的部署和ngnix介紹

複習電商筆記-16-Linux版本TOMCAT的安裝、程式碼的部署和ngnix介紹

 

Tomcat叢集

nginx + tomcats實現Tomcat叢集

三個tomcat部署的業務相同,它們共同訪問一個數據庫

 

 

配置XShell黏貼複製

選中文字自動複製到剪貼簿上,類似Ctrl+v

實現Ctrl+v黏貼文字

 

 

配置進入後執行指令碼

go最簡單的Shell指令碼

cd /usr/local/src			#進入使用者預設安裝檔案目錄
. go						#手動執行Shell指令碼

xShell檔案->屬性:

 

 

克隆虛擬機器

 

 

網路模式

橋接模式:自動分配新的IP地址,相當於當前區域網多了臺電腦。

NAT模式:自己組一個私有區域網,實現雙網絡卡,VMware8虛擬網絡卡。這樣隨著教室和辦公室切換,IP地址不會變更。而橋接可能IP地址發生變更。不需要多個環境切換時,推薦使用橋接。

 

 

 

虛擬機器的坑

很多優化軟體如360,騰訊管家都會自動關閉這兩個服務,如果關閉手動開啟。

設定為自動啟動!

QQ電腦管家會關閉,也需要開啟

 

 

安裝JDK

yum -y install glibc.i686		#jdk依賴glibc
mkdir /usr/local/src/java		#按習慣使用者自己安裝的軟體存放到/usr/local/src目錄下
rz 上傳jdk tar包				#利用xshell的rz命令上傳檔案
tar -xvf jdk-7u51-linux-x64.tar.gz	#解壓壓縮包

配置環境變數

1)vi /etc/profile
2)在尾行新增
#set java environment
JAVA_HOME=/usr/local/src/java/jdk1.7.0_51
JAVA_BIN=/usr/local/src/java/jdk1.7.0_51/bin
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
儲存退出
3)source /etc/profile 使更改的配置立即生效
4)java -version 檢視JDK版本資訊。如顯示1.7.0證明成功。

 

 

安裝Tomcat

 

 

 

上傳解壓

建立目錄/usr/local/src/java

上傳檔案xshell rz

解壓檔案tar –xvf apache-tomcat-7.0.55.tar.gz

 

 

 

埠配置

cd apache-tomcat-7.0.55

cd conf

vi server.xml 修改8080為80

注意:多個tomcat修改3個埠。8005/8009/8080。

 

 

 

啟動停止服務

進入tomcat/bin目錄

執行shell指令碼:      ./startup.sh   或者 sh startup.sh

停止服務:           sh shutdown.sh

 

 

 

檢視日誌

檢視日誌: 

tail –f ../logs/catalina.out	

注意在linux和windows下檢視的日誌檔案不同。在windows下檢視的是localhost.2016-02-08.log檔案。

刪除日誌,臨時檔案:    rm -rf ./*    刪除當前目錄下所有檔案

 

 

 

*關閉防火牆

service iptables stop //關閉防火牆

start/stop/restart   開啟、停止、重啟防火牆

 

 

 

開啟埠8080, 8090, 8100

/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT 	

#I不指定位置就是插入到最前面   -A預設是插入到尾部的,可以-I來插入到指定位置

iptables -I INPUT 3 -p tcp -m tcp --dport 8080 -j ACCEPT

#INPUT是進入的連結,TCP協議的連結,連線的80埠 ACCEPT是允許,REJECT是拒絕

/etc/rc.d/init.d/iptables save		#修改生效
/etc/init.d/iptables status			#檢視配置

 

 

 

開啟MYSQL遠端訪問許可權

語法:

grant [許可權] on [資料庫名].[表名] to ['使用者名稱']@['web伺服器的ip地址'] identified by ['密碼'];

grant all on *.* to 'root'@'%' identified by 'root';

或者指定IP地址

grant all on *.* to 'root'@'192.168.1.103' identified by 'root';

 

 

 

部署京淘專案

cd /usr/local/src
mkdir java
cd java
rz						#上傳tomcat
tar –xvf apache-tomcat-7.0.55.tar.gz		#解壓
mv apache-tomcat-7.0.55 t1				#修改目錄名形成第一個tomcat
cd /usr/local/src/java/t1/webapps
rm -rf *				#刪除所有,不需留
rz						#上傳war包
mv jt-manage-web-0.0.1-SNAPSHOT.war ROOT.war	#修改檔名為ROOT.war
cd ..
bin/startup.sh			#啟動tomcat,自動解壓war包
bin/shutdown.sh		#停止tomcat,進行配置
cd webapps/ROOT/WEB-INF/classes		#進入目錄修改資料庫連線屬性
vim jdbc.properties	#注意:mysql必須授權grant all遠端訪問許可權

 

 

 

清除現場

cd logs
rm –rf *.*		#刪除所有日誌檔案,檢視日誌時更加方便,沒有以前資料干擾
cd ..
rm –rf work	#刪除快取目錄,防止檔案不更新

 

 

 

部署多個例項

cp –r t1 t2			#複製t1目錄為t2目錄,形成第二個tomcat
cp –r t1 t3			#複製t1目錄為t3目錄,形成第三個tomcat
vim conf/server.xml	#修改三處8005,8080,8009,每次加10,方便記憶
啟動t1,t2,t3			#啟動所有tomcat
tail –f t1/logs/catalina.out		#檢視日誌,看啟動是否成功,需要一會

 

 

 

訪問測試

http://192.168.163.158:8080/page/index
http://192.168.163.158:8090/page/index
http://192.168.163.158:8100/page/index

 

*負載均衡

提供5種負載均衡策略:

  1. 輪詢:每個請求按時間順序輪流分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
  2. 權重:指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
  3. IP_HASH:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,針對解決session共享問題。
  4. URL_HASH(第三方):訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。FAIR(第三方):按後端伺服器的響應時間來分配請求,響應時間短的優先分配。針對解決session共享問題。

 

 

輪詢

預設配置,tomcats有n個,請求就被平均分配到這n個伺服器上。請求次數%n,平均分配到每個伺服器。

例子:3個tomcat

修改3個埠,在同一臺伺服器上啟動3個tomcat。每個tomcat下放一個index.html。然後內容修改,分別展示T1,T2,T3。當請求nignx,通過這種方法驗證得出預設nginx輪詢這3個頁面,但順序不一定是配置的順序。

    #前臺,有3個tomcat叢集,使用者訪問時輪詢轉向到某一個tomcat

server {
		listen       80;
		server_name  www.jt.com;

		location / {					#攔截所有的資源
			proxy_pass   http://jt_tomcats;	#引用定義的upstream
		}
		
	}

#配置一個upstream,宣告一個名稱jt_tomcats,配置多個ip地址轉向,預設就是輪詢。

upstream jt_tomcats {
		server 127.0.0.1:8080;
		server 127.0.0.1:8090;
		server 127.0.0.1:8100; 
	}

輪詢方式存在問題:伺服器有效能比較好的,有效能比較差的。新的伺服器的配置比舊的伺服器強悍很多。CPU核也多,記憶體也大,硬碟容量也大,速度還快。

如果還使用輪詢的方式,就會造成新伺服器資源的浪費,舊的伺服器資源壓力大。顯然資源分配不合理,應該多勞多得。

 

 

權重

#前臺,有3個tomcat叢集,使用者訪問時輪詢轉向到某一個tomcat

server {
		listen       80;
		server_name  www.jt.com;

		location / {					#攔截所有的資源
			proxy_pass   http://jt;	#引用下面定義的upstream
		}
		
	}

#配置一個upstream,宣告一個名稱jt,配置多個ip地址轉向,預設就是輪詢

upstream jt {
		server 127.0.0.1:8080 weight=8;		#訪問請求分成9份,這個tomcat負責8份的連結
		server 127.0.0.1:8090 weight=1;		#訪問請求分成9份,這個tomcat負責1份的連結
		server 127.0.0.1:8100 down;		#這個tomcat暫時不參加負載
	}

 

 

*解決Session共享的解決辦法

問題的由來:訪問一個網站時,有兩類請求。一種請求叫做無狀態的請求,一種請求叫做有狀態。

無狀態,例如:登入頁面,類似這種頁面,哪個tomcat給我們響應都是一樣的,不需要區分。這是我們最喜歡的。叢集的動態伸縮性(增加節點,移除節點)。

有狀態,例如:系統登入後,假如使用者的請求被轉發到tomcat1上,這時系統會寫一個當前使用者的資訊放入session中。這種情況就稱為有狀態的,問題就來了。nginx負載均衡後,下一次使用者的請求就被轉發tomcat2上。tomcat2上沒有session。系統就會要求使用者去登入,這顯然是不合理的。把這個問題稱作session共享問題。

解決的辦法:

session同步

tomcat支援動態將某個tomcat下的session複製到其他的tomcat中。但是這個方式是早期的企業級應用習慣的方式。現在很少使用。

這種方式在叢集數量很少時,結果還是可以的。但如果叢集數量龐大。都需要複製session,這時會因為網路延遲,或者session的內容非常大。都會造成隱患,這時可能讀到髒資料。

 

 

 

Session黏著-放在服務端

對ip地址或者域名地址進行hash;或者uri進行hash。

缺點:使用者瀏覽器的IP地址hash以後滿足單調性。會可能造成資源的分配不均衡,負載均衡就達不到到目的。有的伺服器負載過重,有的伺服器負載過輕,顯然沒有充分利用資源。

#配置一個upstream,宣告一個名稱jt,配置多個ip地址轉向,預設就是輪詢
	upstream jt {
		ip_hash;				#IP_HASH方式來實現session共享
		server 127.0.0.1:8080 weight=5;		#訪問請求分成9份,這個tomcat負責8份的連結
		server 127.0.0.1:8090 weight=5;		#訪問請求分成9份,這個tomcat負責1份的連結
		server 127.0.0.1:8100 down;		#這個tomcat暫時不參加負載
	}

 

 

因為uri比ip地址相應數量多,變化就多,因此uri-hash比ip-hash分佈更均衡些。

uri-hash需要第三方軟體支援pcre-8.02.tar.gz、Nginx_upstream_hash-0.3.1.tar.gz

 

 

 

 

將資訊放到cookie-放在客戶端

session存在伺服器端,會對伺服器產生壓力。如果將資訊儲存到cookie中,減輕了伺服器的壓力,同時每個客戶端的壓力也很小。因為只儲存自己的資訊。這種方式在實際的開發中廣泛的採用。

缺點:cookie可以被禁用,cookie要隨著瀏覽器傳遞,增大了傳輸的內容,cookie大小有限制。