Tomcat基础知识
Tomcat基础
Java 编译型、面向对象、一次编译到处运行;
JVM(JAVA虚拟机)运行JAVA的字节码;
JAVA编译流程:
1.安装JDK(Java开发运行环境)
2.安装Maven(Java包管理工具),一键下载依赖、编译、打包
3.下载源代码。git clone
4.使用Maven编译打包生成war包
5.安装配置Tomcat,将ROOT.war包复制成webapps目标中
6.运行Tomcat,war自动解压缩
7.打开浏览器,查看IP地址:8080,是否运行正常
8.使用Nginx反向代理Tomcat
# 详细操作步骤(用来下载别的版本,如果有安装包就不用看啦)
钉钉进入网站——文档——用户手册——Java环境配置——点击进入jdk官网——国旗换成中国,
直接进入中文的网站https://www.oracle.com/cn/java/
——点击下载Java——下滑一半点击Java8,Linux,
下载最后一个jdk-8u461-linux-x64.tar.gz
Tomcat介绍
Tomcat是开源web应用服务器,用来部署Java web项目,全称Apache Tomcat。Tomcat轻量级、开源且易于部署,广泛应用于中小型企业项目和开发环境。
工作流程:
总结:Tomcat与Maven的互补性
工具 | 核心职责 | 技术定位 | 协作点 |
---|---|---|---|
Tomcat | 运行Web应用,处理HTTP请求 | 运行时容器 | 接收Maven构建的WAR包并提供服务 |
Maven | 管理依赖、自动化构建项目 | 开发期工具 | 为Tomcat准备可部署的应用包 |
Apache、Nginx、Tomcat比较
Apache是用C写的; Nginx是用C写的; Tomcat是用Java写的。
Tomcat是Apache的拓展,更实质的说是Java应用服务器,用于处理JSP后台语言开发的应用,主要用于处理JSP动态网页。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器(主要用于解析servlet/JSP,同时具备http服务),单纯的Tomcat性能有限,在很多地方表现有欠缺,如活动连接支持、静态内容、大文件和HTTPS等,因此多数都是Apache+Tomcat+JavaSDK的集成。严格的来说,Apache/Nginx 应该叫做[HTTP Server]而Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上)。
Apache
优点:模块多,功能全面,性能稳定,适合静态HTML
缺点:配置相对复杂,自身不支持动态页面
Nginx
优点:功能较多,负载均衡、反向代理等,速度比Apache快
缺点:轻量级web服务器,功能不如Apache全面
Tomcat
优点:能够处理动态请求,可以独立于Apache运行,支持JSP
缺点:对静态内容和大文件的支持有所欠缺
Windows安装JPress文档
下载安装包,下面三个都在里面:
jdk1.8.0_451
1、配置环境变量
此电脑——属性——高级系统设置——环境变量——新建——变量名:JAVA_HOME,变量值:文件夹路径——确定——双击PATH——新建——输入%JAVA_HOME%\bin——确定×3
2、终端操作
按 win+r 快捷键,打开命令窗口,输入 cmd 指令,点击确定
输入java -version查看版本是否为1.8.0
apache-maven-3.9.10
1、配置环境变量
此电脑——属性——高级系统设置——环境变量——新建——变量名:MAVEN_HOME,变量值:文件夹路径——确定——双击PATH——新建——输入%MAVEN_HOME%\bin——确定×3
2、终端操作
按 win+r 快捷键,打开命令窗口,输入 cmd 指令,点击确定
进入所在目录cd D:\APP\JDK-Tomcat-Maven\apache-maven-3.9.10\bin
输入.\mvn -version查看版本是否为3.9.10
3、编译
返回到文件夹新建名为maven_repository的仓库
进入conf——setting,编辑这个xml文件
添加一句
<localRepository>D:\APP\JDK-Tomcat-Maven\apache-maven-3.9.10\maven_repository</localRepository>
镜像源更新为华为云,原本的可以注释掉
<mirror><id>huaweicloud</id><mirrorOf>*</mirrorOf><url>http://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
检测是否设置成功,可以在终端输入.\mvm help:system,最后BUILD SUCCESS就成功了。
apache-tomcat-9.0.106
1、配置环境变量
此电脑——属性——高级系统设置——环境变量——新建——变量名:CATALINA_HOME,变量值:文件夹路径——确定——双击PATH——新建——输入%CATALINA_HOME%\bin——确定×3
2、终端操作
按 win+r 快捷键,打开命令窗口,输入 cmd 指令,点击确定
直接输入startup.bat看看能否正常启动,如果跳出一堆乱码就是能启动
3、解决乱码问题
打开apache-tomcat-9.0.65 -> conf -> logging(类型是Properties源文件)
打开方式为vscode,Ctrl键+F,替换,把UTF-8全部替换成GBK
保存并重新启动 tomcat,输入指令:startup.bat,乱码问题得到解决。
4、网页测试能否正常启动
网址输入localhost:8080,同时startup.bat 启动的 tomcat 命令界面不能关闭
5、如果8080端口被占用或想更换访问端口号
编辑:apache-tomcat-9.0.65 -> conf -> server.xml
找到 Connector 标签所在位置(大概70行左右),修改端口号
保存退出,重新启动Tomcat
网页测试,输入localhost和新的端口号
MySQL8.0.20 下载
1、进入官网下载
官网下载地址:https://dev.mysql.com/downloads/mysql/(opens new window)
进入官网下载页面,点击 Archives 进入选择版本页面,下载,解压
2、配置MySQL环境变量
此电脑——属性——高级系统设置——环境变量——系统变量——path——新建——输入MySQL里bin的路径——确定×3
3、Tomcat部署
把项目的war包(桌面的ROOT.war)放进Tomcat的webapps目录里,会自动解压出一个ROOT文件夹,别的不建议删除会变成404
4、无痕模式进入网页,就会出现数据库啦
Centos7 安装Tomcat——192.168.221.20
# 打开xshell,连接xftp
# 在/usr/local/下创建jdk和tomcat两个目录,把压缩包传输过去
# 分别进入对应的目录里解压缩
tar -xvf jdk-8u451-linux-x64.tar.gz
# 编辑全局变量
vim /etc/profile#set java enviroment
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_451
export CLASSPATH=.:$JAVA_HOME/lib.tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATHsource /etc/profile# 查看版本号
java -version### tomcat压缩包同理
tar -xvf apache-tomcat-9.0.106.tar.gz
cd apache-tomcat-9.0.106/
cd bin/
./startup.sh
然后就可以进网页测试是否成功,输入192.168.221.20:8080即可访问默认的首页
如果想要用自己编辑的war包可以用xftp,找D盘——APP——JDK-Tomcat——apache-tomcat-webapps——ROOT.war包(如下图)
Ubuntu安装Tomcat——192.168.221.21
#安装tomcat
apt -y install tomcat9#将项目war包上传至(没有的话刷新或者刷新左边那个键)
/var/lib/tomcat9/webapps#重启tomcat
systemctl restart tomcat9然后就可以进网页测试是否成功,输入192.168.221.21:8080即可访问默认的首页,如果显示的是It works界面,就把/var/lib/tomcat9/webapps目录下的ROOT目录删掉,等待war包重新生成ROOT后再刷新,就会出现数据库界面了。
负载均衡+Tomcat集群+MySQL主从
nginx | 192.168.221.129(Ubuntu) |
---|---|
Tomcat-1 | 192.168.221.20(Centos7) |
Tomcat-2 | 192.168.221.21(Ubuntu) |
mycat | 192.168.221.22(Ubuntu) |
MySQL-主 | 192.168.221.30(Centos7) |
MySQL-从 | 192.168.221.40(Centos7) |
第一步 主从复制
主从同步
主服务器:192.168.221.30(需要安装好MySQL)
从服务器:192.168.221.40(需要安装好MySQL)
一、主库配置,开启主服务器的master的log_bin
vim /etc/my.cnf
+++++++++++++++++++++++++++++++++++++
[mysqld]
...
# 在后面直接设置主服务器唯一ID
server-id=30
# 启用二进制日志
log-bin= mysql-bin
# 在数据目录创建日志等价于
log-bin=/usr/local/mysql/data/mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(可设置多个,也可以不写)
# binlog-do-db=test
# 设置logbin格式
binlog_format=STATEMENT
+++++++++++++++++++++++++++++++++++++
-------------------------------------------------------------------------
二、从库配置开启从服务器的relay log
vim /etc/my.cnf
+++++++++++++++++++++++++++++++++++++
[mysqld]
...
# 在之前配置下方编写从服务器唯一ID
server-id=40
# 启用中继日志
relay-log= mysql-relay
# 在数据目录创建日志等价于 relay-log= /usr/local/mysql/data/mysql-relay
+++++++++++++++++++++++++++++++++++++
# 重启两台服务器上的mysql
/etc/init.d/mysqld restart或者systemctl restart mysqld
-------------------------------------------------------------------------
三、关闭主从数据库服务器防火墙
# 查看防火墙状态(一般已经默认关闭了)
systemctl status firewalld
# 关闭防火墙(如果已关闭可省略)
systemctl stop firewalld
-------------------------------------------------------------------------
四、主数据库创建用户slave并授权
# 在主数据库端(192.168.221.30)
# 登录mysql
mysql -uroot -proot123
# 创建用户slave
create user 'slave'@'%' identified with mysql_native_password by 'root123';
# 授权
grant replication slave on *.* to 'slave'@'%';
# 刷新权限
flush privileges;
-------------------------------------------------------------------------
五、从数据库端验证主数据库slave用户是否可用
# 在从数据库端(192.168.221.40)
# 验证主数据库slave用户是否可用
mysql -uslave -p -h192.168.221.30 -P3306
输入密码root123
测试完就可以退出了
-------------------------------------------------------------------------
六、配置主从节点信息
# 在主数据库端(192.168.221.30)查询服务ID及Master状态
# 登录
mysql -uroot -proot123
# 查询server_id是否和配置文件中一致
show variables like 'server_id';
# 若不一致,可设置临时ID(重启失效),若一致则跳过这步
# set global server_id = 30;
# 查询Master状态,并记录 File(对应下一步中的master_log_file)并查询Position (对应下一步中的master_log_pos)的值
show master status;
记录下File和Position的值
# 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化
-------------------------------------------------------------------------
七、在从数据库设置同步
# 在从数据库(192.168.221.40)
# 退出slave登录的mysql,登录root
mysql -uroot -proot123
# 查询server_id是否和配置文件中一致
show variables like 'server_id';
# 若不一致,可设置临时ID(重启失效,若一致则跳过这步)
# set global server_id = 40;
# 设置主数据库参数(用上一步创建的slave用户及密码,重登会改变)
change master to
master_host='192.168.221.30',
master_port=3306,
master_user='slave',
master_password='root123',
master_log_file='mysql-bin.000001',
master_log_pos=2926;
# 开始同步
start slave;
# 查询Slave状态
show slave status\G;
# 查看是否配置成功(或许网会慢,稍等一会儿)
Slave_IO_Running :yes
Slave_SQL_Running :yes,则证明配置成功。(后续可不看)
若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值
# 可以在从服务器my.cnf中添加
slave_skip_errors = ALL # 跳过错误,继续同步
# 重启MySQL服务
systemctl restart mysqld
# 若出现错误,则停止同步,重置后再次启动
stop slave;
reset slave;
start slave;
show slave status\G;
-------------------------------------------------------------------------
八、测试主从复制(或者两个yes已经可以了)
# 主服务上执行(192.168.221.30)
mysql -uroot -proot123
# 创建test库,t1表,添加测试数据
create database test1;
use test1;
create table t1(id int,name varchar(30));
insert into t1(id,name) values(1,"aaa");
# 从服务器上执行(192.168.221.40)
mysql -uroot -proot123
# 查看是否同步数据
show databases;
use test1;
show tables;
select * from t1;
-------------------------------------------------------------------------
九、设置远程登录(关闭防火墙沙盒)
# 服务端
# 本地登录MySQL
mysql -uroot -proot123
# 查询用户mysql> select host,user from mysql.user;
# 创建远程登录账号
mysql> create user 'root'@'%' identified with mysql_native_password by 'root123';
# 设置开放权限
mysql> grant all on *.* to 'root'@'%';
# 刷新使权限生效
mysql> flush privileges;
第二步,使用mycat 连接一主一从
mycat:192.168.221.22
安装MySQL
# mysql脚本一键安装
wget 192.168.57.200/Software/mysql_install.sh
# 一键安装
bash mysql_install.sh
# 重新加载
source /etc/profile
bash
# 设置远程登陆账号
# 服务端
# 本地登录MySQL
mysql -uroot -proot123
# 查询用户mysql> select host,user from mysql.user;
# 创建远程登录账号
mysql> create user 'root'@'%' identified with mysql_native_password by 'root123';
# 设置开放权限
mysql> grant all on *.* to 'root'@'%';
# 刷新使权限生效
mysql> flush privileges;
安装mycat2
# 安装JDK1.8
apt install openjdk-8-jdk-headless
# 测试安装,显示java版本是1.8.0则为安装成功
java -version
# 安装MyCAT2
# 创建/usr/local/src
mkdir -p /usr/local/src
# 进入/usr/local/src目录
cd /usr/local/src
# 局域网下载(192.168.57.200)
wget http://192.168.57.200/Software/mycat2-install-template-1.21.zip
wget http://192.168.57.200/Software/mycat2-1.21-release-jar-with-dependencies.jar
# 解压并移动到/usr/local目录下
# 下载解压软件
apt install unzip
# 解压Mycat2
unzip mycat2-install-template-1.21.zip
mv mycat ../
# 修改权限
cd /usr/local/mycat/
chmod +x bin/*
# 把所需的jar复制到mycat/lib目录,mycat2-1.21-release-jar-with-dependencies.jar是MyCAT2依赖文件,缺失会导致MyCAT启动失败
cp /usr/local/src/mycat2-1.21-release-jar-with-dependencies.jar /usr/local/mycat/lib/
# 启动mysql并登录root,验证底层 MySQL 服务是否正常可用,然后退出
service mysqld start
mysql -uroot -proot123
\q或者exit
# 配置物理库地址
vim /usr/local/mycat/conf/datasources/prototypeDs.datasource.json
全部改成以下
++++++++++++++++++++++++++++++++++++++++++++++++++++++"password": "root123", #一般只修改这个"user": "root",
++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 配置MyCAT和MySQL的环境变量
vim /etc/profile
在后面添加++++++++++++++++++++++++++++++++++++++++++++
export MYCAT_PATH=/usr/local/mycat
export MYSQL_PATH=/usr/local/mysql
export PATH="$MYSQL_PATH/bin:$MYCAT_PATH/bin:$PATH"
+++++++++++++++++++++++++++++++++++++++++++++++++++++
# ESC:wq退出文件:重新加载配置文件
source /etc/profile
# 启动mycat
cd /usr/local/mycat/bin
./mycat restart
# 查看logs/wrapper.log出现一串信息证明启动成功
cat /usr/local/mycat/logs/wrapper.log
# 连接MyCAT
MyCAT的默认用户是:root
初始密码是:123456
端口号是:8066
mysql -uroot -p123456 -P8066 -h127.0.0.1或者mycli -uroot -P8066
mycat的一主一从配置
# 先设置远程连接⭐⭐⭐
# 登录MySQL
mysql -uroot -proot123
# 创建远程登录账号
mysql> create user 'root'@'%' identified with mysql_native_password by 'root123';
# 设置开放权限
mysql> grant all on *.* to 'root'@'%';
# 刷新使权限生效
mysql> flush privileges;
# 重置配置
/*+ mycat:resetConfig{} */;
# 添加主库读写的数据源
/*+ mycat:createDataSource
{"dbType": "mysql","idleTimeout": 60000,"initSqls": [],"initSqlsGetConnection": true,"instanceType": "READ_WRITE","maxCon": 1000,"maxConnectTimeout": 3000,"maxRetryCount": 5,"minCon": 1,"name": "m1","password": "root123","type": "JDBC","url": "jdbc:mysql://192.168.221.30:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8","user": "root","weight": 0
}
*/;
# 添加从库读的数据源
/*+ mycat:createDataSource
{"dbType": "mysql","idleTimeout": 60000,"initSqls": [],"initSqlsGetConnection": true,"instanceType": "READ","maxCon": 1000,"maxConnectTimeout": 3000,"maxRetryCount": 5,"minCon": 1,"name": "m1s1","password": "root123","type": "JDBC","url": "jdbc:mysql://192.168.221.40:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8","user": "root","weight": 0
}
*/;
# 查询数据源(会出现三个row)
/*+ mycat:showDataSources{} */\G;
# 创建集群
/*! mycat:createCluster{"clusterType":"MASTER_SLAVE","heartbeat":{"heartbeatTimeout":1000,"maxRetry":3,"minSwitchTimeInterval":300,"slaveThreshold":0},"masters":["m1"],"maxCon":2000,"name":"prototype","readBalanceType":"BALANCE_ALL","replicas":["m1s1"],"switchType":"SWITCH"
} */;
# 查询集群(出现两个row)
/*! mycat:showClusters{} */\G;
## 创建逻辑库
CREATE DATABASE db1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
## 退出mycat
exit;
## 在conf/schemas/db1.schema.json里修改逻辑库的数据源
vim /usr/local/mycat/conf/schemas/db1.schema.json
## 在里面添加集群的名称,作用是让该集群生成并管理这个库的物理库
"targetName":"prototype",
# 重启mycat
cd /usr/local/mycat/bin
./mycat restart
mysql -uroot -p123456 -P8066 -h127.0.0.1
# 查看数据库
show databases;
use db1;
create table sys_user(id bigint primary key, username varchar(200) not null, address varchar(500));
insert into sys_user(id,username,address) values(1,"xiaoming","wuhan");
# 主库、从库重复查看库和表的操作,同步就说明步骤正确
第三步,配置nginx和Tomcat(步骤省略了)
Nginx(192.168.221.129),浏览器搜索192.168.221.129是默认的欢迎界面,搜索192.168.221.129:8080是默认的数据库登录界面;
Tomcat(192.168.221.20和192.168.221.21),浏览器搜索是数据库登陆界面即可
(1)如果显示的是默认的丑猫页面,说明war包忘了挪进去
(2)如果显示的是It works的war包内容界面,说明自动解析的ROOT包有问题,把他删掉然后等待重新加载出来
cd /var/lib/tomcat9/webapps
rm -rf ROOT
ls
第四步,Nginx和两台Tomcat连接
#前提条件:如果Tomcat显示丑猫首页或者It works的首页,需要把/var/lib/tomcat9/webapps目录下的ROOT目录删掉,等待war包重新生成ROOT后再刷新,就会出现数据库界面了
cd /var/lib/tomcat9/webapps
rm -rf ROOT
ls
#192.168.221.129和192.168.221.20、192.168.221.21连接
#34行,在http模块添加upstream tomcat_servers {server 192.168.221.20:8080; #第一台Tomcat的IP地址server 192.168.221.21:8080; #第二台Tomcat的IP地址}
#47行,在location模块添加proxy_pass http://tomcat_servers;# 保留原始Host头proxy_set_header Host $host;# 传递真实客户端IPproxy_set_header X-Real-IP $remote_addr;# 传递经过代理链的客户端IP列表proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 传递请求协议(http/https)proxy_set_header X-Forwarded-Proto $scheme;
#检测语法并重启Nginx
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
#浏览器搜索192.168.221.129显示数据库界面就说明连接上Tomcat了