Tomcat

一、Tomcat介绍

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和 并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还是一个Servlet和 JSP容器 起始于SUN 公司的一个Servlet的参考实现项目 Java Web Server,开发者是 James Duncan Davidson, 在1999年,将项目贡献给了apache软件基金会(ASF),和ASF现有的项目 JServ 合并,并开源成为顶级 项目

Tomcat 仅仅实现了Java EE规范中与Servlet、JSP相关的类库,是JavaEE不完整实现。 1999年发布初始版本是Tomcat 3.0,实现了Servlet 2.2 和 JSP 1.1规范。 Tomcat 4.x发布时,内建了Catalina(Servlet容器)和 Jasper(JSP engine)等 当前 Tomcat 的正式版本已经更新到 9.0.x 版本,但当前企业中主流版本为 8.x 和 7.x

二、安装Tomcat

1、安装Java环境

复制代码
#安装java环境
[root@tomcatA ~]# yum install java-1.8.0-openjdk.x86_64 -y

#查看java版本
[root@tomcatA ~]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)

#查看java的环境目录
[root@tomcatA ~]# which  java
/usr/bin/java
[root@tomcatA ~]# ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Jul 30 10:41 /usr/bin/java -> /etc/alternatives/java

#java的运行环境
[root@tomcatA ~]# cd /etc/alternatives/jre
[root@tomcatA jre]# ls
ASSEMBLY_EXCEPTION  bin  lib  LICENSE  THIRD_PARTY_README

2、安装并启动tomcat

复制代码
#解压
[root@tomcatA ~]# tar zxf apache-tomcat-9.0.107.tar.gz -C /usr/local/
[root@tomcatA ~]# cd /usr/local/
[root@tomcatA local]# ls
apache-tomcat-9.0.107  bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@tomcatA local]# mv apache-tomcat-9.0.107/ tomcat

#启动tomcat
[root@tomcatA local]# cd tomcat/
[root@tomcatA tomcat]# cd bin/
[root@tomcatA bin]# ./startup.sh

访问tomcat

生成tomcat的启动文件

复制代码
#生成tomcat的主配置文件
[root@tomcat ~]# vim  /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre

#生成启动文件
[root@tomcat ~]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.targe

.生成tomcat用户并设定软件安装目录权限并开启服务

复制代码
[root@tomcatB bin]#  useradd  -s /sbin/nologin -M tomcat
[root@tomcatB bin]#  chown tomcat.tomcat /usr/local/tomcat/ -R
[root@tomcatB ~]# systemctl enable --now tomcat

三、tomcat负载均衡实现

在nginx的虚拟机中配置nginx的配置文件

复制代码
[root@Nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf
upstream tomcat {
    server 172.25.254.50:8080;
    server 172.25.254.60:8080;
}
server {
    listen 80;
    server_name www.zcx.org;
    root /webdataw/nginx/timinglee.org/lee;
    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location ~ \.jsp$ {
        #proxy_pass http://172.25.254.100:8080;
        proxy_pass http://tomcat;
    }
}

[root@Nginx ~]# nginx -s reload

测试:访问 172.25.254.50:8080/test.jsp

四、Memcached

介绍:

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。Memcached 支持多种开发语言,包括:JAVA,C,Python,PHP,C#,Ruby,Perl等

memcached的安装与启动

复制代码
[root@tomcat ~]# yum install memcached -y
[root@tomcat ~]# vim /etc/sysconfig/memcached
 PORT="11211"
 USER="memcached"
 MAXCONN="1024"
 CACHESIZE="64"
 OPTIONS="-l 0.0.0.0,::1"     
[root@tomcat ~]# systemctl enable --now memcached

memcache基本命令:

复制代码
#前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令,都使用如下所示的语法:
command <key> <flags> <expiration time> <bytes> <value>
#参数说明如下:
command set/add/replace
key                 key 用于查找缓存值
flags               可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time     在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes               在缓存中存储的字节数
value               存储的值(始终位于第二行)

#增加key,过期时间为秒,bytes为存储数据的字节数
add key flags exptime bytes  

示例:

五、session 共享服务器

t1和m1部署可以在一台主机上,t2和m2部署也可以在同一台。

当新用户发请求到Tomcat1时, Tomcat1生成session返回给用户的同时,也会同时发给memcached2备 份。即Tomcat1 session为主session,memcached2 session为备用session,使用memcached相当于备份了一份Session

如果Tomcat1发现memcached2 失败,无法备份Session到memcached2,则将Sessoin备份存放在 memcached1中

修改tomcat配置

复制代码
[root@Tomcata ~]# vim /usr/local/tomcat/conf/context.xml
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:172.25.254.50:11211,n2:172.25.254.60:11211"
        failoverNodes="n1"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

</Context>

Tomcatb相同配置,修改failoverNodes="n2"即可

修改nginx配置

复制代码
[root@Nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf 
upstream tomcat {
    hash $cookie_JSESSIONID;
    server 172.25.254.50:8080;
    server 172.25.254.60:8080;
}
server {
    listen 80;
    server_name www.zcx.org;

    location ~ \.jsp$ {
        #proxy_pass http://172.25.254.100:8080;
        proxy_pass http://tomcat;
    }
}

测试:

1.在两台tomcat都开启的情况下: http://www.zcx.org/test.jsp

2.在n1被停止后继续提交信息看是否可以读取到之前的会话信

相关推荐
编程爱好者熊浪15 分钟前
RedisBloom使用
java
苇柠28 分钟前
Spring框架基础(1)
java·后端·spring
yics.31 分钟前
数据结构——栈和队列
java·数据结构
架构师沉默37 分钟前
我用一个 Postgres 实现一整套后端架构!
java·spring boot·程序人生·架构·tdd
xiucai_cs41 分钟前
布隆过滤器原理与Spring Boot实战
java·spring boot·后端·布隆过滤器
向阳花自开43 分钟前
Spring Boot 常用注解速查表
java·spring boot·后端
huan_19931 小时前
通过docker构建一个java镜像
java·docker
岁忧2 小时前
(LeetCode 面试经典 150 题) 82. 删除排序链表中的重复元素 II (链表)
java·c++·leetcode·链表·面试·go
_herbert2 小时前
MAVEN构建分离依赖JAR
java
野犬寒鸦3 小时前
Pipeline功能实现Redis批处理(项目批量查询点赞情况的应用)
java·服务器·数据库·redis·后端·缓存