web应用服务器tomcat
什么是tomcat
Tomcat 是一个开源的 Java Web 应用服务器,由 Apache 软件基金会 开发和维护。它主要用于运行由 Java 编写的 Web 应用程序。Tomcat 可以理解和执行 Java Servlet 和 JavaServer Pages (JSP),这些技术允许开发人员编写能够动态生成网页内容的程序。
Tomcat的功能和特点
Tomcat的应用场景
综上所述,Tomcat 既是一种工具,也是一种技术。作为工具,它是一个开源的 Java Web 应用服务器,提供了运行和管理 Java Web 应用的环境。作为技术,它实现了多个 Java EE 规范,如 Servlet 和 JSP,支持开发和部署动态 Web 应用
1.tomcat的简单安装
上传所需软件包至Linux,也可以直接去官网下载(Apache Tomcat® – Welcome!)
在安装之前我们需要先搭建Java环境
[root@tomcatA ~]# yum install java-1.8.0-openjdk.x86_64 -y#安装
[root@tomcatA ~]# java -version#查看版本
解压安装tomcat
[root@tomcatA ~]# tar zxf apache-tomcat-9.0.107.tar.gz -C /usr/local/
[root@tomcatA ~]# cd /usr/local/
[root@tomcatA local]# ll
total 0
drwxr-xr-x 9 root root 220 Jul 30 10:54 apache-tomcat-9.0.107
drwxr-xr-x. 2 root root 6 Aug 10 2021 bin
drwxr-xr-x. 2 root root 6 Aug 10 2021 etc
drwxr-xr-x. 2 root root 6 Aug 10 2021 games
drwxr-xr-x. 2 root root 6 Aug 10 2021 include
drwxr-xr-x. 2 root root 6 Aug 10 2021 lib
drwxr-xr-x. 3 root root 17 Jul 8 11:58 lib64
drwxr-xr-x. 2 root root 6 Aug 10 2021 libexec
drwxr-xr-x. 2 root root 6 Aug 10 2021 sbin
drwxr-xr-x. 5 root root 49 Jul 8 11:58 share
drwxr-xr-x. 2 root root 6 Aug 10 2021 src
[root@tomcatA local]# mv apache-tomcat-9.0.107/ tomcat
total 0
drwxr-xr-x. 2 root root 6 Aug 10 2021 bin
drwxr-xr-x. 2 root root 6 Aug 10 2021 etc
drwxr-xr-x. 2 root root 6 Aug 10 2021 games
drwxr-xr-x. 2 root root 6 Aug 10 2021 include
drwxr-xr-x. 2 root root 6 Aug 10 2021 lib
drwxr-xr-x. 3 root root 17 Jul 8 11:58 lib64
drwxr-xr-x. 2 root root 6 Aug 10 2021 libexec
drwxr-xr-x. 2 root root 6 Aug 10 2021 sbin
drwxr-xr-x. 5 root root 49 Jul 8 11:58 share
drwxr-xr-x. 2 root root 6 Aug 10 2021 src
drwxr-xr-x 9 root root 220 Jul 30 10:54 tomcat
启动
[root@tomcatA local]# cd tomcat/bin/
[root@tomcatA bin]# ./startup.sh
[root@tomcatA bin]# ss -lntup | grep java
tcp LISTEN 0 100 *:8080 *:* users: (("java",pid=29765,fd=57))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* users: (("java",pid=29765,fd=66))
[root@tomcatA bin]#
浏览器测试IP访问
2.制作tomcat启动文件
脚本启动不方便我们想做开机自启
1.生成tomcat主配置文件指向Java
[root@tomcatA ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre
2.生成启动文件
[root@tomcatA ~]# 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
3.创建指定的用户并修改权限
[root@tomcatA ~]# useradd -s /sbin/nologin -M tomcat
[root@tomcatA ~]# chown tomcat.tomcat /usr/local/tomcat/ -R
4.启动服务(如果之前是启动的需要停止再启动)
[root@tomcatA ~]# cd /usr/local/tomcat/bin/
[root@tomcatA bin]# ./shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
[root@tomcatA bin]# systemctl enable –now tomcat.service
Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /usr/lib/systemd/system/tomcat.service.
3.tomcat单体主机
环境:
两台Linux,一台安装tomcat,一台安装nginx
编辑nginx配置文件
[root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
server{
listen 80;
server_name ch.org;
location ~ \\.jsp$ {
proxy_pass http://192.168.1.61:8080;
}
}
重载使配置生效
接下来对tomcat主机,上传测试文件,将其放置在指定位置(在默认/root下没有访问权限)
[root@tomcatA ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
在浏览器进行访问测试
成功,但是只有一台,无法支撑大量访问
4.tomcat负载均衡
在上一个实验基础上新增一台tomcat
修改nginx主机配置文件
[root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
upstream tomcat {
server 192.168.1.61:8080;
server 192.168.1.62:8080;
}
server{
listen 80;
server_name ch.org;
location ~ \\.jsp$ {
#proxy_pass http://192.168.1.61:8080;
proxy_pass http://tomcat;
}
}
在浏览器进行访问测试
成功,但是这样还是不够人性化,一提交就会转到另一主机
我们添加一个cookie让会话能够保持
5.基于cookie的会话绑定
编辑nginx主机配置文件
[root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
upstream tomcat {
hash $cookie_JSESSIONID;#这里是因为我们在test.jsp文件中指定的id是JSESSIONID
server 192.168.1.61:8080;
server 192.168.1.62:8080;
}
server{
listen 80;
server_name ch.org;
location ~ \\.jsp$ {
#proxy_pass http://192.168.1.61:8080;
proxy_pass http://tomcat;
}
}
在浏览器进行访问测试
在同一浏览器一直刷新,由于JSESSIONID不会变那么会话就一直向同一台后端。
在用户提交数据时,如果后端一台tomcat挂机后会导致前置输入的数据丢失,为了解决这个问题,我们需要引入memcache
架构图
memcache的安装
[root@tomcatA ~]# yum install memcached -y
我们采用的时将数据缓存到对端后的memcache,所以需要打开IP的访问
[root@tomcatA ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"
查看是否修改成功
[root@tomcatA ~]# systemctl enable –now memcached.service
[root@tomcatA ~]# netstat -nltupea |grep memcache
由于tomcat本身是不支持的,所以我们需要一个插件让其能够调用功能
6.tomcat的session共享
这个是msm(memcached session manager)提供将Tomcat的session保持到memcached可以实现高可用。
项目早期托管在google code,目前在Github,网站链接: https://github.com/magro/memcached-session-manager
[root@tomcatA ~]# unzip jar.zip
[root@tomcatA ~]# cd jar/
[root@tomcatA jar]# cp * /usr/local/tomcat/lib/#复制到tomcat的库目录下
然后对tomcat进行相关配置
[root@tomcatA ~]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.1.61:11211,n2:192.168.1.62:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
[root@tomcatB ~]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.1.61:11211,n2:192.168.1.62:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
#memcachedNodes="n1:192.168.1.61:11211,n2:192.168.1.62:11211"表示memcache节点
#由于我们的memcache设置是向对端的写入, failoverNodes="n1"表示在down后访问本机的memcache
以上对tomcatB进行相同配置
对nginx进行配置
[root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
upstream tomcat {
hash $cookie_JSESSIONID;
server 192.168.1.61:8080;
server 192.168.1.62:8080;
}
server{
listen 80;
server_name ch.org;
location ~ \\.jsp$ {
#proxy_pass http://192.168.1.61:8080;
proxy_pass http://tomcat;
}
}
访问测试
先输入几个数据,现在是192.168.1.61,然后我们把它停了
[root@tomcatA ~]# systemctl stop tomcat.service
继续在浏览器输入数据
添加的数据还在,测试成功
评论前必须登录!
注册