Tomcat构建高负载WEB服务器

一.前言
1.什么是JAVA虚拟机
所谓虚拟机,就是一台虚拟的计算机。他是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的VisualBox、VMware就属于系统虚拟机。他们完全是对物理计算机的仿真。提供了一个可以运行完整操作系统的软件平台。
程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都呗限制于虚拟机提供的资源中。
2.JAVA 如何做到跨平台
同一个JAVA程序(JAVA字节码的集合),通过JAVA虚拟机(JVM)运行于各大主流操作系统平台比如Windows、CentOS、Ubuntu等。程序以虚拟机为中介,来实现跨平台。
在这里插入图片描述二.Tomcat部署
1.名词解释

名词解释
	java容器、web容器,web中间件
	Tomcat,Resin,JBOSS,WebSphere(IBM),Weblogic(Oracle )
	Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
	Resin是CAUCHO公司的产品,是一个非常流行的支持servlets和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。它不仅可以显示动态内容,而且它显示静态内容的能力也非常强,速度直逼APACHESERVER。许多站点都是使用该WEB服务器构建的
	是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
	WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。WebS
	phere 提供了可靠、灵活和健壮的软件。
	WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

2.官网地址
tomcat下载地址 http://tomcat.apache.org/
JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html
3.架构
方案一: Tomcat
方案二:
Nginx
|
±----------------------------+
| | |
Tomcat1 Tomcat2 Tomcat3
建议使用Nginx和Tomcat配合,Nginx处理静态,Tomcat处理动态程序
4.部署
Tomcat Http Server 环境:6到8G内存
1)部署JAVA环境 建议卸载默认安装openjdk软件
解压安装包 tar xf jdk-8u151-linux-x64.tar.gz -C /usr/local
Java语言
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
JDK简介
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。
JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
包括JVM,JRE
JVM是Java Virtual Machine(Java虚拟机)的缩写,
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,
是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JRE为Java Runtime Environment运行环境的简称,Java Runtime Environment(包括Java Plug-in)是Sun的产品,包括两部分:Java Runtime Environment和Java Plug-in。JavaRuntimeEnvironment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。
图示
在这里插入图片描述JCreator
Jcreator是Xinox Software公司开发的一个用于Java程序设计的集成开发环境(IDE),具有编辑、调试、运行Java程序的功能。
图示
在这里插入图片描述Java SE EE ME
Java SE(Java Platform,Standard Edition),应该先说这个,因为这个是标准版本。
JavaSE 可以开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。是EE,和ME的基础。一般就是指JDK。就是Java的基础语法(变量、方法、类之间的调用、关系,继承、接口、线程之类的),工具包(java.util.* ),或者其他的一些封装,是学习其他的基础。
Java EE (Java Platform,Enterprise Edition),java 的企业版本
JavaEE,其实是一套规范,就是用java语言做企业开发(目前看来就是开发一些动态网站,或者对外提供调用服务的网站,或者其他没接触过的。。。)中的一整套规范,比如类怎么封装,网页的请求要用什么方法处理,语言编码一类的处理,拦截器啊什么的定义,请求返回得有什么信息。。。(具体看servlet的接口就知道了)
比如:tomcat就是按照这套规范开发的容器软件,还有什么weblogic,JBoss、Resin等等
正因为我们开发网站(使用JSP,Servelet。。或者封装了这些的框架:SSH。。。)可以放在tomcat,也可以放在JBoss。。。。,因为都是按照一个规范开发的东西,实际使用的还是JavaSE的那些东西,多出来的就是EE的一些规范类的封装代码。
Java ME(Java Platform,Micro Edition),java的微型版本。
JavaME 是微型版本,顾名思义,使用在手机啊,小设备啊上面的Java版本,特点就是小,相比JavaSE精简了很大一部分东西,(增加了一些小设备上的专有API,这个不是很确定)。
安卓中既然用的是Java,那么Java的语法应该都是适用的。所以SE是核心基础。其他的都是使用方法方式不同。
2)多版本部署java
ln -s /usr/local/jdk1.8.0_151/ /usr/local/java 软连接
3)配置环境变量

#vim /etc/profile
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
# source /etc/profile
# env |grep JAVA
JAVA_HOME=/usr/local/java

4)测试java

# java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

安装Tomcat:
tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/
ln -s /usr/local/apache-tomcat-7.0.42/ /usr/local/tomcat
定义Tomcat所需环境变量:

# vim /etc/profile	
	CATALINA_HOME=/usr/local/tomcat   //Tomcat安装目录
	export CATALINA_HOME
# source /etc/profile

启动Tomcat
bash /usr/local/tomcat/bin/startup.sh
检查端口
netstat -tnlp |grep java
关于tomcat端口:
8005是tomcat本身的端口
8080 tomcat负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。 
8009 tomcat负责和其他的HTTP服务器建立连接。如nginx和apache互通时使用
访问
http://192.168.152.128:8080/
注意服务器地址,注意端口
浏览器访问tomcat主页。注意关闭防火墙
关闭tomcat(切记,否则你会遇见500)
bash /usr/local/tomcat/bin/shutdown.sh

tomcat目录介绍

	tomcat主目录介绍
		[root@web ~]# ls /usr/local/tomcat/
[root@web tomcat]# tree -L 1
.
├── bin              #存放tomcat管理脚本
├── conf             # tomcat 配置文件存放目录
├── lib              # web应用调用的jar包存放路径
├── LICENSE
├── logs             # tomcat 日志存放目录,catalina.out 为主要输出日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp             # 存放临时文件
├── webapps         # web程序存放目录
└── work             # 存放编译产生的.java 与 .class文件
	webapps目录介绍
		# ls /usr/local/tomcat/webapps/
docs  examples  host-manager  manager  ROOT
		[root@web03 tomcat]# cd webapps/
[root@web03 webapps]# tree -L 1
.
├── docs            # tomcat 帮助文档
├── examples       # web应用示例
├── host-manager  # 主机管理
├── manager         # 管理
└── ROOT             # 默认站点根目录
	默认网站的主目录(主页)
		# ls /usr/local/tomcat/webapps/ROOT	
	Tomcat配置文件目录介绍(conf)
		[root@web03 conf]# tree -L 1
.
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── logs
├── server.xml           # tomcat 主配置文件
├── server.xml.bak
├── server.xml.bak2
├── tomcat-users.xml    # tomcat 管理用户配置文件
├── tomcat-users.xsd
└── web.xml
	Tomcat日志说明
		查看日志
			[root@web03 ~]# tailf /usr/local/tomcat/logs/catalina.out
24-Nov-2017 15:09:51.654 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
24-Nov-2017 15:09:51.665 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
24-Nov-2017 15:09:51.670 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 60037 ms
		发现启动时间较长,其中有一项的启动时间占据了绝大多数
			24-Nov-2017 15:09:50.629 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /application/apache-tomcat-8.0.27/webapps/memtest.war has finished in 58,892 ms
			 发现耗时在这里:是session引起的随机数问题导致的。Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥。为了提高安全性Tomcat在启动的时候会通过随机生成一个密钥。
解决Tomcat启动慢的方法
Tomcat启动慢主要原因是生成随机数的时候卡住了,导致tomcat启动不了。是否有足够的值来用于产生随机数,可以通过如下命令来查看
[root@web03 ~]# cat /proc/sys/kernel/random/entropy_avail
6
方法
vim $JAVA_HOME/jre/lib/security/java.security
securerandom.source=file:/dev/random改为securerandom.source=file:/dev/urandom
问题完美解决

安装MYSQL
创建数据库:创建jspgou数据库,字符集为utf-8

# yum install -y mariadb-server mariadb
该步骤出错。请您检查YUM源配置
# mv /etc/yum.repos.d/* /tmp/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# systemctl start mariadb
[root@localhost ~]# mysqladmin -u root password 123    
注意如果有密码  mysqladmin -u root -p老密码 password 新密码
[root@localhost ~]# mysql -u root -p123
MariaDB [(none)]> create database jspgou character set = utf8;

部署jspgou(电子商城)

解压源码包   
# unzip jspgouV6-ROOT.zip 
更改数据库链接: 提示:在解压缩后的文件中,修改连接数据库的信息
[root@localhost ~]# vim ROOT/WEB-INF/config/jdbc.properties 
	jdbc.url=jdbc:mysql://127.0.0.1:3306/jspgou?characterEncoding=UTF-8
	jdbc.username=root
	jdbc.password=123
导入数据:
[root@localhost ~]# mysql -u root -p123 -D jspgou  < DB/jspgou.sql
使用MYSQL数据库时,会发生的错误
使用mysql作为数据库时,如果导入数据失败
	1.修改mysql配置文件
		my.cnf中max_allowed_packet参数为64m,默认为1m
	2.DB/jspgou.sql里面的默认值改一下
		把所有datetime类型的字段默认值改成CURRENT_TIMESTAMP
将程序解压后的ROOT文件夹,拷贝到tomcat安装目录下的webapps文件夹下
[root@localhost ~]# \cp -r ROOT  /usr/local/tomcat/webapps/
不使用cp 的别名。  alias cp=‘cp -i’   转义
部署网站
启动tomcat
#bash  /usr/local/tomcat/bin/startup.sh   
输入地址访问
http://192.168.152.128:8080/jeeadmin/jspgou/index.do
注意服务器地址   用户名:admin   密  码:123456

启动脚本

1.创建启动脚本
# vim /etc/init.d/tomcat
#!/bin/bash
# Init file for Tomcat server daemon					
#																		
# chkconfig: 2345 96 14								    	
# description: Tomcat server daemon			    	
JAVA_OPTS='-Xms64m -Xmx128m'						
JAVA_HOME=/usr/java/jdk1.7.0_11/				    	
CATALINA_HOME=/usr/local/tomcat				    	
export JAVA_OPTS JAVA_HOME CATALINA_HOME  
exec $CATALINA_HOME/bin/catalina.sh $*			

2.修改权限
# chmod a+x /etc/init.d/tomcat 

3.添加到chkconfig管理
# chkconfig --add tomcat
# chkconfig tomcat --list
tomcat          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
# chkconfig tomcat on
# 
# service tomcat stop
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.7.0_11
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

# service tomcat start
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.7.0_11
Using CLASSPATH:      /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
问题:源码安装的nginx,如何制作nginx启动脚本,并设置开机启动。

三.Tomcat多实例
1.关闭主站
bash /usr/local/tomcat/bin/shutdown.sh
2.准备多实例主目录
mkdir /usr/local/tomcat/instance{1…3}
3.制作实例工作目录

制作实例工作目录
	# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance1/
	# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance2/
	# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance3/
	查看目录结构
		[root@www ~]# tree -d -L 2 /usr/local/tomcat/
			/usr/local/tomcat/
├── bin
├── instance1
│   ├── conf
│   ├── logs
│   ├── temp
│   └── work
├── instance2
│   ├── conf
│   ├── logs
│   ├── temp
│   └── work
├── instance3
│   ├── conf
│   ├── logs
│   ├── temp
│   └── work
└── lib

4.修改端口

修改端口
	将web配置文件拷贝三份。分别修改为不同端口
	# vim /usr/local/tomcat/instance1/conf/server.xml
		1.服务端口 8080 替换成 8081
			修改前
				 <!--   <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />        -->

			修改后
				<Connector port="8081" protocol="HTTP/1.1" 
               connectionTimeout="20000"
               redirectPort="8443" />
		2.
			<!-- <Server port="8005" shutdown="SHUTDOWN"> -->
			程序工作端口:8005替换成 8091
			<Server port="8091" shutdown="SHUTDOWN">
		3.
			appBase="webapps"
			网站目录:webapps 替换成 另一个目录
			appBase="/webapps"
	cp /usr/local/tomcat/instance1/conf/server.xml  /usr/local/tomcat/instance2/conf/
		1.
			<Connector port="8081" protocol="HTTP/1.1"  
			服务端口  替换成 8082
			<Connector port="8082" protocol="HTTP/1.1"  
		2.
			<Server port="8091" shutdown="SHUTDOWN">
			程序工作端口  替换成 8092
			<Server port="8092" shutdown="SHUTDOWN">
	cp /usr/local/tomcat/instance1/conf/server.xml  /usr/local/tomcat/instance3/conf/
		1.
			<Connector port="8081" protocol="HTTP/1.1"  
			替换成
			<Connector port="8083" protocol="HTTP/1.1"  
		2.
			<Server port="8091" shutdown="SHUTDOWN">
			替换成
			<Server port="8093" shutdown="SHUTDOWN">

5.启动脚本

启动脚本
	# vim /usr/local/tomcat/instance1/ins1.sh
		functions系统自带脚本。功能函数
		#!/bin/bash
#instance1
. /etc/init.d/functions
export CATALINA_BASE="/usr/local/tomcat/instance1"

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
export JAVA_OPTS='-Xms64m -Xmx128m'

	# cp /usr/local/tomcat/instance1/ins1.sh /usr/local/tomcat/instance2/ins2.sh
		#!/bin/bash
#instance2              #####
. /etc/init.d/functions
export CATALINA_BASE="/usr/local/tomcat/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

	# cp /usr/local/tomcat/instance1/ins1.sh /usr/local/tomcat/instance3/ins3.sh
		#!/bin/bash
#instance3
. /etc/init.d/functions
export CATALINA_BASE="/usr/local/tomcat/instance3"

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
export JAVA_OPTS='-Xms64m -Xmx128m'

6.赋权

	# chmod +x /usr/local/tomcat/instance1/ins1.sh 
	# chmod +x /usr/local/tomcat/instance2/ins2.sh 
	# chmod +x /usr/local/tomcat/instance3/ins3.sh 

7.网站源码
mkdir /webapps
cp -r /usr/local/tomcat/webapps/ROOT/ /webapps/
8.启动

	# /usr/local/tomcat/instance1/ins1.sh start
	# /usr/local/tomcat/instance2/ins2.sh start
	# /usr/local/tomcat/instance3/ins3.sh start
	等5秒

9.测试
netstat -antp | grep 8081
10.浏览
http://192.168.152.128:8081
http://192.168.152.128:8082
http://192.168.152.128:8083

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值