Tomcat 由 Apache 软件基金会下属的 Jakarta 项目开发。它实现了 Java Servlet 和 JavaServer Pages(JSP)等 Java EE 技术规范,为基于 Java 的 Web 应用程序提供运行环境。
主要特点
轻量级
开源免费
兼容性强
稳定性高
工作原理
两台Tomcat主机,Tomcat-node2主机上的操作与Tomcat-node1上相同。
# 安装Java环境 [root@tomcat-node1 ~]# yum install java-1.8.0-openjdk.x86_64 -y # 安装并启动Tomcat [root@tomcat-node1 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/ [root@tomcat-node1 ~]# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat [root@tomcat-node1 ~]# /usr/local/tomcat/bin/startup.sh # 查看端口 [root@tomcat-node1 ~]# netstat -antlupe | grep java tcp6 0 0 :::8080 :::* LISTEN 1001 84108 35429/java
访问Tomcat
# 生成Tomcat的主配置文件 [root@tomcat-node1 ~]# vim /usr/local/tomcat/conf/tomcat.conf JAVA_HOME=/etc/alternatives/jre_openjdk # 生成启动文件 [root@tomcat-node1 ~]# 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.target
standalone模式,Tomcat单独运行,直接接受用户的请求,不推荐。
反向代理,单机运行,提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp代理给Tomcat
前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更适合
多级代理
利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机
利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的host首部
[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf server { listen 80; server_name www.qwert.org; root /data/web/html; index index.html; location ~ \.jsp$ { proxy_pass http://tomcat; } } # 重启服务进行测试 # 浏览器中访问www.qwert.org/test.jsp
动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是Load Balance负载均衡。
当单机Tomcat,演化出多机多级部署的时候,一个问题便凸显出来,这就是Session。而这个问题的由来,都是由于HTTP协议在设计之初没有想到未来的发展。
[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf upstream tomcat { #ip_hash; hash $cookie_JSESSIONID; server 172.25.254.10:8080; server 172.25.254.20:8080; } server { listen 80; server_name www.qwert.org; root /data/web/html; index index.html; location ~ \.php$ { root /data/web/php; set $key $uri$args; srcache_fetch GET /memc $key; srcache_store PUT /memc $key; fastcgi_pass 172.25.254.100:9000; fastcgi_index index.php; include fastcgi.conf; } location ~ \.jsp$ { proxy_pass http://tomcat; } } # 重启服务进行测试 # 浏览器中访问www.qwert.org/test.jsp
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 官网:http://memcached.org/
[root@tomcat-node1 ~]# yum install memcached -y [root@tomcat-node1 ~]# vim /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 0.0.0.0,::1" [root@tomcat-node1 ~]# systemctl enable --now memcached [root@tomcat-node1 ~]# netstat -antlupe | grep memcache tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 980 97815 34711/memcached # Tomcat-node2上操作相同
msm(memcached session manager)提供将Tomcat的session保持到memcached可以实现高可用。
项目早期托管在google code,目前在Github
github网站链接: https://github.com/magro/memcached-session-manager
支持Tomcat的 6.x、7.x、8.x、9.x
Tomcat的Session管理类,Tomcat版本不同
Session数据的序列化、反序列化类
驱动类
参考链接: https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
将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
下载相关jar包,参考下面官方说明的下载链接
https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
# 修改Tomcat配置 [root@tomcat-node1 ~]# vim /usr/local/tomcat/conf/context.xml ====================省略========================= WEB-INF/web.xml WEB-INF/tomcat-web.xml ${catalina.base}/conf/web.xml [root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/context.xml =====================省略====================== WEB-INF/web.xml WEB-INF/tomcat-web.xml ${catalina.base}/conf/web.xml # nginx配置 [root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf upstream tomcat { #ip_hash; hash $cookie_JSESSIONID; server 172.25.254.10:8080; server 172.25.254.20:8080; } server { listen 80; server_name www.qwert.org; root /data/web/html; index index.html; location ~ \.php$ { root /data/web/php; set $key $uri$args; srcache_fetch GET /memc $key; srcache_store PUT /memc $key; fastcgi_pass 172.25.254.100:9000; fastcgi_index index.php; include fastcgi.conf; } location ~ \.jsp$ { proxy_pass http://tomcat; } } # 重启nginx # 重启memcached # 重启tomcat # 在两台tomcat都开启的情况下在浏览器访问www.qwert.org/test.jsp进行测试,然后停掉一台主机的tomcat继续提交信息看是否可以读取到之前的会话信息
停掉node1进行测试
下一篇:安装银河麒麟V10服务器操作系统