栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Tomcat介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Tomcat介绍

一、haproxy https实现 1.1 证书制作
 mkdir /etc/haproxy/certs
 cd /etc/haproxy/certs/ 
 openssl genrsa -out haproxy.key 2048 #生成私钥
 openssl req -x509 -key haproxy.key -out haproxy.crt -subj "/CN=www.magedu.org" #利用私钥生成自签名证书
 cat haproxy.key haproxy.crt > haproxy.pem #指令 crt 后证书文件为PEM格式,需要同时包含证书和所有私钥
 openssl x509 -in haproxy.pem -noout -text #查看证书
1.2haproxy配置
[root@Centos8 certs]# cat /etc/haproxy/conf.d/test.cfg 
frontend web 
  bind 10.0.0.8:80
  bind 10.0.0.8:443 ssl crt /etc/haproxy/certs/haproxy.pem
  redirect scheme https if !{ ssl_fc }
  http-request set-header X-forwarded-Port %[dst_port]
  http-request add-header X-forwarded-Proto https if { ssl_fc }
  mode http
  balance roundrobin

  acl acl_static path_end -i .jpg .jpeg .png .gif .css .js .html
  acl acl_php path_end -i .php
  use_backend mobiles_hosts if acl_static
  use_backend app_hosts if acl_php
  default_backend pc_hosts

  backend mobiles_hosts
    mode http 
    server web1 10.0.0.7:80 weight 1 check inter 3000 fall 2 rise 5
  
  backend app_hosts
    mode http
    server web2 10.0.0.17:80 weight 1 check inter 3000 fall 2 rise 5
   
  backend pc_hosts
    mode http
    server web2 10.0.0.17:80 weight 1 check inter 3000 fall 2 rise 5
#重启服务
[root@Centos8 certs]# systemctl restart haproxy.service
1.3 https验证
#修改后端web服务器日志格式
[root@Centos7 ~]# vim /etc/httpd/conf/httpd.conf
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" "%{X-forwarded-Port}i" "%{X-forwarded-Proto}i"" combined



二、总结tomcat的核心组件以及根目录结构 2.1 tomcat 根目录结构


bin 服务启动、停止等相关程序和文件

conf 配置文件

server.xml 主配置文件
web.xml每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行
定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件。
context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件。
tomcat-users.xml 用户认证的账号和密码文件
catalina.policy 当使用security选项启动tomcat时,用于为tomcat设置安全策略
catalina.properties Tomcat 环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.properties Tomcat 日志系统相关的配置,可以修改日志级别和日志路径等

lib 库目录

logs 日志目录

webapps 应用程序,应用部署目录

work jsp编译后的结果文件,建议提前预热访问

2.2 核心组件

顶级组件,Server,代表整个Tomcat容器,一台主机可以启动多tomcat实例,需要确保端口不要产生冲突
服务类组件,Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine
连接器组件,Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。
容器类,Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。
内嵌类,可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内分别定义。
集群类组件,listener、cluster

三、tomcat实现多虚拟主机 3.1 配置文件修改
[root@Centos7 ROOT]# vim /usr/local/tomcat/conf/server.xml
      
      
      
      
      
      

3.2 准备数据目录
[root@Centos7 ROOT]# mkdir /data/tomcat/webapps{1..3}/ROOT -pv

准备测试页面

[root@Centos7 ROOT]# cat index.jsp 
<%@ page import="java.util.*" %>



    
    tomcat test


 Tomcat Website 
On  <%=request.getServerName() %>
<%=request.getLocalAddr() + ":" + request.getLocalPort() %>
SessionID = <%=session.getId() %>
<%=new Date()%>

 
[root@Centos7 ROOT]# tree /data/tomcat/
/data/tomcat/
├── webapps1
│   └── ROOT
│       └── index.jsp
├── webapps2
│   └── ROOT
│       └── index.jsp
└── webapps3
    └── ROOT
        └── index.jsp

6 directories, 3 files

设置权限,重启tomcat服务

[root@Centos7 ROOT]# chown -R tomcat:tomcat /data/tomcat/
[root@Centos7 ROOT]# systemctl restart tomcat.service
3.3 验证

修改Windows电脑主机hosts解析文件

浏览器依次访问,实现虚拟多主机


四、nginx实现后端tomcat的负载均衡调度 4.1 环境准备
10.0.0.8 nginx服务器,作反向代理服务器
10.0.0.18 tomcatservre1
10.0.0.28 tomcatserver2
4.2 tomcat 配置

虚拟主机添加

[root@tomcat-server1 ~]# vim /usr/local/tomcat/conf/server.xml #添加以下两行
 
 
 [root@tomcat-server2 ~]# vim /usr/local/tomcat/conf/server.xml #添加以下两行
 
 

创建虚拟主机目录

#两台tomcat服务器执行
mkdir /data/tomcat/webapps/ROOT -pv
chown -R tomcat:tomcat /data/tomcat/

准备测试文件

[root@tomcat-server1 ROOT]# cat index.jsp 
<%@ page import="java.util.*" %>



    
    tomcat test


 Tomcat Website 
On  <%=request.getServerName() %>
<%=request.getLocalAddr() + ":" + request.getLocalPort() %>
SessionID = <%=session.getId() %>
<%=new Date()%>


[root@tomcat-server1 ROOT]# tree /data/
/data/
└── tomcat
    └── webapps
        └── ROOT
            └── index.jsp

3 directories, 1 file
4.3nginx负载均衡服务器配置
[root@nginx-proxy ~]# vim /etc/nginx/nginx.conf
http语句块中添加
    upstream tomcat-server {
      #ip_hash;
      #hash $cookie_JSESSIonID
      server tomcatserver1.magedu.com:8080;
      server tomcatserver2.magedu.com:8080;
    }
server语句块
       location ~* .(jsp|do)$ {
         proxy_pass http://tomcat-server;
       }
 [root@nginx-proxy ~]# systemctl restart nginx.service 

nginx后端服务器使用域名使,需添加域名解析。

[root@nginx-proxy ~]# cat /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.18 tomcatserver1.magedu.com
10.0.0.28 tomcatserver2.magedu.com
4.4 测试

默认的nginx往后端的tomcat服务器调度时,会将请求转发至tomcat服务器的默认工作目录。为了体现实验效果,需修改tomcat服务器的默认工作目录。

[root@tomcat-server1 ROOT]# vim /usr/local/tomcat/conf/server.xml

[root@tomcat-server2 ROOT]# vim /usr/local/tomcat/conf/server.xml

#修改完之后需重启tomcat服务


nginx使用ip_hash算法时,会将来自同一个ip地址的访问请求转发至同一个服务器上。

五、简述memcached的工作原理 5.1 memcached介绍

NoSQL是对 Not only SQL、非传统关系型数据库的统称。NoSQL一词诞生于1998年,2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。随着互联网时代的到来,数据爆发式增长,数据库技术发展日新月异,要适应新的业务需求。而随着移动互联网、物联网的到来,大数据的技术中NoSQL也同样重要。
NoSQL 分类

Key-value Store k/v数据库
性能好 O(1) , 如: redis、memcached

document Store 文档数据库
mongodb、CouchDB

Column Store 列存数据库,Column-Oriented DB
Hbase、Cassandra,大数据领域应用广泛

Graph DB 图数据库
Neo4j

Time Series 时序数据库
InfluxDB、Prometheu

Memcached 只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统,memcached 虽然没有像redis所具备的数据持久化功能,比如RDB和AOF都没有,但是可以通过做集群同步的方式,让各memcached服务器的数据进行同步,从而实现数据的一致性,即保证各memcached的数据是一样的,即使有任何一台 memcached 发生故障,只要集群中有一台 memcached 可用就不会出现数据丢失,当其他memcached 重新加入到集群的时候,可以自动从有数据的memcached 当中自动获取数据并提供服务。Memcached 借助了操作系统的 libevent 工具做高效的读写。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥高性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能Memcached 支持最大的内存存储对象为1M,超过1M的数据可以使用客户端压缩或拆分报包放到多个key中,比较大的数据在进行读取的时候需要消耗的时间比较长,memcached 最适合保存用户的session实现session共享Memcached存储数据时, Memcached会去申请1MB的内存, 把该块内存称为一个slab, 也称为一个page。

5.2 memcached工作机制 5.2.1 内存分配机制

应用程序运行需要使用内存存储数据,但对于一个缓存系统来说,申请内存、释放内存将十分频繁,非常容易导致大量内存碎片,最后导致无连续可用内存可用。
Memcached采用了Slab Allocator机制来分配、管理内存。
Page:分配给Slab的内存空间,默认为1MB,分配后就得到一个Slab。Slab分配之后内存按照固定字节大小等分成chunk。
Chunk:用于缓存记录k/v值的内存空间。Memcached会根据数据大小选择存到哪一个chunk中,假设chunk有128bytes、64bytes等多种,数据只有100bytes存储在128bytes中,存在少许浪费。
Chunk最大就是Page的大小,即一个Page中就一个Chunk.
Slab Class:Slab按照Chunk的大小分组,就组成不同的Slab Class, 第一个Chunk大小为 96B的Slab为Class1,Chunk 120B为Class 2,如果有100bytes要存,那么Memcached会选择下图中Slab Class 2 存储,因为它是120bytes的Chunk。Slab之间的差异可以使用Growth Factor 控制,默认1.25。

5.2.2 懒过期 Lazy Expiration

memcached不会监视数据是否过期,而是在取数据时才看是否过期,如果过期,把数据有效期限标识为0,并不清除该数据。以后可以覆盖该位置存储其它数据。

5.2.3 LRU

当内存不足时,memcached会使用LRU(Least Recently Used)机制来查找可用空间,分配给新记录使用。

5.2.4 集群

Memcached集群,称为基于客户端的分布式集群,即由客户端实现集群功能,即Memcached本身不支持集群
Memcached集群内部并不互相通信,一切都需要客户端连接到Memcached服务器后自行组织这些节点,并决定数据存储的节点。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号