50 Tomcat 集群部署_赴的的博客-程序员ITS301_tomcat集群部署

技术标签: tomcat  linux  集群  centos  

1.JVM基本介绍

JAVA业务都是运行在java虚拟机上的,简称 jvm ( java virtual machine )
为什么java需要jvm虚拟机?

早期:
C语言 不支持跨域平台 (游戏)
Windows:在编译一次
MACOS:还需要编译
LINUX: 编译一次
可移植性比较的差。

JAVA: 可以做到一次编译,多处运行。
windows、linux、macos。
需要我们在操作系统上启动运行一个jvm虚拟机,这样我们将java编译好的war、jar包
在windows、linux、macos平台上运行起来。无需我们重复编译。

jvm是由谁提供的呢?
jre:java运行环境 java runtime environment,包含了jvm。
jdk:java开发环境 会包含java的运行环境 jre。(yum install java -y 会安装jdk)

如果我们只是单纯运行java代码,jre足够。 jdk。

2.Tomcat是什么,与Nginx的区别。

Tomcat是一个web服务,提供动态程序的解析(java),支持静态资源。

企业nginx+tomcat模型, nginx处理静态资源,tomcat处理动态资源(java),能加速网站的访问和降低访问的延迟。

Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。


3.Tomcat安装、配置、启动

1.安装jdk
yum install java -y

2.安装Tomcat ( 下载 Tomcat、解压、启动 )
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz
mkdir /soft
tar xf apache-tomcat-9.0.34.tar.gz -C /soft/
ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat

3.目录结构

bin 主要包含启动和关闭tomcat的脚本(启停java脚本依赖jar包文件)
  conf tomcat配置文件的目录
  lib tomcat运行时需要加载的jar包
  logs tomcat日志存放位置
  temp tomcat临时存放文件路径
  webapps tomcat默认站点目录
  work tomcat运行时产生的缓存文件

4.Tomcat的HTTP请求过程

在这里插入图片描述

在这里插入图片描述

用户发出一个请求,如http://tomcat.oldxu.com:8080/index.jsp
Connector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给符合条件的Engine
Engine通过请求中的主机名tomcat.oldxu.com查找满足条件的虚拟主机(Host)
找到后就去此虚拟主机指定的appBase(代码存放的目录)最后将解析产生的结果返回给用户。


4.使用tomcat部署web服务

  1. 定义虚拟主机
vim /soft/tomcat/conf/server.xml
    <!--站点zrlog.oldxu.com-->
  <Host name="zrlog.oldxu.com"  appBase="/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 &quot;%r&quot; %s %b" />
  </Host>
  1. 上传war包至指定目录
[[email protected] conf]# mkdir /zrlog
[[email protected] conf]# ll /zrlog/
总用量 11316
-rw-r--r-- 1 root root 11585583 511 11:32 ROOT.war
  1. 重启tomcat应用
1.自动加压.war包
2.自动部署,war包  (自动生成ROOT目录)
[[email protected] conf]# /soft/tomcat/bin/shutdown.sh
[[email protected] conf]# /soft/tomcat/bin/startup.sh
  1. 检查是否部署ok
[[email protected] conf]# tail -f /soft/tomcat/logs/catalina.out
11-May-2020 11:33:32.577 信息 [main] org.apache.coyote.AbstractProtocol.start 
开始协议处理句柄["http-nio-8080"]
11-May-2020 11:33:32.681 信息 [main] org.apache.catalina.startup.Catalina.start 
Server startup in [4,035] milliseconds

配置远程数据库连接信息

MariaDB [(none)]> create  database zrlog charset utf8;
MariaDB [(none)]>grant all privileges on *.* to 'all'@'%' identified by 'xxxxxx';
  1. 访问zrlog站点

5.使用tomcat部署多节点web服务

web1 172.16.1.7
web2 172.16.1.8

1.安装tomcat
[[email protected] ~]# yum install java -y

3.拷贝代码 (注意是在web01节点操作的)
[[email protected] ~]# scp -rp /soft [email protected]:/
[[email protected] ~]# scp -rp /zrlog [email protected]:/

4.web02操作如下
[[email protected] ~]# rm -rf /soft/tomcat/
[[email protected] ~]#ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat

5.共享静态资源。
yum install nfs-utils -y
[[email protected] ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zrlog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

[[email protected] ~]# mkdir /data/zrlog
[[email protected] ~]# chown -R www.www /data/zrlog/
[[email protected] ~]# systemctl restart nfs

所有web节点都需要挂载
mount -t nfs 172.16.1.31:/data/zrlog /zrlog/ROOT/attached/

6.tomcat的base的基础认证

配置Tomcat网页管理页面。 ( nginx basic auth)

  1. vim /soft/tomcat/conf/tomcat-users.xml
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="oldxu" password="123456" roles="manager-gui,admin-gui"/>
  1. 还需要配置该项目的访问权限,因为Tomcat默认管理页面仅允许本机访问,如果希望其他网段能正常访问,需要配置允许规则。
    vim /soft/tomcat/webapps/manager/META-INF/context.xml
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />   #修改为 
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" />
  • 为zrblog添加/admin/添加base认证

1.需要找到项目下的WEB-INF/web.xml进行配置。(了解)
[[email protected] tomcat]# vim /zrlog/ROOT/WEB-INF/web.xml

<web-app>
...
    <security-constraint>
    <!--定义资源名称以及需要认证的url-->
        <web-resource-collection>
            <web-resource-name>zrlog</web-resource-name>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
    
       <!--给对应资源关联角色名-->
        <auth-constraint>
            <role-name>zrlog_role</role-name>
        </auth-constraint>
    </security-constraint>
    
    <!--调用BASIC方法来实现认证-->
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>Default</realm-name>
    </login-config>
...
</web-app>

2.配置用户名密码,关联对应的角色(多个role不要使用相同用户)
[[email protected] tomcat]# vim /soft/tomcat/conf/tomcat-users.xml

<role rolename="zrlog_role"/>
<user username="tomcat" password="123456" roles="zrlog_role"/>

在这里插入图片描述

重启tomcat
[[email protected] ~]#/soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh


7.java源码包、jar包、war包的关系、联系、区别?

1.什么是源码包?

由java工程师编写的java代码,称为java源码包。
编译( maven 方式去编译java的源代码 )

编译之后会得到一个包裹:

war jar

2.什么是war包?

由源码编译后生成的产物,可以直接放入 tomcat运行起来。( 比较广泛 )

3.什么是jar包?

由源码编译后生成的产物。
1.不能独立运行起来,它可能被某个java程序依赖运行。或者war包运行所依赖。
2.可独立运行起来的, java -jar xxx.jar 直接启动运行,无需tomcat

4.源码包、jar、war:

1.源码包编译后会产生war包、jar包
2.war通常是直接由tomcat运行启动,启动加载项目时会依赖一些jar包。
3.jar包,
分为不可独立运行(被java程序依赖运行、或者是被war包依赖运行)
分为可独立运行:可以直接对外提供服务。只需要有java环境即可。启动命令: java -jar xx.jar


8. tomcat集群部署

在这里插入图片描述

8.1 Nginx_proxy
[[email protected] ~]# cat /etc/nginx/conf.d/proxy_zrlog.oldxu.com.conf

upstream zrlog {
    
	server 172.16.1.7:8080;
	server 172.16.1.8:8080;
}

server {
    
	listen 80;
	server_name zrlog.oldxu.com;

	#tomcat启动的java程序,可以直接通过proxy_pass进行负载均衡
	location / {
    
		proxy_pass http://zrlog;
		include proxy_params;
	}
}

8.2 单节点Tomcat实现HTTPS ( 了解 )
1.修改tomcat配置: server.xml

0.首先需要有证书 ( 必须 )
1.将http的默认监听端口8080 修改为 80,redirect至 443
2.开启https监听器,配置证书即可。
3.将http强制跳转https ( tomcat操作,与nginx无关。)

使用新机器web03演示

[[email protected] ~]# yum install java -y
[[email protected] ~]# mkdir /soft
[[email protected] ~]#tar xf apache-tomcat-9.0.34.tar.gz -C /soft/
[[email protected] ~]#ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat
vim /soft/tomcat/conf/server.xml

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />

    <Connector port="443"
    protocol="HTTP/1.1"
    SSLEnabled="true"
    scheme="https"
    secure="true"
    keystoreFile="/ssl/3434295_aliyun.xuliangwei.com.pfx"
    keystoreType="PKCS12"
    keystorePass="OpI94943"
    clientAuth="false"
    SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
    ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/> mkdir /ssl/------>>>放入证书

2.1 修改 localhost

<Host name="aliyun.xuliangwei.com"  appBase="webapps"

2.2 配置http跳转 https
在负载均衡上配置证书就可以实现全栈https

web1 web2 lb3
172.16.1.7 172.16.1.8 10.0.0.5

[[email protected] conf.d]# cat /etc/nginx/conf.d/proxy_zrlog.oldxu.com.conf

upstream zrlog {
    
	server 172.16.1.7:8080;
	server 172.16.1.8:8080;
}

server {
    
	listen 443 ssl;
	server_name zrlog.oldxu.com;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;

	#tomcat启动的java程序,可以直接通过proxy_pass进行负载均衡
	location / {
    
		proxy_pass http://zrlog;
		include proxy_params;
	}
}

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

8.3 Nginx+Tomcat+Redis实现集群会话共享

多种方式:
1.ip_hash
2.mysql
3.redis
4.tomcat自带的cluster session复制 ( 官方建议不要超过4个tomcat节点 )

  • 准备web01 和 web02
    支持redis session共享----->>>下载 tomcat-cluster-redis-session-manager

  • 解压
    在这里插入图片描述

  • 1.拷贝所有的jar包
    [[email protected] ~]# cp tomcat-cluster-redis-session-manager/lib/* /soft/tomcat/lib/

  • 2.拷贝redis配置文件,并且更新redis配置文件
    [[email protected] ~]# cp tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties /soft/tomcat/conf/

  • 3.Add the below two lines in your tomcat/conf/context.xml file.
    <Valve className="tomcat.request.session.redis.SessionHandlerValve" />
    <Manager className="tomcat.request.session.redis.SessionManager" />

  • 4.准备web01 和web02 一个session测试页面

  <!--站点session.oldxu.com-->
      <Host name="session.oldxu.com"  appBase="/session"
            unpackWARs="true" autoDeploy="true">
      </Host>

[[email protected] ~]# mkdir -p /session/ROOT
[[email protected] ~]# vi /session/ROOT/index.jsp

<body>
<%
//HttpSession session = request.getSession(true);
System.out.println(session.getCreationTime());
out.println("<br> web02 SESSION ID:" + session.getId() + "<br>");
out.println("Session created time is :" + session.getCreationTime()
+ "<br>");
%>
</body>
  • 5.接入负载均衡
    [[email protected] conf.d]# cat /etc/nginx/conf.d/proxy_session.oldxu.com.conf
upstream session {
    
	server 172.16.1.7:8080;
	server 172.16.1.8:8080;
}

server {
    
	listen 80;
	server_name session.oldxu.com;

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

建议:
1.先配置session的网站
2.搭建nginx+tomcat集群
3.测试访问,演示是否web01和web02的session不一致
4.接入redis,实现tomcat共享会话信息
5.再次测试,请求web01和web02 看session是否是一致的。
6.登陆redis查看是否存在对应的session的key

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a457801170/article/details/106983273

智能推荐

基于Springboot邮件发送实现_HarrisHaword的博客-程序员ITS301_springboot整合mail

基于Springboot邮件发送实现1、创建springboot项目,并引入相关依赖依赖&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/

solidworks批量图号分离_图号分离 - SOLIDWORKS - 机械社区 - 百万机械行业人士网络家园..._weixin_39610229的博客-程序员ITS301

软件小白一枚,因为公司需要统一零件模板,并且和我们搭建的PDM关联,需要将文件属性写入配置待定里面。之前用图号分离宏只能把属性写入自定义信息中,配置待定中只有空的标题,分离后的内容不能读取。+ d6 EA&amp; R2 q" P( ~! L下面是我在网上找的说是可以将图号分离后属性写到配置待定的代码,实际调试有错误,见红色代码。' @2 _" M# m8 b0 ^+ f; B---, ]' ...

算法篇----简易版的粒子群(PSO)实现(Matlab语言)_谷震平的博客-程序员ITS301

前言    粒子群算法实现起来并不是很难,算法思想可以参加我上一篇博文,不多说了。好了,Matlab版的粒子群走起。1 定义变量    粒子群算法有很多参数,做实验的时候会纠结在参数问题上,这里就随机设定了。有时候,参数好坏,是成败关键。没有修过Matlab语言的朋友不用担心,之后会把C或Java版的也总结一下。知识嘛,多多益善。Let's  go !    根据公式,需要c1 c

Build PuTTYTray under Windows7 VS2008(x86)_XeKernel的博客-程序员ITS301

I write this because I encountered some problems:1>terminal.obj : error LNK2019: unresolved external symbol _urlhack_is_in_this_link_region,referenced in function _do_paint1>terminal.obj : error

关闭linux nfs共享检测漏洞,Linux Kernel 'NFS filename'本地拒绝服务漏洞_weixin_39704246的博客-程序员ITS301

BUGTRAQ ID: 34390CNCAN ID:CNCAN-2009040701Linux是一款开放源代码的操作系统。在结构nfs_server初始化过程中没有正确限制NFS文件名,可导致NFS客户端崩溃。RedHat Enterprise Linux WS 4RedHat Enterprise Linux ES 4RedHat Enterprise Linux AS 4RedHat Ente...

win10+Python3.7+dlib19.14实现64点人脸建模_Sakura小神晶的博客-程序员ITS301_pytho 人脸64点

毕业设计是AR相机实现三维人脸建模,在稍微了解了一下以后,发现用Python+dlib来实现人脸特征点采样是比较方便的,于是激情满满动手做起来。然而,win10环境下Python添加dlib库真的是十分不友好,弄了两天才算是弄好了。先记录一下,自己这段时间也不算是白花了o(╥﹏╥)o本来想用anaconda来给Python加载dlib,但在尝试之后没有成功。(难道是Python3.7开始不支持p...

随便推点

Maven整合Actitivi(5.18)流程设计器_Jeson_L的博客-程序员ITS301

转载,看了后觉得非常不错,保存下项目中可以借鉴使用

pythontime模块计算时长_用python的time模块查看你出生多长时间了_姐姐妹妹向前冲的博客-程序员ITS301

time模块的应用查看出生了多长时间查看银行卡解封时间1、查看出生了多长时间这里我们使用time模块计算我们出生了多长时间import time # 导入时间模块b = input('你的出生年月日(请以此格式输入:20000905):')bieth_time = time.mktime(time.strptime(b, '%Y%m%d')) # 计算出生日的时间戳now_time = tim...

卖货还能“带股价”,天猫超市怎么做到的?_螳螂观察的博客-程序员ITS301

文/陈小江来源/螳螂财经(ID:TanglangFin)近年来直播带货的火爆,让很多“网红主播概念股”都曾股价飙升。如辛巴入股的起步股份收获过5个涨停,与薇娅合作的梦洁创造过股价9天8涨停的记录,蹭上李佳琦热度的新文化股价也收获过一波连板。原因似乎不难理解,网红主播不仅拥有大量用户基础(粉丝),还能提供一个好的卖货渠道(直播间),这些都能给品牌商家带来新增量。顺着这个逻辑,一个拥有庞大用户群体的优质渠道,对品牌商家的股价拉升是不是应该也有类似表现?于是,在好奇心驱使下,笔者仔细研究了下自..

URL重定向漏洞_秋水sir的博客-程序员ITS301_url重定向

0X00:什么是url重定向?URL重定向(URL redirection,或称网址重定向或网域名称转址),是指当使用者浏览某个网址时,将他导向到另一个网址的技术url转发和重定向区别第一种是request.getRequestDispatcher().forward(request,response):1、属于转发,也是服务器跳转,也可以叫做内部重定向,相当于方法调用,...

springboot2.0 kafka 收发消息_yy1209357299的博客-程序员ITS301

pom依赖&lt;dependency&gt; &lt;groupId&gt;org.springframework.kafka&lt;/groupId&gt; &lt;artifactId&gt;spring-kafka&lt;/artifactId&gt;&lt;/dependency&gt;application.propertiestopic=testspring.kafka.bootstrap-servers=kafka--ip:9092spring.kafka.c.

vim 显示行号 (Linux)_Warren_0611的博客-程序员ITS301_vim 显示行号

Vim 是软件开发人员和Linux系统管理员使用的文本编译器。默认情况下Vim 是不显示行号的,不过不影响使用Vim,这里只简单说一个设置行号的方法。1、进入这个 /etc/vim 系统文件夹2、使用命令 sudo vim vimrc 打开vimrc,在文件末尾添加 set number3、命令模式下 :wq 保存退出就可以了4、就有行号了...

推荐文章

热门文章

相关标签