第十一周-云计算运维作业

  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实现多个服务器的信息迁移,保证用户的会话数据一致性和快速读写。但非持久化,会自动过期,适合短期高效的存储数据。

posted @ 2024-08-21 02:42  TestAL4193  阅读(34)  评论(0)    收藏  举报