企业级WEB应用服务器TOMCAT

Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理 HTML 页面的功能,它还是一个 Servlet 和 JSP容器

1、安装 Tomcat

(1)、tomcat的文件结构和组成

目录结构
目录            说明
-------------------------------------------------------
bin               服务启动、停止等相关程序和文件
conf             配置文件
lib                库目录
logs            日志目录
webapps    应用程序,应用部署目录,相当于 nginx 的默认发布目录
work jsp     编译后的结果文件,建议提前预热访问

(2)、查看tomcat相关目录和文件

[root@tomcat ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/
[root@tomcat ~]# ls /usr/local/tomcat/
bin conf lib logs README.md RUNNING.txt
webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work

A、tomcat环境部署

[root@cat10 conf]# chmod +x /usr/bin/tomcat

2、tomcat反向代理部署

standalone 模式, Tomcat 单独运行,直接接受用户的请求,不推荐。
反向代理,单机运行,提供了一个 Nginx 作为反向代理,可以做到静态由 nginx 提供响应,动态 jsp 代 理给Tomcat
LNMT Linux + Nginx + MySQL + Tomcat
LAMT Linux + Apache Httpd + MySQL + Tomcat
前置一台 Nginx ,给多台 Tomcat 实例做反向代理和负载均衡调度, Tomcat 上部署的纯动态页面更
适合
LNMT Linux + Nginx + MySQL + Tomcat
多级代理
LNNMT Linux + Nginx + Nginx + MySQL + Tomcat

(1)、利用 nginx 反向代理实现

利用 nginx 反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个 tomcat 主机
利用 nginx 指令 proxy_pass 可以向后端服务器转发请求报文 , 并且在转发时会保留客户端的请求报文中的 host首部

(2)、实现tomcat中的负载均衡

动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压 力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是Load Balance 负载
均衡。
当单机 Tomcat ,演化出多机多级部署的时候,一个问题便凸显出来,这就是 Session 。而这个问题的由来,都是由于HTTP 协议在设计之初没有想到未来的发展。
  B、tomecat反向代理及负载均衡
[root@cat10 ~]# ls
-  anaconda-ks.cfg  apache-tomcat-9.0.93.tar.gz  test.jsp
[root@cat10 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
[root@cat10 ~]# scp test.jsp root@172.25.254.20:/usr/local/tomcat/webapps/ROOT/
root@172.25.254.20's password: 
test.jsp                                           100%  968   801.0KB/s   00:00  



[root@cat10~]# cd /usr/local/nginx/conf.d
[root@cat10 conf.d]# ls
vhosts.conf
[root@cat10 conf.d]# vim vhosts.conf
upstream tomcat {
ip_bash;
#hash $cookie_JSESSIONID;
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen 80;
server_name lee.ll.org;
root /webdataw/nginx/ll.org/lee;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
try_files $uri $uri.html $uri/index.html /error/default.html;
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
}

[root@cat10 conf.d]#nginx -s reload

C、负载均衡

[root@tomcat ~]# vim /usr/local/nginx/conf.d/tomcat.conf
upstream tomcat {
    hash $cookie_JSESSIONID;
    server 172.25.254.10:8080;
    server 172.25.254.20:8080;
}
server {
    listen 80;
    server_name www.ll.org;
    root /data/web/html;
    index index.html;
    location ~ \.jsp$ {
        proxy_pass http://tomcat;
    }
}
[root@tomcat ~]# nginx -s reload
# 模拟tomcat2出现故障
[root@cat10 ~]# systemctl stop tomcat

3、Memcached

(1)、简介

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 等操作系统上发挥其高性能

D、memcached的安装与启动

[root@cat10 ~]# yum install memcached -y
[root@cat10 ~]#  vim /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"

[root@cat10 ~]# systemctl enable --now memcached
[root@cat10 ~]# netstat -antlupe | grep memcache
tcp    0   0 0.0.0.0:11211     0.0.0.0:*       LISTEN  975    122107     43014/memcached 
tcp6   0   0 ::1:11211         :::*            LISTEN  975    122108     43014/memcached 


[root@cat20 ~]# yum install memcached -y
[root@cat20 ~]#  vim /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"

[root@cat20 ~]# systemctl enable --now memcached
[root@cat20 ~]# netstat -antlupe | grep memcache

(2)、操作命令

set           多数据存储在缓存中,如果指定的键已经存在,set会覆盖现有的数据。
add          在指定的键不存在时,将数据存储在缓存中。如果键已经存在,则操作失败。
replace    仅在指定的键已经存在时,替换该键下的数据。如果键不存在,则操作失败。
get           从缓存中检索指定键的数据。
delete      从缓存中删除指定的键及其数据。
#前三个命令是用于操作存储在 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

4、session 共享服务器

在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

E、seesion会话保持的实现

将spymemcached.jar、memcached-session-manage、kyro相关的jar文件都放到Tomcat的lib目录
中,这个目录是 $CATALINA_HOME/lib/ ,对应本次安装就是/usr/local/tomcat/lib。
kryo-3.0.3.jar
asm-5.2.jar
objenesis-2.6.jar
reflectasm-1.11.9.jar
minlog-1.3.1.jar
kryo-serializers-0.45.jar
msm-kryo-serializer-2.3.2.jar
memcached-session-manager-tc9-2.3.2.jar
spymemcached-2.12.3.jar
memcached-session-manager-2.3.2.jar


当新用户发请求到Tomcat1时, Tomcat1生成session返回给用户的同时,也会同时发给memcached2备份。即Tomcat1 session为主session,memcached2 session为备用session,使用memcached相当于备份了一份Session如果Tomcat1发现memcached2 失败,无法备份Session到memcached2,则将Sessoin备份存放在memcached1中
cat10、cat2中修改tomcat配置
[root@cat10 ~]# vim /usr/local/tomcat/conf/context.xml
<Context>
    . . . . . .
    <Manager pathname="" />
    -->
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"
        failoverNodes="m1"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        	transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
</Context>
[root@cat10 ~]# systemctl restart memcached


[root@cat20 ~]# vim /usr/local/tomcat/conf/context.xml
<Context>
    . . . . . .
    <Manager pathname="" />
    -->
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"
        failoverNodes="m1"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        	transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
</Context>
[root@cat20 ~]# systemctl restart memcached
tomcat(50)中修改配置
[root@tomcat ~]# vim /usr/local/nginx/conf.d/vhosts.conf
upstream tomcat {
hash $cookie_JSESSIONID;
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen 80;
server_name ll.ll.org;
root /webdataw/nginx/ll.org/ll;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
try_files $uri $uri.html $uri/index.html /error/default.html;
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
}

测试:http://ll.timinglee.org/test.jsp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值