第十一週-雲端計算運維作業

TestAL4193發表於2024-08-21
  1. 總結 tomcat實現多虛擬機器

vim ../conf/server.xml

<Host name="www.b.com"  appBase="/data/website2/"
 unpackWARs="true" autoDeploy="true">
</Host>

<Host name="www.a.com"  appBase="/data/website3/"
 unpackWARs="true" autoDeploy="true">
</Host>
  1. 總結 tomcat定製訪問日誌格式和反向代理tomcat

<Valve className="org.apache.catalina.valves.AccessLogValve" #類名
   directory="logs" #儲存目錄 
   prefix="localhost_access_log"#可選,預設為空 localhost_access_log 將生成如 localhost_access_log.2024-08-05.txt 這樣的檔名。
   suffix=".txt" #日誌字尾
   pattern="%h %l %u %t &quot;%r&quot; %s %b %D" #日誌格式
   fileDateFormat="yyyy-MM-dd" /> #可選 日誌檔名中的日期格式

日誌格式標記
%h - 遠端主機名
%l - 遠端邏輯使用者名稱(通常為-)
%u - 遠端使用者身份(透過 HTTP 認證)
%t - 請求時間
%r - 請求的第一行
%s - 響應狀態碼
%b - 傳送的位元組數(不包括 HTTP 頭)
%D - 請求處理時間,以毫秒為單位

nginx反向代理tomcat

upstream tomcat {

ip_hash; #排程演算法 
server 10.1.1.111:8080;
server 10.1.1.111:8080;

}

location / {
		   proxy_pass http://tomcat;   
		   }
  1. 完成 tomcat實現MSM叢集
ip 服務 軟體
192.168.1.130 排程代理 rocky8 nginx
192.168.1.132 伺服器 rocky8 tomcat(9.0.75) jdk(8u371) memcached
192.168.1.133 伺服器 rocky8 tomcat(9.0.75) jdk(8u371) memcached

排程器

vim /etc/nginx/nginx.conf

http {
 upstream tomcat-server {
	   server t1.org:8080;
	   server t2.org:8080;
 }
   server {
	   location / {
	   }
	   location ~* \.(jsp|do)$ {
		 proxy_pass http://tomcat-server;
	   }

vim /etc/hosts

192.168.1.132 t1.org t1
192.168.1.133 t2.org t2

伺服器
vim /etc/sysconfig/memcached

#OPTIONS="-l 127.0.0.1,::1" #註釋

配置tomcat
vim conf/server.xml

##tomcat1
  <Engine name="Catalina" defaultHost="t1.zz.org" jvmRoute="Tomcat1">  
	   <Host name="t1.zz.org" appBase="/data/webapps" autoDeploy="true" > 
	 </Host>  
   </Engine>
##tomcat2
	  <Engine name="Catalina" defaultHost="t2.zz.org" jvmRoute="Tomcat1">  
	   <Host name="t2.zz.org" appBase="/data/webapps" autoDeploy="true" > 
	 </Host>  
   </Engine>

vim conf/context.xml

 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
	memcachedNodes="n1:192.168.1.132:11211,n2:192.168.1.133:11211"                     

	failoverNodes="n1" #tomcat則為n2
	requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFact
ory"
   /> #寫入倒數第一行上

vim /data/webapps/ROOT/index.jsp #server.xml中的appbase位置

<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>tomcat test</title>
</head>
<body>
<h1> tomcat website </h1>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
##顯示伺服器名稱、伺服器的本地 IP 地址和埠號、會話 ID 以及當前的日期和時間。這些輸出將在每次請求頁面時動態生成。

將對應版本的jsp檔案放入tomcat/lib中;並重啟

檢視結果:

  1. 總結 JVM垃圾回收演算法和分代
    JVM的垃圾確認機制是 Garbage 垃圾確定方法,每個使用的記憶體都有一個引用標記器,當記憶體沒有引用數後標記為垃圾。

回收演算法

  1. 標記-清除 Mark-Sweep
    標記階段,找到所有可訪問物件打個標記。清理階段,遍歷整個堆清理未標記物件(無引用數)的記憶體。
    優點:
    演算法簡單
    缺點:
    標記-清除最大的問題會造成記憶體碎片,但是不浪費空間,效率較高(如果物件較多時,逐一刪除效率也會受到影響)

  2. 標記-壓縮 (壓實)Mark-Compact
    將上述的記憶體清理階段時,整理時將物件向記憶體一端移動,整理後存活物件連續的集中在記憶體一端。
    特點:
    標記-壓縮演算法好處是整理後記憶體空間連續分配,有大段的連續記憶體可分配,沒有記憶體碎片。
    缺點:
    記憶體整理過程有消耗,效率相對低下

  3. 複製 Copying
    先將可用記憶體分為大小相同兩塊區域A和B,每次只用其中一塊,比如A。當A用完後,則將A中存活的物件複製到B。複製到B的時候連續的使用記憶體,最後將A一次性清除乾淨。
    特點:
    無碎片,效率高
    缺點:
    只有一半的記憶體使用率

JVM分代
image
Heap堆記憶體分為
年輕代Young:Young Generation
伊甸園區eden: 只有一個,剛剛建立的物件
倖存區Servivor Space:有2個倖存區,一個是from區,一個是to區。大小相等、地位相同、可互換。
from 指的是本次複製資料的源區
to 指的是本次複製資料的目標區
老年代Tenured:Old Generation, 長時間存活的物件
永久代:JDK1.7之前使用, 即Method Area方法區,儲存JVM自身的類和方法,儲存JAVA執行時的環境資訊, JDK1.8後 改名為 MetaSpace,此空間不存在垃圾回收,關閉JVM會釋放此區域記憶體,此空間物理上不屬於heap記憶體,但邏輯上存在於heap記憶體。

年輕代垃圾處理:
eden生成物件,放滿之後將標記的放入倖存區,倖存區兩個區可以互相轉換(進行回收時標記物件相互轉移),而未標記則都回收。
當倖存區中有長期存在的物件則放入老年代(老年代不經常做回收),當老年代滿時,則將所有空間進行垃圾回收。

  1. 總結memcache使用,安裝和MSM原理

memcache是個記憶體資料庫

Memcache使用:
快取資料:

  • 將資料存入記憶體,減少訪問延遲。
  • 使用鍵值對的方式儲存資料,鍵是唯一的識別符號,值是需要快取的資料。

設定資料:

  • 使用 set(key, value, expiration_time) 方法將資料快取到 Memcache 中。
  • key 是資料的識別符號,value 是要快取的內容,expiration_time 是資料的過期時間。

獲取資料:

  • 使用get(key)透過鍵獲取

刪除資料:

  • 使用delete(key)刪除

資料更新:

  • 再次呼叫set

memcache安裝:

使用yum倉庫安裝:

yum install memcached

編譯安裝(使用指令碼):

MEMCACHED=memcached-1.6.20
INSTALL_DIR=/apps/memcached

yum -y install gcc  libevent-devel
tar xvf $MEMCACHED.tar.gz
cd $MEMCACHED/
./configure  --prefix=$INSTALL_DIR
make && make install

echo PATH=$INSTALL_DIR/bin:'$PATH' > /etc/profile.d/memcached.sh
. /etc/profile.d/memcached.sh

useradd -r -s /sbin/nologin memcached

MSM原理

MSM 是 Memcache Session Management 的簡稱,用於在 Web 應用中管理使用者會話,通常與 Memcache 結合使用。
伺服器將使用者資料如(session等資訊)存入記憶體,透過memcache管理。而透過memcache實現多個伺服器的資訊遷移,保證使用者的會話資料一致性和快速讀寫。但非持久化,會自動過期,適合短期高效的儲存資料。

相關文章