kylin-tomcat实战
Tomcat集群部署
一、安装所需环境
- java环境运行在jdk上,也就是说,必须有jdk才能运行java
1.安装jdk
方式一:上传rpm包
方式二:直接使用仓库yum安装
[root@web01 ~]# yum install -y java
2.安装Tomcat
第一步:在Tomcat官网下载其rpm包
Tomcat官网: https://tomcat.apache.org/
[root@web01 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.34/bin/apache-tomcat-10.1.34.tar.gz
第二步:创建软件存放的目录,解压至此
[root@web01 ~]# mkdir /soft
[root@web01 ~]# cd /soft
[root@web01 soft]# tar xf apache-tomcat-10.1.34.tar.gz
第三步:原本目录名字太长了,创建一个名字短点的软连接,方便后续使用
[root@web01 soft]# ln -s /soft/apache-tomcat-10.1.34/ /soft/tomcat
第四步:测试启动和停止(是否有8080端口)
[root@web01 soft]# /soft/tomcat/bin/startup.sh
[root@web01 soft]# netstat -tnulp
tcp6 0 0 :::8080 :::* LISTEN 76189/java
[root@web01 soft]# /soft/tomcat/bin/shutdown.sh
3.配置Tomcat以systemc方式启动
第一步:配置文件
[root@web01 ~]# cat >/usr/lib/systemd/system/tomcat.service<<'EOF'
[Unit]
Description=Apache Tomcat Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/soft/tomcat/bin/startup.sh
ExecStop=/soft/tomcat/bin/shutdown.sh
ExecRetart=/soft/tomcat/bin/shutdown.sh && sleep2 &&
/soft/tomcat/bin/startup.sh
[Install]
WantedBy=multi-user.target
EOF
第二步:重新加载文件
[root@web01 ~]# systemctl daemon-reload
[root@web01 ~]# systemctl enable tomcat
二、配置文件
1.tomcat软件目录结构
bin ---主要包含启动和关闭tomcat的脚本(启停java脚本依赖jar包文件)
conf ---tomcat配置文件的目录(站点配置:server.xml)
lib ---tomcat运行时需要加载的jar包
logs ---tomcat日志存放位置
temp ---tomcat临时存放文件路径
webapps ---tomcat默认站点目录
work ---tomcat运行时产生的缓存文件
2.配置文件详解
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
3.虚拟主机
-
相当于Nginx中的server -
Host name--站点域名
-
appBase--代码目录
-
prefix--日志名
-
suffix--日志文件格式
第一步:编辑配置文件,将要运行的新站点添加进去
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
<!--tomcat.dezyan.com-->
<Host name="tomcat.dezyan.com" appBase="/code/tomcat/"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="tomcat_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
第二步:重新启动Tomcat
[root@web01 ~]# systemctl stop tomcat
[root@web01 ~]# systemctl start tomcat
第三步:创建代码目录(Tomcat10会自动创建代码目录,但不会创建ROOT,还需自己创建)
[root@web01 ~]# mkdir -p /code/tomcat/ROOT
第四步:添加测试代码
[root@web01 ROOT]# echo "test-tomcat yes or no " > /code/tomcat/ROOT/index.html
第五步:Windows本地解析,浏览器访问测试
10.0.0.7 tomcat.dezyan.com
http://tomcat.dezyan.com:8080/
4.tomcat中Context的作用:
- 类似于Nginx中的alias
第一步:创建对应的代码目录
第二步:编辑配置文件
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
<!--tomcat.dezyan.com-->
<Host name="tomcat.dezyan.com" appBase="/code/tomcat/"
unpackWARs="true" autoDeploy="true">
<!--访问diy.oldboy.com:8080/no这个uri,获取/code/no中页面资源,不存在该目录会报错;无法启动Tomcat 需要提前创建-->
<Context docBase="/code/no" path="/no" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="tomcat_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
第三步:在代码目录中加点东西
[root@web01 ROOT]# echo nononon > /code/no/index.html
第四步:重启服务
[root@web01 ROOT]# systemctl restart tomcat.service
第五步:访问测试
http://tomcat.dezyan.com:8080/no
三、Tomcat自带的管理界面
- 监理功能
- 监控功能
注意!
所有的管理页面,都将权限赋予给了角色,而角色的名称是固定的: manager-gui admin-gui,所以需要添加一个用户,将用户捆绑至对应的角色,这样用户就可以访问到对应的页面
第一步:编辑其配置文件
[root@web01 ROOT]# vim /soft/tomcat/conf/tomcat-users.xml
#在<tomcat-users></tomcat-users>块中添加如下内容
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="123456" roles="manager-gui,admin-gui"/>
第二步:由于项目默认允许127.0.0.1访问,所以配置好了角色和用户也无法正常访问:
[root@web01 ~]# vim /soft/tomcat/webapps/host-manager/META-INF/context.xml
[root@web01 ~]# vim /soft/tomcat/webapps/manager/META-INF/context.xml
默认状态
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
修改后(10\.0\.0\.\d):
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
第三步:重启Tomcat访问
[root@web01 ~]# systemctl restart tomcat.service
10.
四、Tomcat部署zrlog博客项目(使用jdk8和Tomcat9)
1.上传jdk8和Tomcat9的rpm包和压缩包,并安装、解压
1.安装jdk8
[root@web01 ~]# rpm -ivh jdk-8u181-linux-x64.rpm
2.创建Tomcat软件目录,安装
[root@web01 ~]# mkdir /soft
[root@web01 ~]# cd /soft/
[root@web01 ~]# tar xf apache-tomcat-9.0.98.tar.gz
3.创建Tomcat软连接,方便使用
[root@web01 ~]# ln -s apache-tomcat-9.0.98/ /soft/tomcat
4.配置Tomcat以systemc方式启动
见一中的3
5.启动关闭查看端口
[root@web01 ~]# /soft/tomcat/bin/startup.sh
[root@web01 ~]# /soft/tomcat/bin/shutdown.sh
[root@web01 ~]# netstat -tnulp
2.定义虚拟主机
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
<Host name="zrlog.dezyan.com" appBase="/code/zrlog" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="zrlog_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
[root@web01 ~]# systemctl restart tomcat.service
2.上传war包至/code/zrlog(会自动解压)
[root@web01 ~]# cd /code/zrlog/
#上传war包
[root@web01 zrlog]# systemctl restart tomcat.service
3.访问测试
Windows本地解析
10.0.0.7 zrlog.dezyan.com
http://zrlog.dezyan.com:8080/install
4.测试远程连接数据库,创建zrlog数据库
1.测试
[root@web02 ~]# mysql -h172.16.1.51 -udzy -pdzy123.com
2.创建数据库
MariaDB [(none)]> create database zrlog;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wordpress |
| zrlog |
+--------------------+
5 rows in set (0.002 sec)
5.在网页端填写数据库信息
五、使用集群架构部署zrlog并实现会话保持
1.分别在web01和web02上部署zrlog业务
web01部署:见<四>
web02部署:
1.rpm包上传,安装
[root@web02 ~]# ll jdk-8u181-linux-x64.rpm
-rw-r--r-- 1 root root 170023183 Aug 20 09:31 jdk-8u181-linux-x64.rpm
[root@web02 ~]# rpm -ivh jdk-8u181-linux-x64.rpm
2.scp复制解压后的Tomcat9包,进行相关配置
[root@web02 ~]# scp -r 10.0.0.7:/soft /
3.配置systemctl启动方式
cat >/usr/lib/systemd/system/tomcat.service<<'EOF'
[Unit]
Description=Apache Tomcat Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/soft/tomcat/bin/startup.sh
ExecStop=/soft/tomcat/bin/shutdown.sh
ExecRetart=/soft/tomcat/bin/shutdown.sh && sleep2 && /soft/tomcat/bin/startup.sh
[Install]
WantedBy=multi-user.target
EOF
# 重新加载systemctl
[root@web02 ~]# systemctl daemon-reload
4.下载zrlog 同步web01的代码
[root@web02 ~]# scp -r 10.0.0.7:/code/zrlog /code/
5.启动tomcat
[root@web02 logs]# systemctl restart tomcat
6.windows访问测试
10.0.0.8 www.zr.com
2.部署负载均衡
[root@lb01 conf.d]# vim zrlog.conf
upstream zrlog {
server 172.16.1.7:8080;
server 172.16.1.8:8080;
keepalive 16;
}
server {
listen 443 ssl;
server_name zrlog.dezyan.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
location / {
proxy_pass http://zrlog;
include proxy_params;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
}
server {
listen 80;
server_name zrlog.dezyan.com;
return 302 https://$server_name$request_uri;
}
[root@lb01 conf.d]# nginx -t
[root@lb01 conf.d]# systemctl restart nginx
#windows设置本地解析
10.0.0.5 zrlog.dezyan.com
浏览器访问测试
3.静态资源共享
web01
1.Windows本地解析设置为web01服务器,发布一篇带图片的博客,查看静态资源的存储位置
可发现存储在:/attached/image/20241223/20241223145954_790.png
此时,web01可以访问,web02访问时"裂图"
2.NFS配置共享zrlog业务静态资源的目录
[root@nfs ~]# vim /etc/exports
#新添一行
/data/zrlog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
#创建目录,授权,重启服务
[root@nfs ~]# mkdir /data/zrlog
[root@nfs ~]# chown -R dezyan.dezyan /data/zrlog/
[root@nfs ~]# systemctl restart nfs
3.将zrlog的静态资源目录推送至NFS
[root@web01 zrlog]# scp -r ROOT/attached/image 10.0.0.31:/data/zrlog/
#授权!
[root@nfs zrlog]# chown -R dezyan.dezyan /data/zrlog/
4.将NFS服务挂载到attached目录
[root@web01 zrlog]# mount -t nfs 172.16.1.31:/data/zrlog /code/zrlog/ROOT/attached
[root@web01 zrlog]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 459M 0 459M 0% /dev
tmpfs 475M 0 475M 0% /dev/shm
tmpfs 475M 37M 438M 8% /run
tmpfs 475M 0 475M 0% /sys/fs/cgroup
/dev/sda3 48G 4.7G 44G 10% /
tmpfs 475M 32K 475M 1% /tmp
/dev/sda1 195M 122M 74M 63% /boot
172.16.1.31:/data/wordpress 48G 3.8G 45G 8% /code/wordpress/wp-content/uploads
tmpfs 95M 0 95M 0% /run/user/0
172.16.1.31:/data/zrlog 48G 3.8G 45G 8% /code/zrlog/ROOT/attached
web02挂载NFS
[root@web02 ROOT]# mkdir /code/zrlog/ROOT/attached
[root@web02 ~]# mount -t nfs 172.16.1.31:/data/zrlog /code/zrlog/ROOT/attached
[root@web02 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 459M 0 459M 0% /dev
tmpfs 475M 0 475M 0% /dev/shm
tmpfs 475M 49M 426M 11% /run
tmpfs 475M 0 475M 0% /sys/fs/cgroup
/dev/sda3 48G 4.7G 44G 10% /
tmpfs 475M 32K 475M 1% /tmp
/dev/sda1 195M 122M 74M 63% /boot
tmpfs 95M 0 95M 0% /run/user/0
172.16.1.31:/data/zrlog 48G 3.9G 44G 9% /code/zrlog/ROOT/attached
4.Tomcat实现会话保持
- 官方推荐的不使用,如果使用则不能超过4个节点
- 一般使用第三方插件实现tomcat将会话写入到redis
查看两台web的session
web01
1.配置虚拟主机
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
添加测试server
<Host name="session.oldboy.com" appBase="/code/session"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="session_tomcat" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
[root@web01 ~]# systemctl restart tomcat.service
2.准备查看session的代码
[root@web01 ~]# vim /code/session/ROOT/index.jsp
<body>
<%
//HttpSession session = request.getSession(true);
System.out.println(session.getCreationTime());
out.println("<br> web01 SESSION ID:" + session.getId() + "<br>");
out.println("Session created time is :" + session.getCreationTime()
+ "<br>");
%>
</body>
[root@web01 ~]# systemctl restart tomcat.service
3.访问测试
10.0.0.7 session.oldboy.com
web01 SESSION ID:B1AAAE6C1B71A81F69798385921429C2
Session created time is :1734938627760
web02
配置与测试代码相同,直接远程推送即可
[root@web02 ROOT]# scp 10.0.0.7:/soft/tomcat/conf/server.xml /soft/tomcat/conf/
[root@web02 ROOT]# systemctl restart tomcat
[root@web02 ROOT]# mkdir /code/session/ROOT
[root@web02 ROOT]# scp 10.0.0.7:/code/session/ROOT/* /code/session/ROOT
进入代码修改备注为web02,方便查看
浏览器测试
web02 SESSION ID:872BAA8D5A88772B6421ECC47FA7C7CC
Session created time is :1734938863050
接入负载均衡不断刷新查看
[root@lb01 conf.d]# cat session.conf
upstream se {
server 172.16.1.7:8080;
server 172.16.1.8:8080;
keepalive 16;
}
server {
listen 443 ssl;
server_name session.oldboy.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
location / {
proxy_pass http://se;
include proxy_params;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
}
server {
listen 80;
server_name session.oldboy.com;
return 302 https://$server_name$request_uri;
}
[root@lb01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 conf.d]# systemctl restart nginx
hosts解析
10.0.0.5 session.oldboy.com
访问结果session一直是变化的。
下载第三方插件配置接入redis
1.上传/下载Tomcat的redis插件
插件链接: https://github.com/ran-jit/tomcat-cluster-redis-session-manager
[root@web01 ~]# ll
total 900
-rw-r--r-- 1 root root 921429 Dec 23 11:13 tomcat-cluster-redis-session-manager.zip
2.解压插件
[root@web01 ~]# unzip tomcat-cluster-redis-session-manager.zip
3.拷贝jars到tomcat的/lib目录中
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/lib/* /soft/tomcat/lib/
4.拷贝conf下的redis.properties文件,到tomcat的conf文件
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties /soft/tomcat/conf/
5.修改Tomcat的redis插件配置文件
[root@web01 ~]# vim /soft/tomcat/conf/redis-data-cache.properties
6 redis.hosts=172.16.1.5:6379
6.在Tomcat配置文件tomcat/conf/context.xml中添加两行内容
[root@web01 ~]# vim /soft/tomcat/conf/context.xml
#在<Context></Context>区块的末尾添加两行
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
[root@web01 ~]# systemctl restart tomcat.service
7.同步至web02
[root@web01 ~]# rsync -avz --delete /soft/tomcat/ 10.0.0.8:/soft/tomcat
[root@web02 ~]# systemctl restart tomcat.service
本文来自博客园,作者:丁志岩,转载请注明原文链接:https://www.cnblogs.com/dezyan/p/18784462

浙公网安备 33010602011771号