複習電商筆記-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種負載均衡策略:
- 輪詢:每個請求按時間順序輪流分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
- 權重:指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
- IP_HASH:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,針對解決session共享問題。
- 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大小有限制。