一、TOMCAT功能介绍
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和 并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还是一个Servlet和 JSP容器
官网: http://tomcat.apache.org/
官网文档: https://tomcat.apache.org/tomcat-8.5-doc/index.html
1.安装tomcat
1.安装java环境
[root@tomcat-node1 ~]# dnf search jdk
[root@tomcat-node1 ~]# dnf install java-1.8.0-openjdk.x86_64 -y
2.安装并启动tomcat
[root@tomcat-node1 ~]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg apache-tomcat-9.0.93.tar.gz
[root@tomcat-node1 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/
[root@tomcat-node1 ~]# cd /usr/local/
[root@tomcat-node1 local]# ls
apache-tomcat-9.0.93 bin etc games include lib lib64 libexec sbin share src
[root@tomcat-node1 local]# ln -s apache-tomcat-9.0.93 tomcat
[root@tomcat-node1 local]# ls
apache-tomcat-9.0.93 bin etc games include lib lib64 libexec sbin share src tomcat
[root@tomcat-node1 local]# cd tomcat/
[root@tomcat-node1 tomcat]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@tomcat-node1 tomcat]# cd bin/
[root@tomcat-node1 bin]# ls
bootstrap.jar commons-daemon-native.tar.gz makebase.sh tomcat-juli.jar
catalina.bat configtest.bat setclasspath.bat tomcat-native.tar.gz
catalina.sh configtest.sh setclasspath.sh tool-wrapper.bat
catalina-tasks.xml daemon.sh shutdown.bat tool-wrapper.sh
ciphers.bat digest.bat shutdown.sh version.bat
ciphers.sh digest.sh startup.bat version.sh
commons-daemon.jar makebase.bat startup.sh
[root@tomcat-node1 bin]# ./startup.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:
Tomcat started.
3.查看端口
[root@tomcat-node1 bin]# netstat -antlupe | grep java
tcp6 0 0 :::8080 :::* LISTEN 0 34010 2270/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 0 34022 2270/java
4.访问tomcat
2.生成tomcat的启动文件
1.生成tomcat的著配置文件
[root@tomcat-node1 bin]# cd
[root@tomcat-node1 ~]#
[root@tomcat-node1 ~]# cd /usr/local/tomcat/
[root@tomcat-node1 tomcat]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@tomcat-node1 tomcat]# cd conf/
[root@tomcat-node1 conf]# vim tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk/
2.生成启动文件
[root@tomcat-node1 conf]# useradd -s /sbin/nologin -M tomcat
[root@tomcat-node1 conf]# chown -R tomcat.tomcat /usr/local/tomcat
[root@tomcat-node1 conf]# 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
[root@tomcat-node1 ~]# ls /usr/local/tomcat/ -ld
drwxr-xr-x 9 root root 220 8月 21 11:47 /usr/local/tomcat/
[root@tomcat-node1 ~]# chown -R tomcat.tomcat /usr/local/apache-tomcat-9.0.93/
[root@tomcat-node1 ~]# systemctl enable --now tomcat
[root@tomcat-node1 ~]# systemctl restart tomcat
[root@tomcat-node2 ~]# ls
公共 视频 文档 音乐 anaconda-ks.cfg jar
模板 图片 下载 桌面 apache-tomcat-9.0.93.tar.gz test.jsp
[root@tomcat-node2 ~]# vin test.jsp
bash: vin: command not found...
[root@tomcat-node2 ~]# vim test.jsp
[root@tomcat-node2 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
二、Tomcat部署
Nginx反向代理
利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机 利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的 host首部
[root@node-2 ~]# cd /usr/local/nginx/conf.d
[root@node-2 conf.d]# ls
vhosts.conf
[root@node-2 conf.d]# vim vhosts.conf
server {
listen *:80;
server_name www.wang.org;
root /data/web/html;
index index.html;
location ~ \.jsp$ {
proxy_pass http://172.25.254.10:8080;
}
}
[root@node-2 conf.d]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@node-2 conf.d]# nginx -s reload
tomcat负载均衡
动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压 力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是Load Balance负载 均衡。 当单机Tomcat,演化出多机多级部署的时候,一个问题便凸显出来,这就是Session。而这个问题的由 来,都是由于HTTP协议在设计之初没有想到未来的发展。
upstream tomcat {
ip_hash;
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen *:80;
server_name www.wang.org;
root /data/web/html;
index index.html;
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
}
upstream tomcat {
hash $cookie_JSESSIONID;
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen *:80;
server_name www.wang.org;
root /data/web/html;
index index.html;
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
}
三、Memcache
Memcache简介
动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压 力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是Load Balance负载 均衡。 当单机Tomcat,演化出多机多级部署的时候,一个问题便凸显出来,这就是Session。而这个问题的由 来,都是由于HTTP协议在设计之初没有想到未来的发展。
Memcache安装与启动
[root@tomcat-node2 ~]# yum install memcached -y
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"
[root@tomcat-node2 ~]# systemctl enable --now memcached
[root@tomcat-node2 ~]# netstat -antlupe | grep memcache
四、session会话保持
msm介绍
msm(memcached session manager)提供将Tomcat的session保持到memcached可以实现高可用。 项目早期托管在google code,目前在Github
#node2和node1同时做
[root@tomcat-node2 ~]# ls
公共 视频 文档 音乐 anaconda-ks.cfg jar
模板 图片 下载 桌面 apache-tomcat-9.0.93.tar.gz test.jsp
[root@tomcat-node2 ~]# cd jar/
[root@tomcat-node2 jar]# ls
asm-5.2.jar minlog-1.3.1.jar
kryo-3.0.3.jar msm-kryo-serializer-2.3.2.jar
kryo-serializers-0.45.jar objenesis-2.6.jar
memcached-session-manager-2.3.2.jar reflectasm-1.11.9.jar
memcached-session-manager-tc9-2.3.2.jar spymemcached-2.12.3.jar
[root@tomcat-node2 ~]# cp * /usr/local/tomcat/lib/
[root@tomcat-node2 ~]# cd /usr/local/tomcat/conf/
[root@tomcat-node2 ~]# ls
[root@tomcat-node2 ~]# vim context.xml
#添加
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"
failoverNodes="m2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
node2
node1