Linux——Tomcat简介使用


Tomcat简介使用


官网:tomcat.apache.org
Tomcat软件的部署

	作用:
		1、实现网站服务器
		2、解析Java语言的web应用程序
		
	软件介绍:
		Tomcat		属于Apache 开源			http://tomcat.apache.org/
			通用二进制
			源码编译
		Resin 
		JBoss
		
		WebSphere
		WebLogical 	商业工具

在这里插入图片描述

是由Java语言编写的(通用二进制);
tomcat 是由Java语言写的,必须安装jdk;
tomcat可以响应静态页面,同时也能响应动态页面;
当访问量大的时候,部署一组httpd,再部署一组tomcat;
前端nginx做反向代理
客户端放问我的服务器,由nginx接受客户端的请求,如果访问的是静态页面,代理到httpd;如果访问的是动态页面(Java写的),代理到tomcat;

tomcat支持多实例部署,什么是多实例,相当于一台服务器上安装了多个tomcat;

安装Tomcat

1、安装JDK
首先卸载系统自带的2个包:
rpm -qa|grep gcj
rpm -qa|grep jdk
卸载:
rpm -e --nodeps 软件名
[root@tomcat ~]# rpm -ivh jdk-8u121-linux-x64.rpm
默认安装位置为:

[root@node01 ~]# cd /usr/java/
[root@node01 java]# ls
default  jdk1.8.0_121  latest

jdk需要运行:必须要有一个环境变量
[root@tomcat jdk1.8.0_121]# tail -2 /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_121
export PATH=$PATH:$JAVA_HOME/bin

[root@tomcat jdk1.8.0_121]# source /etc/profile

[root@tomcat jdk1.8.0_121]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
[root@tomcat jdk1.8.0_121]#

2、安装tomcat

[root@tomcat ~]# tar zxf apache-tomcat-8.5.12.tar.gz -C /usr/local/
[root@tomcat ~]# ls /usr/local/
apache-tomcat-8.5.12 bin etc games include lib lib64 libexec sbin share src
[root@tomcat ~]#
[root@tomcat ~]# ln -s /usr/local/apache-tomcat-8.5.12 /usr/local/tomcat
tomcat想要运行也需要环境变量
[root@tomcat ~]# vim /etc/profile

export CATALINA_HOME=/usr/local/tomcat

[root@tomcat ~]# source /etc/profile

tomcat目录介绍

/usr/local/tomcat/bin			工具(二进制程序)
/usr/local/tomcat/conf			配置文件    server.xml 
/usr/local/tomcat/logs
/usr/local/tomcat/webapps		默认的应用程序目录

启动tomcat

[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh

Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_121
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

[root@tomcat ~]# ss -antp | grep java

LISTEN     0      100         :::8009                    :::*                   users:(("java",pid=2627,fd=47))
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=2627,fd=46))

其中8080是对外提供网站服务的端口;
http://192.168.122.101:8080/
我们看到的页面就是:/usr/local/tomcat/webapps/ROOT/
index.jsp 这个页面

设置开机自启:
vi /etc/rc.d/rc.local

增加熵池大小,解决Tomcat在CentOS 7巨慢的问题=================================
首先服务服务
[root@tomcat ~]# cp /usr/lib/systemd/system/rngd.service /etc/systemd/system

编辑服务:
[root@tomcat ~]# vim /etc/systemd/system/rngd.service

[Service]
ExecStart=/sbin/rngd -f -r /dev/urandom

[root@tomcat ~]# systemctl daemon-reload 重新加载服务
[root@tomcat ~]# systemctl restart rngd 重启服务
[root@tomcat ~]# cat /proc/sys/kernel/random/entropy_avail 查看内核参数
2979

===============================================================================================================

部署ejforum论坛(Java)

1、安装MariaDB数据库,并建立ejforum需要的数据库,及授权用户

[root@tomcat ~]# yum install -y mariadb-server

[root@tomcat ~]# systemctl start mariadb
[root@tomcat ~]# systemctl enable mariadb

MariaDB [(none)]> CREATE DATABASE ejforum;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT all ON ejforum.* TO "ejforumuser"@"localhost" IDENTIFIED BY "redhat";
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

2、安装MySQL连接器

[root@localhost tomcat]# tar zxf mysql-connector-java-5.1.6.tar.gz
[root@localhost tomcat]# cd mysql-connector-java-5.1.6
[root@localhost mysql-connector-java-5.1.6]# ls
build.xml CHANGES COPYING docs EXCEPTIONS-CONNECTOR-J mysql-connector-java-5.1.6-bin.jar README README.txt src
[root@localhost mysql-connector-java-5.1.6]# cp mysql-connector-java-5.1.6-bin.jar /usr/local/tomcat/lib/
[root@localhost mysql-connector-java-5.1.6]#

3、解压缩ejforum软件,并拷贝文件到网站目录

[root@localhost tomcat]# rm -rf /usr/local/tomcat/webapps/ROOT/*
[root@localhost tomcat]# unzip ejforum-2.3.zip
[root@localhost tomcat]# cd ejforum-2.3
[root@localhost ejforum-2.3]# cd ejforum/
[root@localhost ejforum]# cp -r * /usr/local/tomcat/webapps/ROOT/

4、编辑WEB-INF文件,指定连接MySQL数据库用户名

[root@localhost ~]# vim /usr/local/tomcat/webapps/ROOT/WEB-INF/conf/config.xml

[root@tomcat conf]# pwd
/usr/local/tomcat/webapps/ROOT/WEB-INF/conf

[root@tomcat conf]# vim config.xml

    <database maxActive="10" maxIdle="10" minIdle="2" maxWait="10000" 
                      username="ejforumuser" password="redhat" 
                      driverClassName="com.mysql.jdbc.Driver" 
                      url="jdbc:mysql://localhost:3306/ejforum?characterEncoding=gbk&amp;
                      autoReconnect=true&amp;
                      autoReconnectForPools=true&amp;
                      zeroDateTimeBehavior=convertToNull"
                      sqlAdapter="sql.MysqlAdapter"/>

5、重启tomcat服务

[root@tomcat ~]# /usr/local/tomcat/bin/shutdown.sh

[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh

Tomcat核心配置文件: /usr/local/tomcat/conf/server.xml

<Server>					-----------> Tomcat实例 (一个server就是一个tomcat实例)
  <Service>					-----------> 定义网站服务
	<Connector />			-----------> 定义对外提供服务的端口
	<Engine>				-----------> Tomcat虚拟主机运行的环境,客户端访问我的时候拿那个虚拟主机来相应它;
													有一个叫defaultHost代表:将来客户端用ip访问我的时候,用这个主机来响应;
		<Host>				-----------> Tomcat虚拟主机
			<Context  />	-----------> 某应用程序的数据文件存放目录 
		</Host>
	</Engine>
  </Service>
</Server>

如果要配置多实例,需要配置单独的配置文件;
其中:Context社么时候有,什么时候无;
在这里插入图片描述
存放的是虚拟主机的页面,当存放页面的的目录名称叫ROOT的时候不需要指定;如果存放页面的目录名称不是ROOT则需要指定;
Host的定义:

name:代表虚拟主机的主机名;
appBase:指定这台虚拟主机的应用程序目录;这个目录是个相对路径,是按照tomcat的安装目录来说的;
这个目录不是放网页的地方,如果想要放网页目录,首先在这个目录下,创建一个目录,如果这个子目录名为ROOT,这个虚拟主机搭建出来
就能访问,如果不是ROOT,那么在context中指定这个目录名叫啥;如果在context中什么都不写,默认为ROOT;
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

Tomcat虚拟主机;在engin中写多个host就可以了;

配置虚拟主机:
www.a.org 应用程序目录:/webdata ROOT目录,页面
www.b.org 应用程序目录:/webdata b.org目录,页面

www.a.org

  <Host name="www.a.org"  appBase="/webdata"
        unpackWARs="true" autoDeploy="true">
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"代表:存放日志的目录,
    相对于安装目录
           prefix="www.a.org." suffix=".txt"
           用来指定日志文件名,以及以什么结尾;
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
           代表日志格式
  </Host>

www.b.org

  <Host name="www.b.org"  appBase="/webdata"
        unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="b.org" />
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="www.b.org." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  </Host>

配置Tomcat使用默认的80端口提供服务

<Connector port="80" protocol="HTTP/1.1"

配置默认虚拟主机

<Engine name="Catalina" defaultHost="www.a.org">

Tomcat多实例部署

作用:
1、多个实例运行相同的应用,实现负载均衡
2、多个实例运行不同的应用

配置过程:

配置两个Tomcat实例,分别运行/webapps/ROOT下的网站

实例1:
	目录:/usr/local/tomcat/multi-instance/instace1		8081   8091 
	
实例2:
	目录:/usr/local/tomcat/multi-instance/instace2		8082   8092 

1、安装Tomcat

1)安装JDK

2)安装Tomcat

2、 创建多实例目录

[root@localhost tomcat]# mkdir -pv /usr/local/tomcat/multi-instance/instance{1,2}/{conf,logs}
[root@localhost tomcat]# cd /usr/local/tomcat/multi-instance/
[root@localhost multi-instance]# ls
instance1 instance2

将Tomcat安装目录下的conf目录所有配置文件拷贝到对应实例目录

[root@localhost ~]# cd /usr/local/tomcat/conf/
[root@localhost conf]# cp /usr/local/tomcat/conf/* /usr/local/tomcat/multi-instance/instance1/conf/
[root@localhost conf]# cp /usr/local/tomcat/conf/* /usr/local/tomcat/multi-instance/instance2/conf/

3、配置每个实例所占用的端口

[root@localhost conf]# vim /usr/local/tomcat/multi-instance/instance1/conf/server.xml
实例端口

对外提供服务的端口

[root@localhost conf]# vim /usr/local/tomcat/multi-instance/instance2/conf/server.xml

4、分别在对应实例目录下编写启动脚本

[root@localhost ~]# vim /usr/local/tomcat/multi-instance/instance1/ins1.sh

#!/bin/bash
#instace1 script


export JAVA_OPTS='-Xms64m -Xmx128m'
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_BASE=/usr/local/tomcat/multi-instance/instance1


case $1 in
start)
  $CATALINA_HOME/bin/startup.sh
  ;;
stop)
  $CATALINA_HOME/bin/shutdown.sh
  ;;
restart)
  $CATALINA_HOME/bin/shutdown.sh
  sleep 3
  $CATALINA_HOME/bin/startup.sh
  ;;
esac


[root@localhost ~]# vim /usr/local/tomcat/multi-instance/instance2/ins2.sh 

#!/bin/bash
#instace2 script

. /etc/init.d/functions

export JAVA_OPTS='-Xms64m -Xmx128m'   代表启动tomcat最小分配多少内存,最大分配多少内存
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_BASE=/usr/local/tomcat/multi-instance/instance2


case $1 in
start)
  $CATALINA_HOME/bin/startup.sh
  ;;
stop)
  $CATALINA_HOME/bin/shutdown.sh
  ;;
restart)
  $CATALINA_HOME/bin/shutdown.sh
  sleep 5
  $CATALINA_HOME/bin/startup.sh
  ;;
esac

5、分别启动两个实例

[root@localhost instance2]# /usr/local/tomcat/multi-instance/instance1/ins1.sh start
[root@localhost instance2]# /usr/local/tomcat/multi-instance/instance2/ins2.sh start
[root@localhost conf]# netstat -antp | grep java
tcp 0 0 :::8081 ::😗 LISTEN 3151/java
tcp 0 0 :::8082 ::😗 LISTEN 3235/java
tcp 0 0 ::ffff:127.0.0.1:8091 ::😗 LISTEN 3151/java
tcp 0 0 :::8009 ::😗 LISTEN 3151/java

6、创建网站目录,并测试

[root@localhost instance2]# mkdir -pv /webapps/ROOT

通过http://192.168.122.101:8081/,http://192.168.122.101:8082/访问可看到相同的内容,表明成功.

Nginx+Tomcat多实例实现负载均衡

方案1: 客户端所有请求全部代理到后端Tomcat服务器

upstream tomcatsrv {
server 192.168.122.101:8081 weight=1 max_fails=2 fail_timeout=2;
server 192.168.122.101:8082 weight=1 max_fails=2 fail_timeout=2;
}

location / {
proxy_pass http://tomcatsrv;
proxy_set_header x-real-ip $remote_addr;
}

方案2:客户端对jsp页面访问请求代理到后端Tomcat服务器

upstream tomcatsrv{
server 192.168.122.101:8081 weight=1 max_fails=2 fail_timeout=2;
server 192.168.122.101:8082 weight=1 max_fails=2 fail_timeout=2;
}

server {
....
location / {
root html;
index index.html;
}

location ~* \.jsp$ {
	proxy_pass http://tomcatsrv;
	proxy_set_header x-real-ip $remote_addr;
}

}

为保证后端Tomcat服务器可以记录客户端真实IP,需要修改Tomcat主配置文件中的日志格式:

[root@tomcat ROOT]# vim /usr/local/tomcat/multi-instance/instance1/conf/server.xml

posted @ 2020-12-18 09:58  知秋一叶9527  阅读(418)  评论(0编辑  收藏  举报