【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)

本篇文章给大家介绍Tomcat集群实战——部署zrlog博客项目,包含Nginx负载均衡,HTTPS证书,Redis会话保持,在实战中学习,事半功倍!

目录

准备工作

Web02服务及项目部署

一、安装tomcat

二、将静态资源挂载到NFS

三、Nginx负载均衡+HTTPS证书

Redis会话保持

一、配置虚拟主机,所有节点都需要配置,以web01为例

二、创建目录及代码文件,所有节点都需要配置,以web01为例

三、接入负载均衡

四、接入TomcatClusterRedisSessionManager,所有节点都需要配置,以Web01为例


准备工作

主机名称 公网IP 私网IP
LB01 10.0.0.6 172.16.1.6
Web01   172.16.1.7
Web02   172.16.1.8
NFS   172.16.1.
DB01   172.16.1.51

Web02服务及项目部署

一、安装tomcat

#导入jdk的rpm包进行安装
[root@Web02 ~]# rpm -ivh jdk-8u181-linux-x64.rpm 

[root@Web01 ~]# scp -rp /soft 10.0.0.8:/
[root@Web01 ~]# scp -rp /code/tomcat 10.0.0.8:/code
[root@Web01 ~]# scp /usr/lib/systemd/system/tomcat.service 10.0.0.8://usr/lib/systemd/system/tomcat.service

#scp无法传输软连接,需要重新做
[root@Web02 soft]# rm -rf tomcat/
[root@Web02 soft]# ln -s /soft/apache-tomcat-9.0.73/ /soft/tomcat
[root@Web02 soft]# systemctl daemon-reload
[root@Web02 soft]# systemctl start tomcat

windows修改hosts文件查看是否可以正常访问 

765c0b535ff24c78a95c449cef4c4060.png

二、将静态资源挂载到NFS

f12审查元素,或者右键复制图片链接地址可以查看图片目录,也就是web存放静态资源的目录

2ec1e6eebc6d4770add32087cff697fb.png

[root@NFS ~]# mkdir /data/zrlog
[root@NFS ~]# chown -R www.www /data/zrlog/
[root@NFS ~]# cat /etc/exports
/data/zrlog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@NFS ~]# systemctl restart nfs

[root@Web01 ~]# yum -y install nfs-utils
[root@Web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/zrlog     172.16.1.0/24
[root@Web01 ~]# mount -t nfs 172.16.1.31:/data/zrlog /code/tomcat/zrlog/ROOT/attached/
[root@Web01 ~]# systemctl restart tomcat.service

Web02同样方式挂载

正常上传图片,并且NFS中有显示 

85019c0383ea4066992991290eca3d0e.png f4337ec269e94be7891b39f9d3faab95.png

三、Nginx负载均衡+HTTPS证书

在Nginx做代理时,Nginx代理后端Nginx头部信息默认丢弃,Nginx代理后端Tomcat 头部信息自动携带 不管前面任何域名解析到负载 始终携带代理文件的头部信息。

Tomcat和Nginx都是Web服务器,它们在携带头部信息方面的区别主要有以下几点:
1. Tomcat:Tomcat默认情况下会将所有传入HTTP请求的头部信息都原封不动地转发给后端的应用程序处理。这意味着在使用Tomcat作为Web服务器时,应用程序可以完整地获取到HTTP请求中的所有头部信息。
2. Nginx:与Tomcat不同,Nginx通过配置文件可以控制哪些头部信息被转发给后端的应用程序。在默认情况下,Nginx只会转发一些常见的头部信息,例如Host、User-Agent等。这些头部信息对于大多数应用程序来说已经足够使用。
3. 处理速度:由于Nginx的设计目标是高性能、高并发,因此相比之下,Nginx在处理大量请求时具有更高的效率和更快的速度。而Tomcat则更加注重Java应用程序的功能实现和可靠性。
总的来说,在处理高并发请求和负载均衡方面,Nginx可能更适合;而在业务逻辑处理上,Tomcat可能更具优势。
[root@LB01 ~]# cat /etc/nginx/conf.d/proxy_zrlog.conf
upstream zrlog {
        server 172.16.1.7:8080;
        server 172.16.1.8:8080;
}

server {
        listen 80;
        server_name zrlog.koten.org;
        return 302 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        server_name zrlog.koten.org;
        ssl_certificate   ssl_key/server.crt;
        ssl_certificate_key  ssl_key/server.key;
        location / {
                proxy_pass http://zrlog;
                include proxy_params;
        }
}
[root@LB01 ~]# cat /etc/nginx/proxy_params 
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
[root@LB01 ~]# systemctl restart nginx

修改tomcat日志格式,获取http的Header信息 

[root@Web01 tomcat]# cat /soft/tomcat/conf/server.xml
......
      <Host name="zrlog.koten.org"  appBase="/code/tomcat/zrlog"
            unpackWARs="true" autoDeploy="true">
       
 	 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="zrlog" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b  %{User-Agent}i %{X-Forwarded-For}i" />    #修改日志格式

     </Host>
......
[root@Web01 tomcat]# systemctl restart tomcat

Web02操作一致

带证书正常访问 

1790012ef58f428f9a625520ac9c3f64.png

Redis会话保持

会话保持有很多种方式,例如ip_hash,mysql,redis,tomcat自带的cluster session复制(官方建议不超过4个tomcat节点),本知识点不再结合zrlog博客

一、配置虚拟主机,所有节点都需要配置,以web01为例

[root@Web01 ~]# cat /soft/tomcat/conf/server.xml
......
      <!--session.koten.org-->
      <Host name="session.koten.org"  appBase="/code/to
mcat/session"
            unpackWARs="true" autoDeploy="true">
      </Host>
......
[root@Web01 ~]# systemctl restart tomcat

二、创建目录及代码文件,所有节点都需要配置,以web01为例

[root@Web01 ~]# mkdir -p /code/tomcat/session/ROOT
[root@Web01 ~]# cat /code/tomcat/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>

三、接入负载均衡

cat >/etc/nginx/conf.d/proxy_session.conf<<'EOF'
upstream session {
	server 172.16.1.7:8080;
	server 172.16.1.8:8080;
}

server {
	listen 80;
	server_name session.koten.org;

	location / {
		proxy_pass http://session;
		include proxy_params;
	}
}
EOF

[root@LB01 ~]# systemctl restart nginx

刷新发现session id每次都有变化,无会话保持 

755076a27bb44bf29924d3624fe9a149.png

f3e4c38f626f4094be3610e55da67d56.png

cdd050ea62c041bd8831158e2d83f060.png2a110070786a43dcaf0c2e647701cfb8.png 

四、接入TomcatClusterRedisSessionManager,所有节点都需要配置,以Web01为例

#redis服务器端需要安装并开启
[root@DB01 ~]# yum -y install redis
[root@DB01 ~]# cat /etc/redis.conf |grep ^bind
bind 127.0.0.1 172.16.1.51
[root@DB01 ~]# systemctl start redis


#下载session工具包
[root@Web01 ~]# wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/4.0/tomcat-cluster-redis-session-manager.zip
[root@Web01 ~]# unzip tomcat-cluster-redis-session-manager.zip 
[root@Web01 ~]# cp tomcat-cluster-redis-session-manager/lib/* /soft/tomcat/lib/
[root@Web01 ~]# cp tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties  /soft/tomcat/conf/

#修改redis服务器IP
[root@Web01 ~]# cat /soft/tomcat/conf/redis-data-cache.properties|grep redis.hosts=
redis.hosts=172.16.1.51:6379

#添加如下两行至tomcat/conf/context.xml,添加在</Context>上一行,注意位置
[root@Web01 ~]# cat /soft/tomcat/conf/context.xml
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
[root@Web01 ~]# systemctl restart tomcat

无论怎么刷新,session id都不会变 

67e0dc4aecd44edf973e3aacd3ae94c9.png

c3132bb8a1e04184a15d23e4378260db.png


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注! 

猜你喜欢

转载自blog.csdn.net/qq_37510195/article/details/130606342