Tomcat1

Tomcat

每个程序的后缀名

.net    asp  
php     php
java    jsp

1.JVM介绍

JVM是Java Virtual Machine(Java虚拟机)的缩写

Java虚拟机本质是就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。

c语言就是需要多次编译,不同的系统需要编译不同的环境

jre:java的运行环境

jdk:java的开发工具 包含jre

2.Tomcat介绍

什么是Tomcat

Tomcat和我们此前学习的 Nginx 类似,也是一个Web服务器。

Tomcat与Nginx有什么区别?

Nginx仅支持静态资源,而Tomcat则支持Java开发的 jsp 动态资源和静态资源。
Nginx适合做前端负载均衡,而Tomcat适合做后端应用服务处理。
通常情况下,企业会使用 Nginx+tomcat 结合使用,由Nginx处理静态资源,Tomcat处理动态资源。

3.Tomcat快速安装

方法1:直接下载,不用编译

rpm -ivh jdk-8u102-linux-x64.rpm
mkdir /app
tar xf apache-tomcat-8.0.27.tar.gz -C /app
/app/apache-tomcat-8.0.27/bin/startup.sh 

方法2:需要自己手动配置

mkdir /app/
tar xf jdk-8u60-linux-x64.tar.gz -C /app/
ln -s /app/jdk1.8.0_60 /app/jdk
sed -i.ori '$a export JAVA_HOME=/app/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
source /etc/profile
tar xf apache-tomcat-8.0.27.tar.gz -C /app
/app/apache-tomcat-8.0.27/bin/startup.sh 

开启与关闭

[root@tomcat01 /app/apache-tomcat-8.0.27/bin]
./startup.sh   开启tomcat
./shutdown.sh  关闭tomcat

4.Tomcat启动慢解决方案

没优化之前启动时间
[root@tomcat01 /app/apache-tomcat-8.0.27/logs]# grep 'Server startup' catalina.out
03-Aug-2019 03:15:18.225 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 591050 ms

优化之后启动时间
[root@tomcat logs]# grep 'Server startup' catalina.out
03-Aug-2019 03:15:18.225 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 591050 ms
03-Aug-2019 03:22:14.112 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1326 ms

优化方法:
vi /usr/java/jdk1.8.0_102/jre/lib/security/java.security
securerandom.source=file:/dev/urandom
就是把random随机数改成不随机 在前面加上u

5.tomcat目录结构介绍

[root@tomcat apache-tomcat-8.0.27]# ll
total 92
drwxr-xr-x 2 root root  4096 Aug  3 03:05 bin  #主要包含启动、关闭tomcat脚本和脚本依赖文件
drwxr-xr-x 3 root root   198 Aug  3 03:05 conf #tomcat配置文件目录
drwxr-xr-x 2 root root  4096 Aug  3 03:05 lib  #tomcat运行需要加载的jar包
-rw-r--r-- 1 root root 57011 Sep 28  2015 LICENSE #license文件,不重要
drwxr-xr-x 2 root root   197 Aug  3 03:15 logs  #在运行过程中产生的日志文件
-rw-r--r-- 1 root root  1444 Sep 28  2015 NOTICE #不重要
-rw-r--r-- 1 root root  6741 Sep 28  2015 RELEASE-NOTES #版本特性,不重要
-rw-r--r-- 1 root root 16204 Sep 28  2015 RUNNING.txt   #帮助文件,不重要
drwxr-xr-x 2 root root    30 Aug  3 03:05 temp    #存放临时文件
drwxr-xr-x 7 root root    81 Sep 28  2015 webapps #站点目录
drwxr-xr-x 3 root root    22 Aug  3 03:05 work    #tomcat运行时产生的缓存文件

6.tomcat配置文件

核心配置文件:
/app/apache-tomcat-8.0.27/conf/server.xml

所有的tomcat程序都有catelina引擎处理

一个tomcat实例一个server

一个server中包含多个Connector(连接器),Connector的主要功能是接受、响应用户请求。

service的作用是:将connector关联至engine(catalina引擎)

一个host就是一个站点,类似于nginx的多站点

context类似于nginx中location的概念

7.Tomcat部署zrlog

两种方法:

1.war包,放到tomcat webapp的目录下

2.jar包,用的时候java -jar

[root@tomcat01 /app/apache-tomcat-8.0.27/webapps]# rm -rf ROOT/
先删掉网站首页

[root@tomcat01 /app/apache-tomcat-8.0.27/webapps]# wget war包
他会自动解压出ROOT

[root@tomcat01 /etc/yum.repos.d]# yum install mariadb-server -y
安装数据库
[root@tomcat01 /etc/yum.repos.d]# systemctl start mariadb.service
[root@tomcat01 /etc/yum.repos.d]# systemctl enable  mariadb.service


MariaDB [(none)]> create database zrlog;  创库
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on zrlog.*  to zrlog@'localhost' 授权identified by '123456';

8.使用nginx反向代理访问tomcat

[root@tomcat01 ~]# yum install nginx -y

[root@tomcat01 /app/apache-tomcat-8.0.27/logs]# cat /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream  test {
     server 127.0.0.1:8080;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
	    proxy_pass http://test;
        proxy_set_header Host $host;
        }
    }
}

[root@tomcat01 ~]# systemctl start nginx
[root@tomcat01 ~]# systemctl enable nginx

这样访问就不需要带8080端口了

9.配置tomcat basic认证

改子配置文件
[root@tomcat01 /app/apache-tomcat-8.0.27/conf]# vim tomcat-users.xml  最后面加上你新创建的规则 角色 密码等
<role rolename="manager-gui"/>
<role rolename="test100"/>
<user username="tomcat" password="123456" roles="manager-gui,test100"/>
改完要重启

[root@tomcat01 /app/apache-tomcat-8.0.27/webapps/ROOT/WEB-INF]# vim web.xml 在底下加上这一段 不要出模块
<security-constraint>
		<web-resource-collection>
			<web-resource-name>test</web-resource-name>
			<url-pattern>/*</url-pattern>
		</web-resource-collection>
		
		<auth-constraint>
			<role-name>test100</role-name> 角色 配置文件里也配置了
		</auth-constraint>
	</security-constraint> 
	<login-config>
		<auth-method>BASIC</auth-method>
		<realm-name>Default</realm-name>
	</login-config>

10.tomcat单机变集群

1.剥离数据库

2.剥离nginx

1.剥离数据库
[root@db01 ~]#  yum install mariadb-server mariadb -y
独立机器下载数据库

[root@tomcat01 ~]# /app/apache-tomcat-8.0.27/bin/shutdown.sh
先关闭tomcat

[root@tomcat01 ~]# mysqldump -uroot -B zrlog >zrlog.sql
[root@tomcat01 ~]# scp -rp zrlog.sql 10.0.0.51:/root
打包数据库推送到51

[root@db01 ~]# mysql < zrlog.sql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| zrlog              |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [zrlog]> use zrlog;
Database changed
MariaDB [zrlog]> show tables;
+-----------------+
| Tables_in_zrlog |
+-----------------+
| comment         |
| link            |
| log             |
| lognav          |
| plugin          |
| tag             |
| type            |
| user            |
| website         |
+-----------------+
9 rows in set (0.00 sec)
导入数据库并检查

[root@tomcat01 /app/apache-tomcat-8.0.27/webapps/ROOT/WEB-INF]# vim db.properties
把里面的数据库ip地址改为10.0.0.51

[root@db01 ~]# mysql
MariaDB [(none)]> grant all on zrlog.* to zrlog@'10.0.0.%' identified by '123456';
给数据库登录用户授权 不然无法登陆

[root@tomcat01 /app/apache-tomcat-8.0.27/bin]# ./startup.sh 重启tomcat
重启需要先关闭再打开
2.剥离nginx
[root@tomcat01]# systemctl stop nginx.service   停nginx

[root@lb01 ~]# yum install nginx -y  
在单独nginx主机上下载nginx 记得要官网下载 需要配置文件

[root@lb01 /etc/nginx]# cat proxy_params 
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
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 /etc/nginx/conf.d]# vim proxy.conf 
upstream web_pools {
   server 10.0.0.77:8080;
}

server {
  listen 80;
  server_name zrlog.oldboy.com;
  location / {
     proxy_pass http://web_pools;
     include proxy_params;
  }
}
配置代理

[root@lb01 /etc/nginx/conf.d]# systemctl restart nginx
重启nginx

11.部署tomcat集群

1.克隆一台tomcat01
2.下载tomcat jdk

3.拉取tomcat01的文件
[root@tomcat02 /app/apache-tomcat-8.0.27/webapps]# mv * /srv/
[root@tomcat02 /app/apache-tomcat-8.0.27/webapps]# ll
total 0
[root@tomcat02 /app/apache-tomcat-8.0.27/webapps]# rsync -avz root@10.0.0.77:`pwd`/ROOT .

4.重启tomcat02
[root@tomcat02 /app/apache-tomcat-8.0.27/webapps]# /app/apache-tomcat-8.0.27/bin/startup.sh

5.配置负载均衡
[root@lb01 /etc/nginx/conf.d]# cat proxy.conf 
upstream web_pools {
   server 10.0.0.77:8080;
   server 10.0.0.78:8080;
}

server {
  listen 80;
  server_name zrlog.oldboy.com;
  location / {
     proxy_pass http://web_pools;
     include proxy_params;
  }
}
[root@lb01 /etc/nginx/conf.d]# systemctl restart nginx

必须重启两台tomcat!!!

6.域名解析
10.0.0.5 zrlog.oldboy.com

12.Nginx+Tomcat集群实现全栈Https

证书配在nginx上

[root@lb01 /opt]# wget http://192.168.13.120/191118/blog.oldqiang.com.zip
root@lb01 /opt]# unzip blog.oldqiang.com.zip 

[root@lb01 /opt]# ls Nginx/
1_blog.oldqiang.com_bundle.crt 证书
2_blog.oldqiang.com.key  公钥

[root@lb01 /etc/nginx/conf.d]# cat proxy.conf 配置文件
upstream web_pools {
   server 10.0.0.77:8080;
   server 10.0.0.78:8080;
}

server {
  listen 80;
  server_name blog.oldqiang.com;
  location / {
  return    302 https://blog.oldqiang.com$request_uri;

    }
}

server {
        listen 443;
        server_name blog.oldqiang.com;
        ssl on;
        ssl_certificate /opt/Nginx/1_blog.oldqiang.com_bundle.crt;证书路径
        ssl_certificate_key /opt/Nginx/2_blog.oldqiang.com.key;公钥路径
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        location / {
        proxy_pass http://web_pools;
        include proxy_params;
  }
}

[root@lb01 /etc/nginx/conf.d]# systemctl restart nginx
重启nginx

域名解析!!
10.0.0.5 blog.oldqiang.com  域名解析的时候开头不能有空格!

访问网址输入http不会跳转,输入https才会跳转?
解决方法:在hosts文件里解析一下
[root@lb01 /etc/nginx/conf.d]# cat /etc/hosts
10.0.0.5 blog.oldqiang.com

13.tomcat+nginx实现动静读写分离

1.用一个tomcat访问网站并上传图片
找到上传图片所在的路径

2.在负载均衡上创建目录相同的路径
[root@lb01 ~]# mkdir /data
[root@lb01 ~]# cd /data/
[root@lb01 /data]# mkdir attached/image/20191118 -p
[root@lb01 /data]# cd attached/image/20191118/
[root@lb01 /data/attached/image/20191118]# scp -rp 10.0.0.77:/app/apache-tomcat-8.0.27/webapps/ROOT/attached/image/20191118/* . 拉取tomcat上的所有图片到当前目录


[root@lb01 /data/attached/image/20191118]# cat /etc/nginx/conf.d/proxy.conf 
upstream web_pools {
   server 10.0.0.77:8080;
#   server 10.0.0.78:8080;
}

server {
  listen 80;
  server_name blog.oldqiang.com;
  location / {
  return    302 https://blog.oldqiang.com$request_uri;

    }
}

server {
        listen 443;
        server_name blog.oldqiang.com;
        ssl on;
        ssl_certificate /opt/Nginx/1_blog.oldqiang.com_bundle.crt;
        ssl_certificate_key /opt/Nginx/2_blog.oldqiang.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        location / {
        proxy_pass http://web_pools;
        include proxy_params;
     }
     location ~.*\.(png|jpg) {
       root  /data;
     }
}
测试把tomcat1的图移走 图裂 重启负载均衡nginx 图又出来了
把注释取消 也可以看到图
[root@lb01 /etc/nginx/conf.d]# cat /etc/nginx/conf.d/proxy.conf
upstream backend1 {
   server 10.0.0.77:8080;
}

upstream backend2 {
   server 10.0.0.77:8080;
   server 10.0.0.78:8080;
}

server {
  listen 80;
  server_name blog.oldqiang.com;
  location / {
  return    302 https://blog.oldqiang.com$request_uri;

    }
}

server {
        listen 443;
        server_name blog.oldqiang.com;
        ssl on;
        ssl_certificate /opt/Nginx/1_blog.oldqiang.com_bundle.crt;
        ssl_certificate_key /opt/Nginx/2_blog.oldqiang.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        location / {
        if ($request_method = POST ) {
        proxy_pass http://backend1;
  }        
        proxy_pass http://backend2; 
include proxy_params;
     }
     location ~.*\.(png|jpg) {
       root  /data;
     }
}
通过判断 实现读写分离

再次上传图片 图裂了

其实图已经上传上去了,只不过不能预览,图片在77上,78上连目录都没有,说明判断实现了读写分离

上传之后还是裂图,因为没有实时同步,记得把图片拉取过去

[root@lb01 /data/attached/image/20191118]# scp -rp 10.0.0.77:/app/apache-tomcat-8.0.27/webapps/ROOT/attached/image/20191118/* .

图片刷出来了,读写分离成功

posted @ 2019-11-18 20:53  干瘪的柠檬  阅读(282)  评论(0)    收藏  举报