tomcat

程序=指令+数据

程序=算法+数据结构

编程方式:

以算法为中心,数据结构服务于算法:过程式编程

以数据为中心,代码服务于数据:对象式编程

对象:属性,方法

类别:实例化–对象,对象互操作

过程式编程:C ,bash , Python

对象式编程:Java , C++ ,kotlin,Ruby ,Pthon,…..

###################################################################3333

nginx反代动态到Tomcat

tomcat是纯Java代码实现的

tomcat每一个组件都是由”类“实现的,因为java是面向对象的语言

一个server相当于一个tomcat组件

tomcat要作为server运行是一个c/s架构

connector:连接器,专门用来监听套接字也就是端口号,用来接收用户请求

engine 引擎,engine只提供了容器环境,能运行jsp代码,不能接收用户的请求

用户发请求到connector,connector接收到用户的请求分析请求,然后发送给engine引擎,engine加载好要用的页面,在发送给connector,然后connector在发送给用户

connector连接器不能直接和engine引擎产生关联关系,

而且一个connector连接器只能属于一个engine引擎

而一个engine引擎可以拥有多个connector连接器

我们可以用一个办法将connector连接器和engine引擎建立起连接

一个service内可以有多个引擎,但是一个connector连接器只能属于一个engine引擎,同时一个engine引擎可以拥有多个connector连接器,于是一个service内的engine到底和哪个connector有关系,就是通过service定义的

所有的jsp代码只能放在engine引擎中

而一个engine引擎就代表了一个httpd服务实例,当然我们这儿是tomcat,我们只是一个类比,而一个httpd里面可以有多个虚拟主机,我们这儿的虚拟主机不是定义在service,而是定义在nginx,在nginx可以定义一到多个host,一个host代表一个虚拟主机。而一个host可以有多个context

context兼具能定义路径别名的作用,同时还肩负了为站点定义站点属性的功能

一个context是一个应用程序

################################################################333

要想所有tomcat要安装jdk

jdk有两种安装方法

Oracle jdk 安装方法

openjdk 安装方法

1.6

1.7

1.8

tomcat 安装

ASF:tomcat 安装方法

os :vendor:tomcat ,系统提供的rpm包

安装openjdk

查看java 的openjdk的支持版本

yum list all java*

安装jdk包支持开发

yum install java-1.8.0-openjdk-devel -y

查看版本

java -version

用yum 安装tomcat

yum install tomcat tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp -y

启动服务

systemctl start tomcat

浏览器测试

配置文件目录

/etc/tomcat/

查找类库文件

ls -ld /usr/share/tomcat/lib

####################################################################

安装Oracle jdk

安装下载的包

rpm -ivh jdk-8u144-linux-x64.rpm

oracle jdk的目录

ls /usr/java/jdk1.8.0_144/

声明变量

vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/latest/

export PATH=$JAVA_HOME/bin:$PATH

[root@zhouyafei ~]# exec bash

[root@zhouyafei ~]# echo $JAVA_HOME

/usr/java/latest/

查看版本

java -version

用tar安装tomcat

下载tomcat安装包

wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz

解压到 /usr/local

tar xf apache-tomcat-8.5.32.tar.gz -C /usr/local/

将8.5.3版本链接到tomcat,建议不要改名字,方便以后升级

ln -sv apache-tomcat-8.5.32 tomcat

ls /usr/local/tomcat/

创建用户

useradd tomcat

更改tomcat目录的属组

chown -R :tomcat /usr/local/tomcat/

在tomcat目录下temp和logs,work目录,必须用普通用户可读可写

chown -R tomcat logs/ temp/ work/

给conf目录属组加读执行权限

chmod g+rx /usr/local/tomcat/conf/

给conf目录下的所有属组文件读权限

chmod g+r /usr/local/tomcat/conf/*

su – tomcat 切换到tomcat用户

查看启动目录

cd /usr/local/tomcat/bin/

su – root 切换到root用户

声明变量

vim /etc/profile.d/tomcat.sh

export CATALINA_BASE=/usr/local/tomcat

export PATH=$CATALINA_BASE/bin:$PATH #导出PATH环境变量是$CATAINA_BASE/bin并补上PATH自身

执行脚本

su – tomcat 切换到tomcat用户

. /etc/profile.d/tomcat.sh

启动服务

catalina.sh start

查看端口

8009和8080

浏览器测试

注: catalina.sh 停止服务

/usr/local/tomcat/目录的结构

bin:脚本,启动时用到的类

conf:配置文件目录

lib:库文件,tomcat的类库

其中jiasper.jar:这个文件是将jsp文件转为servlet的Java代码

logs:日志文件路径

Catalina开头的日志是,tomcat自身的应用程序日志

其他名称,以数字结尾的日志是特定虚拟主机放的访问日志

temp :临时目录

用来创建保存临时文件

webapps:外部应用程序,也是网页文档的根目录

ROOT:别名,URL的根,用来存放应用程序文件的主站

dosc:文档,读这个目录可以知道tomcat怎么维护,用那些特性,如何去配置集群

examples: 示例,读这个目录可以知道jsp文件怎么写

host-manager :主机管理器或者叫虚拟主机管理器

manager:应用程序管理器

work:工作目录,用来存放编译好的文件

index:代表index.jsp文件

这个index.jsp会先被转为纯Java代码index_jsp.java

而java文件要被编译后惨运行叫类文件index_jsp.class

work/

└── Catalina

└── localhost 虚拟主机

├── docs

├── examples

├── host-manager

├── manager

└── ROOT

└── org

└── apache

└── jsp

├── index_jsp.class 类文件

└── index_jsp.java 源码文件

####################################################################333333

以 rpm包为实例

server.xml 定义自身server是这么运行的

应用程序的属性信息

web.xml: 定义应用程序该怎么部署

每个webapp只有部署后才能访问,存放的位置是WEB-INF,如果没有web.xml目录,可以 到全局webapps提供默认部署相关的配置

context.xml:定义了context背后的一些信息

我们可以通过开发人员,拿到一个应用程序

unzip javaee-bbs-1.3.zip

进入到解压的应用程序的WebRoot目录

cd javaee-1.3/bbs/WebRoot/

可以看见一个WEB-INF目录

ls WEB-INF/

在 WEB-INF/目录下有一个web.xml文件,它描述了当前应用程序该如何被类装在机所装载,就是说该如何部署,如果没有web.xml文件,我们可以去etc下ls /etc/tomcat/web.xml 默认的web.xml文件配置

tomcat-users.xml:用户认证的账号和密码文件;角色(role),用户(User);此文件在tomcat启动时被装入内存;

context.xml:每个webapp都可以使用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置;

catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略;

catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;

logging.properties:日志系统相关的配置;

tomcat.conf 或 /etc/sysconfig/tomcat: 定义tomcat相关java进程的资源配置等信息

tomcat配置文件

主配置文件vim /etc/tomcat/server.xml

Tomcat的核心组件:server.xml 定义自身server是这么运行的

<Server>

<Service>

<connector/>

<connector/>

<Engine>

<Host>

<Context/>

<Context/>

</Host>

<Host>

</Host>

</Engine>

</Service>

</Server>

每一个组件都由一个java“类”实现,这些组件大体可以分为以下几个类型

顶级组件:server:代表一个运行的tomcat实例;

服务类组件:service:

连接器组件:http,https,ajp(apache,jserv,protocol)

容器类组件:Engine,host,context

被嵌套类组件:valve过滤器,过滤条件。logger日志记录器,realm,loader类加载器,manager会话管理器

集群类组件:listener,cluster

jsp的webapp的组织结构

/根,web应用程序的根

ls /root/javaee-1.3/bbs/WebRoot/ web应用程序的根

主页:index.do java后缀名有两个.jsp和.do

classes:存放自己的类文件

WEB-INF/:当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和context.xml配置文件;

META-INF/:类似于WEB-INF/;

静态内容

ls /root/javaee-1.3/bbs/WebRoot/static/image/

在tomcat有.jsp和.do的动态内容,tomcat也直接提供静态,显然这不是tomcat擅长地方,因此我们应该在单个主机上组织出一个n ,t,t处理静态内容,n处理动态内容

将来我们要接手一个企业及站点应用程序会非常大,我们从被人手里面提供ssh传文件会非常慢,我们可以归档打包

webapp的归档格式

.war:如果我们从程序员拿到的.war文件,我们不用展开,直接放到对应的网页根目录下,会自动展开

.ear:企业及webapp

.jar:类库文件

.rar:资源适配器类打包文件

如果我们tomcat应用程序想让别人通过BS架构访问,我们应该把.war文件放在某一个虚拟主机

**********************************************************************************************88

部署:就相当于把一个应用程序放在可运行的环境中运行起来

tomcat部署的操作

deploy:部署,把一个应用程序及应用程序所依赖到的类文件,根据web.xml和context.xml文件中的定义class加载至,有类加载器loader加载至JVM之上

部署的方式有两种

自动部署:auto deploy 默认自动部署,只要放到网页的根目录下面就能访问到

手动部署:手动部署分为两种

冷部署:把tomcat停止,在部署

热部署:在不停止tomcat的前提下部署

热部署工具:manager ant脚本,tcp(tomcat client deployer)等

undeploy:拆除,反部署。反部署之后的应用程序只能重新部署才能访问

start:启动

stop:停止

redeploy:重新部署

************************************************************************************************************88

我们手动的通过一测试类应用,并冷部署

创建一个目录路径,里面放一个测试页面

mkdir test/{classes,lib,WEB-INF,META-INF} -pv

自己写一个网站,测试应用程序

vi test/index.jsp

<%@ page language="java" %> #编程语言是java

<%@ page import="java.util.*" %> #导入java的某一个类库 ,前面两行是页面资源代码格式的信息

<html>

<head>

<title>Test Page</title>

</head>

<body>

<% out.println("hello world");

%>

</body>

</html>

热部署

直接将创建test目录放到网站目录下

cp -r test/ /usr/share/tomcat/webapps/

默认启动

**********************************************************************************************************8

在工作中当开发写完代码,都放在Gitilab ,gogs 私有的库中,我们可以拷贝下来要用的代码

例如:在http://gitlab.ilinux.io下面有一个test.git的项目,我们可以在这下面拷贝

git clone https://glthub.com/test.git

**********************************************************************************************************************

在真实的场景中,我们拷贝的代码是有版本的 例:text-1.1

我们将 text-1.1的代码拷贝到webapp应用程序目录

cp -r test-1.1/ /usr/share/tomcat/webapps/

在应用程序中是不需要版本号的,我们可以创建一个链接,链接到test

cd /usr/share/tomcat/webapps/ 切换到webapps应用程序目录

ln -sv test-1.1 test 创建软链接

如果要随机版本

我们将新的版本拷贝到webapps目录

cp -r test-1.2/ /usr/share/tomcat/webapps/

删除软链接

rm -rf test

创建软链接到新版本

ln -sv test-1.2 test

#########################################################################

tomcat的两个管理应用:

manager:管理应用,可以部署,反部署,停止,启动。图形界面

host-manager:管理虚拟主机

请注意,对于Tomcat 7以上,使用管理器应用程序所需的角色已从单个管理器角色更改为以下四个角色。您需要分配您希望访问的功能所需的角色。

l manager-gui – 允许访问HTML GUI和状态页面

l manager-script – 允许访问文本界面和状态页面

l manager-jmx – 允许访问JMX代理和状态页面

l manager-status – 仅允许访问状态页面

manager要被认证才能访问

在 vim /etc/tomcat/tomcat-users.xml 文件下创建

<tomcat-users>

<role rolename="manager-gui"/> #启用manager-gui角色

<user username="admin" password="admin" roles="manager-gui"/> #用户名是admin,密码admin,所属角色manager-gui

启动服务

systemctl restart tomcat

浏览器访问

我们可以单独对某一个应用程序,进行启动,停止,重载,重新部署

也是一个非常好的热部署工具

创建一个webapps目录

mkdir /data/webapps/ -pv

拷贝一个应用程序文件到webapps目录

cp -r test-1.1/ /data/webapps/test-1.2

在web界面进行热部署

*******************************************************************************

配置tomcat的组件

server:一个server代表一个tomcat实例

vim /etc/tomcat/server.xml

<Server port="8005" shutdown="SHUTDOWN">

port监听的是端口8005,没有指定ip默认是127.0.0.1

shutdown则表示通过这个8005端口连进来,可以直接关闭tomcat

[root@contes7 ~]# telnet 127.0.0.1 8005

Trying 127.0.0.1…

Connected to 127.0.0.1.

Escape character is '^]'.

SHUTDOWN

Connection closed by foreign host.

vim /etc/tomcat/server.xml

全局名称资源,去×××用户名,去×××密码认证信息的

<GlobalNamingResources>

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

注:Connector:定义连接器,例如:http的连接器

connectionTimeout="20000"

注:连接超时时间,单位是毫秒

redirectPort="8443" />

注:如果要做ssl重定向,用户访问的时候,虽然到达的8080端口,但是给的协议是https,那只能重定向到8443

<Engine name="Catalina" defaultHost="localhost">

一个engine内可以有多个host

当用户访问的host,在本机不存在,直接访问默认的host

<Host name="localhost" appBase="webapps"

注:appBase:网页文件的根目录,相当于/use/share/tomcat

unpackWARs="true" autoDeploy="true">

注:unpackWARs:是否自动展开.wra文件

autoDeploy:自动部署应用程序

默认的虚拟主机在/usr/share/webapps/ROOT/下

定义host

例:

<Host name="192.168.63.131" appBase="/data/webapps"

unpackWARs="ture" autoDeploy="true"/>

注:

host的名字是contes7.magedu.com

appBase网页文件的根目录是/data/webapps

unpackWARs自动展开.wra文件

autoDeploy自动部署应用程序

创建默认虚拟主机的目录ROOT

mkdir /data/webapps/ROOT{classes,lib,META-INF,WEB-INF} -p

用vi编辑一个index.jsp文件

vi /data/webapps/ROOT/index.jsp

<%@ page language="java" %>

<html>

<head><title>TomcatA</title></head>

<body>

<h1><font color="red">TomcatA.magedu.com</font></h1>

<table align="centre" border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("magedu.com","magedu.com"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

启动服务

systemctl restart tomcat

我们需要客户端解析主机名,不然默认访问的是默认localhost的主机

客户端,临时解析

vim /etc/hosts

192.168.63.131 contes7.magedu.com

*********************************************************************8888888

如果每一个虚拟主机都要记录虚拟主机的独立日志怎么办?

vim /etc/tomcat/server.xml

<Host name="192.168.63.131" appBase="/data/webapps"

unpackWARs="ture" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="centos7_access_log." suffix=".txt" #前缀centos7_access_log. 后缀.txt 中间是日期

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

重新启动访服务

systemctl restart tomcat

查看日志

tail /var/log/tomcat/centos7_access_log.2018-07-20.txt

***********************************************************************************************************8

在host内部添加contex组件

cp -r /data/webapps/ROOT/ /data/otherapps/myapp

vim /data/otherapps/myapp/index.jsp

<%@ page language="java" %>

<html>

<head><title>TomcatA</title></head>

<body>

<h1><font color="purple">TomcatA.ilinux.io</font></h1>

<table align="centre" border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("magedu.com","magedu.com");%>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

要想通过某一特定的URL加载并不在我们的appBase网页文件根目录下里面的资源,但又能被我们的URL访问到

vim /data/otherapps/ROOT/index.jsp

</Host>

<Host name="192.168.63.131" appBase="/data/webapps"

unpackWARs="ture" autoDeploy="true">

<Context path="/testapp" docBase="/data/otherapps/myapp" reloadadle= " "/>

注:path=访问路径 docBase=网页文件路径

我们通过当前的主机后面跟上/testapp,能访问/data/otherapps/myapp里面的资源

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="centos7_access_log." suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

启动服务

systemctl restart tomcat

**********************************************************************************************************

tomcat的管理应用

host-manager:管理虚拟主机

vim /etc/tomcat/tomcat-users.xml

启用admin-gui角色

<role rolename="admin-gui"/>

<role rolename="manager-gui"/>

<user username="admin" password="admin" roles="manager-gui,admin-gui"/>

用户名和密码属于manager-gui角色和admin-gui角色

重新启动服务

systemctl restart tomcat

浏览器测试

注:172.20.115.61 是tomcat的配置文件vim /etc/tomcat/server.xml里面默认的host原来的localhost改成 172.20.115.61

#############################################################################

tomcat负载均衡

tomcat的连接器

http:支持任何类型的http客户端

https:通常只有浏览器客户端直接跟tomcat大交道时才使用https连接器,或者在我们需要在内网中药构建ssl会话才有必要使用https连接器

ajp:ajp的客户端,只有一个httpd

如果我们要构建tomcat提供服务的话,它大体有几种情形

1.直接拿tomcat连接提供互联网上的客户端

这时候就叫tomcat运行在standalone中叫独立运行

这个时候的tomcat既要负责客户端的连接的建立,与各种的connections需要维护

同时还有负责运行应用程序,去响应用户请求包括动态内容,静态内容,版本等等

我们一般不怎么使用

在一个单机的tomcat的之前一个加一个nginx的反代,这样至少能把连接的建立和维护,由nginx来负责,静态的内容的响应有nginx负责,这样tomcat只要负责动态内容

如果只是在本机上构建,那么我们的tomcat只要放在127.0.0.1的地址上,好处是,我们的tomcat就不可以被其他客户端随意的访问,安全防护的功能都可以转个nginx,包括既有日志一应功能都可以转给nginx,而此处nginx确实有更好的性能和其他方面的表现

所以说我们运行tomcat,如果需要做负载均衡,我们通常可以用ngixn ,即便如此tomcat主机也有可能是nginx加tomcat

######################################################################

让nginx反代用户的请求到httd

192.168.63.131 tomcat主机

192.168.63.132 tomcat主机

192.168.63.140 负载均衡器

192.168.63.141 客户端

内网域名的定义

tomcat1-rack11-zone32-telcome-bj.magedu.com

角色加数字-机房的房间-所属区域-运营商-地域

**************************************************************************************

构建NT,也就是nginx加tomcat

在192.168.63.140 负载均衡器 安装nginx

yum install nginx -y

配置虚拟主机,进行反代

vim /etc/nginx/conf.d/ww.conf

server {

listen 80;

server_name www.magedu.com;

location / {

proxy_pass http://172.20.115.61:8080;

检查语法

nginx -t

启动服务

nginx -s reload

192.168.63.141 客户端测试

vim /etc/hosts

192.168.63.140 www.magedu.com

虚拟机浏览器测试

www.magedu.com

******************************************************************************************************************

192.168.63.131 tomcat主机

192.168.63.132 tomcat主机

yum install java-1.8.0-openjdk-devel -y tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps -y

192.168.63.131 tomcat主机

创建虚拟主机

mkdir /data/ROOT/{classes,lib,META-INF,WEB-INF}

编辑index.jsp 文件

vim /data/webapps/ROOT/index.jsp

<%@ page language="java" %>

<html>

<head><title>TomcatA</title></head>

<body>

<h1><font color="red">TomcatA.magedu.com</font></h1>

<table align="centre" border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("magedu.com","magedu.com"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

编辑tomcat的配置文件

vim /etc/tomcat/server.xml

</Host>

<Host name="contes7.magedu.com" appBase="/data/webapps"

unpackWARs="ture" autoDeploy="true">

<Context path="/testapp" docBase="/data/otherapps/myapp" reloadable="" />

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="centos7_access_log." suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

找到 <Engine 模块,把defaultHost默认主机改成自定义虚拟主机host的名字

<Engine name="Catalina" defaultHost="contes7.magedu.com">

编辑管理tomcat的web界面认证的用户名密码文件

vim /etc/tomcat/tomcat-users.xml

<role rolename="admin-gui"/>

<role rolename="manager-gui"/>

<user username="admin" password="admin" roles="manager-gui,admin-gui"/>

重新启动服务

systemctl restart tomcat

192.168.63.132 tomcat主机

创建虚拟主机

mkdir /data/webapps/ROOT/{classes,lib,META-INF,WEB-INF} -p

编辑index.jsp 文件

vim /data/webapps/ROOT/index.jsp

<%@ page language="java" %>

<html>

<head><title>TomcatB</title></head>

<body>

<h1><font color="red">TomcatB.magedu.com</font></h1>

<table align="centre" border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("magedu.com","magedu.com"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

编辑tomcat的配置文件

vim /etc/tomcat/server.xml

</Host>

<Host name="zhouyafei.com" appBase="/data/webapps"

unpackWARs="ture" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="centos7_access_log." suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

找到 <Engine 模块,把defaultHost默认主机改成自定义虚拟主机host的名字

<Engine name="Catalina" defaultHost="zhouyafei.com">

编辑管理tomcat的web界面认证的用户名密码文件

vim /etc/tomcat/tomcat-users.xml

<role rolename="admin-gui"/>

<role rolename="manager-gui"/>

<user username="admin" password="admin" roles="manager-gui,admin-gui"/>

重新启动服务

systemctl restart tomcat

192.168.63.140 负载均衡器

安装nginx服务

yum install nginx -y

配置虚拟主机进行反向代理

vim /etc/nginx/conf.d/www.conf

upstream tcsrvs {

server contes7.magedu.com:8080; #192.168.63.131 tomcat主机的自定义的host虚拟主机

server zhouyafei.com:8080; #192.168.63.132 tomcat主机自定义的虚拟主机

server {

listen 80;

server_name www.magedu.com;

location / {

proxy_pass http://tcsrvs;

检查语法

nginx -t

启动服务

nginx -s reload

由于没有DNS,我们要解析域名,要将两个tomcat的域名写入hosts文件

vim /etc/hosts

192.168.63.131 contes7.magedu.com

192.168.63.132 zhouyafei.com

192.168.63.141 客户端

由于没有DNS,我们要解析域名,要将两个tomcat的域名还有nginx反代的域名写入hosts文件

192.168.63.131 contes7.magedu.com

192.168.63.140 www.magedu.com

192.168.63.132 zhouyafei.com

浏览器测试

******************************************************************************************************

不建议使用

基于IP地址的绑定,同一个ip,访问nginxtomcat主机,会绑定在同一个tomcat主机上

vim /etc/nginx/conf.d/www.conf

upstream tcsrvs {

ip_hash;

server zhouyafei.com:8080;

server contes7.magedu.com:8080;

server {

listen 80;

server_name www.magedu.com;

location / {

proxy_pass http://tcsrvs;

#proxy_pass http://192.168.63.132:8080;

**********************************************************************************************************

如何在httpd上进行反向代理

192.168.63.140

安装httpd

yum install httpd -y

列出httpd动态可装卸的共享模块

httpd -M

出现proxy_module (shared)模块代表httpd已经支持反代和正代

出现 proxy_ajp_module 这个模块就可以直接连接tomcat的ajp连接器

使用httpd连接器进行反代

vim /etc/httpd/conf.d/http-tomcat.conf

<VirtualHost *:80> #监听在80端口

ServerName www.magedu.com #要被访问的域名

ProxyRequests Off #关闭正向代理

ProxyVia On

ProxyPreserveHost On

<Proxy *> #允许任何人访问我们的代理服务器

Require all granted

</Proxy>

ProxyPass / http://contes7.magedu.com:8080/ #指明把/根的url代理到http://contes7.magedu.com:8080/

<Location /> #允许任何人访问

Require all granted

</Location>

</VirtualHost>

检查配置

httpd -t

启动服务

systemctl start httpd

浏览器测试

www.magedu.com

使用ajp连接器进行反代

vim /etc/httpd/conf.d/ajp-tomcat.conf

<VirtualHost *:80>

ServerName web.magedu.com

ProxyRequests Off

ProxyVia On

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass / ajp://zhouyafei.com:8009/

<Location />

Require all granted

</Location>

</VirtualHost>

检查配置

httpd -t

启动服务

systemctl start httpd

浏览器测试

web.magedu.com

http连接器进行负载均衡

byrequests: 默认 轮循

bybusyness :最少连接

bytraffic :根据流量调度,谁流量少,给谁调度

要让www的主机基于httpd连接,分别代理的不同的后端服务器不同的虚拟主机上

vim /etc/httpd/conf.d/http-tomcat.conf

<Proxy balancer://tcsrvs>

BalancerMember http://contes7.magedu.com:8080

BalancerMember http://zhouyafei.com:8080

ProxySet lbmethod=byrequests

</Proxy>

<VirtualHost *:80>

ServerName www.magedu.com

ProxyRequests Off

ProxyVia On

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass / balancer://tcsrvs/

<Location />

Require all granted

</Location>

</VirtualHost>

检查配置

httpd -t

启动服务

systemctl start httpd

浏览器测试

www.magedu.com

我们也可以设置权重

BalancerMember http://contes7.magedu.com:8080 loadfactor=2

BalancerMember http://zhouyafei.com:8080 loadfactor=1 默认是1

status状态

status=D 排干,就让这个后端主机人为的设置为不可用

BalancerMember http://contes7.magedu.com:8080 loadfactor=2 status=D

status=H 备用模式,

BalancerMember http://contes7.magedu.com:8080 loadfactor=2 status=H

在httpd反代的时候也可以用会话连接器

Header add Set-Cookie "Routeid=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTER_CHANGED

<Proxy balancer://tcsrvs>

BalancerMember http://contes7.magedu.com:8080 loadfactor=1 route=TcA

BalancerMember http://zhouyafei.com:8080 loadfactor=1 route=TcB

ProxySet stickysession=ROUTEID

</Proxy

在后端服务器

192.168.63.131

vim /etc/tomcat/server.xml

加入 jvmRoute="TcA属性

<Engine name="Catalina" defaultHost="contes7.magedu.com" jvmRoute="TcA">

192.168.63.132

vim /etc/tomcat/server.xml

加入 jvmRoute="TcB属性

<Engine name="Catalina" defaultHost="zhouyafei.com" jvmRoute="TcB">

ajp连接器进行负载均衡

vim /etc/httpd/conf.d/ajp-tomcat.conf

<Proxy balancer://tomcat>

BalancerMember ajp://contes7.magedu.com:8009

BalancerMember ajp://zhouyafei.com:8009

</Proxy>

<VirtualHost *:80>

ServerName web.magedu.com

ProxyRequests Off

ProxyVia On

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass / balancer://tomcat/

<Location />

Require all granted

</Location>

</VirtualHost>

检查配置

httpd -t

启动服务

systemctl start httpd

浏览器测试

web.magedu.com

注意:上面的实验只是测试,在输出环境中只用配置一种httpd或者ajp

*********************************************************************************************************

基于httpd的反代负载均衡

管理接口balance,有一个内建的页面,这个页面还有管理功能

指定一个<Location ,只要服务器和已有Location的不冲突,这个Location所有balance-manager内部处理的

SetHandler balance-manager 代表URL

SetHandler 打开处理器,这个处理器是balance-manager

ProxyPass !关闭代理

Require all granted 授权所有人都可以访问

vim /etc/httpd/conf.d/http-tomcat.conf

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTER_CHANGED

<Proxy balancer://tcsrvs>

BalancerMember http://contes7.magedu.com:8080 loadfactor=1 route=TcA

BalancerMember http://zhouyafei.com:8080 loadfactor=1 route=TcB

ProxySet stickysession=ROUTEID

</Proxy>

<VirtualHost *:80>

ServerName www.magedu.com

ProxyRequests Off

ProxyVia On

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass / balancer://tcsrvs/

<Location />

Require all granted

</Location>

<Location /balancer-manager>

SetHandler balancer-manager

ProxyPass !

Require all granted #这个权限太大,建议进行认证

</Location>

</VirtualHost>

检查配置

httpd -t

启动服务

systemctl start httpd

浏览器测试

www.magedu.com/balancer-manager

单机http链接,会处理一个节目

***********************************************************************************8

如何在后端实现状态跟踪

seeicnManager 会话管理器

会话管理器就是将多个tomcat实例构建成一个多播通信的会话集群

Delta 会话变动

构建会话集群

这种集群是绑定在后端的服务器上的,不管是httpd调度器,还是nginx的调度器都是可以的

组播地址为228.0.0.4

多播端口为45564(端口和地址共同决定了集群成员资格。

广播的IP是java.net.InetAddress.getLocalHost().getHostAddress()(确保你不播放127.0.0.1,这是一个常见的错误)

侦听复制消息的TCP端口是范围内第一个可用的服务器套接字 4000-4100

监听器已配置 ClusterSessionListener

两个拦截器配置TcpFailureDetector和MessageDispatch15Interceptor

注意:这样的会话集群不适合较大的规模,3,5个节点构建的tomcat没有太大问题,在多久不建议使用了

192.168.63.131

添加到tomcat主机的自己创建的host中

用vi复制

vi /etc/tomcat/server.xml

用vim 编辑

vim /etc/tomcat/server.xml

在集群中要添加jvmRoute="TcA属性

<Engine name="Catalina" defaultHost="contes7.magedu.com" jvmRoute="TcA">

在自己的host中加载集群信息

</Host>

<Host name="contes7.magedu.com" appBase="/data/webapps"

unpackWARs="ture" autoDeploy="true">

channelSendOptions="8">

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"/>

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.199" #和另一台主机一样的组播地址

port="45564"

frequency="500"

dropTime="3000"/>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="192.168.63.131" #本机的地址

port="4000"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

</Channel>

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=""/>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

<Context path="/testapp" docBase="/data/otherapps/myapp" reloadable="" />

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="centos7_access_log." suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

192.168.63.131

添加到tomcat主机的自己创建的host中

用vi复制

vi /etc/tomcat/server.xml

用vim 编辑

vim /etc/tomcat/server.xml

在集群中要添加jvmRoute="TcB

<Engine name="Catalina" defaultHost="zhouyafei.com" jvmRoute="TcB">

在自己的host中加载集群信息

</Host>

<Host name="zhouyafei.com" appBase="/data/webapps"

unpackWARs="ture" autoDeploy="true">

channelSendOptions="8">

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"/>

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.199" #和另一台集群一样的组播地址

port="45564"

frequency="500"

dropTime="3000"/>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="192.168.63.132" #自己主机的地址

port="4000"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

</Channel>

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=""/>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="centos7_access_log." suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

一定要确定那个主机要做集群服务,要在web.html文件添加<distributable/>标签元素

192.168.63.131 tomcat主机

我们的web.html放在WEB-INF目录,如果没有,就从默认的目录下复制过来

cp /etc/tomcat/web.xml /data/webapps/ROOT/WEB-INF/

编辑web.xml 文件,添加 <distributable/>

vim /data/webapps/ROOT/WEB-INF/web.xml

在这一行下添加

<!– listings is enabled? [true] –>

<distributable/>

192.168.63.132 tomcat主机

vim /data/webapps/ROOT/WEB-INF/web.xml

在这一行下添加

<!– listings is enabled? [true] –>

<distributable/>

192.168.63.131

先停止tomcat的服务,成本查看日志

systemctl stop tomcat

打开日志

tail -f /var/log/tomcat/catalina.2018-07-21.log

启动服务

systemctl start tomcat

检查是否有错误

192.168.63.132

在停止启动另一台tomcat主机的服务

先停止tomcat的服务,成本查看日志

systemctl stop tomcat

打开日志

tail -f /var/log/tomcat/catalina.2018-07-21.log

启动服务

systemctl start tomcat

检查是否有错误

在192.168.63.131查看日志会出现

tail -f /var/log/tomcat/catalina.2018-07-21.log

显示添加进来一个集群

在192.168.63.132查看日志会出现

tail -f /var/log/tomcat/catalina.2018-07-21.log

会显示加入一个集群

使用nginx进行调度

192.168.63.140 负载均衡主机

vim /etc/nginx/conf.d/www.conf

upstream tcsrvs {

server zhouyafei.com:8080;

server contes7.magedu.com:8080;

server {

listen 80;

server_name www.magedu.com;

location / {

proxy_pass http://tcsrvs;

#proxy_pass http://192.168.63.132:8080;

检查nginx的配置

nginx -t

重载服务

nginx -s reload

浏览器测试

使用httpd调度

vim /etc/httpd/conf.d/ajp-tomcat.conf

<Proxy balancer://tomcat>

BalancerMember ajp://contes7.magedu.com:8009

BalancerMember ajp://zhouyafei.com:8009

</Proxy>

<VirtualHost *:80>

ServerName web.magedu.com

ProxyRequests Off

ProxyVia On

ProxyPreserveHost On

<Proxy *>

Require all granted

</Proxy>

ProxyPass / balancer://tomcat/

<Location />

Require all granted

</Location>

</VirtualHost>

检查配置

httpd -t

重载服务

systemctl reload httpd

客户端测试

web.magedu.com

############################################################################

实现后端 nginx服务静态,tomcat服务动态,在前端再用一个nginx进行反代

在tomcat主机上在部署一个nginx,用来处理纯静态内容

在后端192.168.63.131 tomcat部署nginx服务

yum install nginx -y

在自己自定义的host虚拟主机的目录下的ROOT目录下添加一个静态页面

echo TEST R1 > /data/webapps/ROOT/test.html

现在在两个tomcat主机上一个静态页面index.html 和一个动态页面index.jps

配置nginx能实现反代

注:红色的为添加的内容

vim /etc/nginx/nginx.conf

server {

listen 80 default_server;

listen [::]:80 default_server;

server_name _;

root /data/webapps/ROOT; #添加网站的目录

# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;

location ~* \.(jsp|do)$ { #~*忽略大小写 所有以jsp和do结尾的文件

proxy_pass http://192.168.63.131:8080; #反代给本机,在生产中是使用localhost

location / {

index index.jsp index.html; #识别主页

error_page 404 /404.html;

location = /40x.html {

error_page 500 502 503 504 /50x.html;

location = /50x.html {

检查配置

nginx -t

启动服务

nginx

浏览器测试

测试动态网页

测试静态网页

在后端192.168.63.132 tomcat部署nginx服务

yum install nginx -y

在自己自定义的host虚拟主机的目录下的ROOT目录下添加一个静态页面

echo TEST R1 > /data/webapps/ROOT/test.html

现在在两个tomcat主机上一个静态页面index.html 和一个动态页面index.jps

配置nginx能实现反代

注:红色的为添加的内容

vim /etc/nginx/nginx.conf

server {

listen 80 default_server;

listen [::]:80 default_server;

server_name _;

root /data/webapps/ROOT; #添加网站的目录

# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;

location ~* \.(jsp|do)$ { #~*忽略大小写 所有以jsp和do结尾的文件

proxy_pass http://192.168.63.132:8080; #反代给本机,在生产中是使用localhost

location / {

index index.jsp index.html; #识别主页

error_page 404 /404.html;

location = /40x.html {

error_page 500 502 503 504 /50x.html;

location = /50x.html {

检查配置

nginx -t

启动服务

nginx

浏览器测试

测试静态页面

测试动态页面

配置前端基于nginx的调度器 192.168.63.140

vim /etc/nginx/conf.d/www.conf

upstream tcsrvs { #后端tomcat服务器

server zhouyafei.com:80;

server contes7.magedu.com:80;

upstream imgsrvs { #假设图片服务器

server zhouyafei.com:80;

server contes7.magedu.com:80;

server {

listen 80;

server_name www.magedu.com; #要访问的域名

location ~* \.(jpg|jpeg|png|gif)$ { #如果有图片服务器,将图片~*忽略大小写,以jpg等结尾的图片

proxy_pass http://imgsrvs; #调度到imgsvs图片服务器

location / {

proxy_pass http://tcsrvs; #其他的都调度到tcsrvs

检测配置

nginx -t

启动服务

nginx

浏览器测试

测试动态网页

测试静态网页

#############################################################################

varnish缓存系统

cache 页面缓存

proxy:代理式缓存

bypass:旁挂式缓存系统

memcached 高性能的分布式的内存对象缓存系统

yum install memcached -y

vim /etc/sysconfig/memcached

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="128"

OPTIONS="-f 1.2"

启动服务

systemctl start memcached

查看端口

ss -ntl

远程telnet连接

telnet 127.0.0.1 11211

stats里面是内建的变量

添加一个缓存项

add 键不能冲突 标志位随便写 过期时间 字节

add mykey 1 120 9

ilinux.io 内容

get mykey 获取数据

memcached程序的常用选项

-m 内存空间,在当前系统分出多少空间用来缓存memcached相关的数据

-c 最大并发连接数,默认1024

-u 以普通用户的身份运行memcached进程

-l 监听的tcp端口,默认是本机所有的地址,如果想监听特有地址用-l定义

-p 端口 11211

-U UDP的端口,不指定默认的一样11211,0表示关闭UDP协议的端口

-M 内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的可用空间为止

-f 增长因子,默认是1.25

-t 启动用于响应用户请求的线程数,线程数要小于等于CPU的核心数

memcached默认没有认证机制,可以借用于SASL进行认证

SASL :简单安全认证层

SASL是把一些不支持认证功能的程序做认证

c++语言连接mamcached

yum install libmemcached -y

PHP语言mamcached

php-pecl-memcache

php-pecl-memcached

多个tomcat配置为一个所谓的多播集群,通过集群内升的设定,能够构建DeltaManager的环境

它所能试用的规模非常的有限,因为每一个在构建的网页都要通过网络传输给统一集群中的其他节点,所以每一个节点都会受控于会话的管理,如果要借助于第三方工具,或借助一个外在的工具,来使用作为集中存储会话,使得每一个节点获取会话时都从这个集中的存储系统上来获取

mamcached就是可以用来存储会话的一个主机

但是一个memcached是单独故障,我们要做冗余备份,但是memcached不支持这个功能,我们要在前端程序一侧用手动构建

*******************************************************************************************************

查看地址下载地址

下载主架库类文件

wget https://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.0/memcached-session-manager-2.3.0.jar

下载适用于tomcat的版本的架

wget https://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/2.3.0/memcached-session-manager-tc7-2.3.0.jar

wget https://repo1.maven.org/maven2/net/spy/spymemcached/2.12.3/spymemcached-2.12.3.jar

下载序列化工具

例:

< 依赖 > < groupId > de.javakaffee.msm </ groupId > < artifactId > msm-kryo-serializer </ artifactId > < version > 1.9.7 </ version > < scope > runtime </ scope > </ dependency >

wget https://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/2.3.0/msm-kryo-serializer-2.3.0.jar

wget https://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/0.42/kryo-serializers-0.42.jar

wget https://repo1.maven.org/maven2/com/esotericsoftware/kryo/4.0.2/kryo-4.0.2.jar

wget https://repo1.maven.org/maven2/com/esotericsoftware/reflectasm/1.11.7/reflectasm-1.11.7.jar

wget https://repo1.maven.org/maven2/org/ow2/asm/asm/6.2/asm-6.2.jar

wget https://repo1.maven.org/maven2/org/objenesis/objenesis/2.6/objenesis-2.6.jar

############################################################################3

配置memcached缓存,进行tomcat集群的会话保持

1.下载必要的文件

在tomcat主机

192.168.63.131

192.168.63.132

yum install memcached -y

将下载的文件放到tomcat的lib文件路径/usr/share/tomcat/lib/,这个不赖是链接目录,我们进入到真正的目录

查看目录的软链接

ls -ld /usr/share/tomcat/lib

进入目录

cd /usr/share/java/tomcat

下载主架库类文件

wget https://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.0/memcached-session-manager-2.3.0.jar

下载适用于tomcat的版本的架

wget https://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/2.3.0/memcached-session-manager-tc7-2.3.0.jar

下载序列化工具

wget https://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/2.3.0/msm-kryo-serializer-2.3.0.jar

wget https://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/0.42/kryo-serializers-0.42.jar

wget https://repo1.maven.org/maven2/com/esotericsoftware/kryo/4.0.2/kryo-4.0.2.jar

wget https://repo1.maven.org/maven2/com/esotericsoftware/reflectasm/1.11.7/reflectasm-1.11.7.jar

wget https://repo1.maven.org/maven2/org/ow2/asm/asm/6.2/asm-6.2.jar

wget https://repo1.maven.org/maven2/org/objenesis/objenesis/2.6/objenesis-2.6.jar

2. 配置tomcat支持使用memcached的jar文件

192.168.63.131

打开tomcat的配置文件

vim /etc/tomcat/server.xml

在打算定义会话管理的虚拟主机上配置

注意:汉字是注释,使用的时候不能加

<Host name="contes7.magedu.com" appBase="/data/webapps"

unpackWARs="ture" autoDeploy="true">

<Context path="/" docBase="ROOT" reloadable="" >

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

failoverNodes="n2" #故障转移节点,设为n2,n1是活动的

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" #要忽略的URI有哪些,不去会话追踪

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

</Context>

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="centos7_access_log." suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

192.168.63.132

打开tomcat的配置文件

vim /etc/tomcat/server.xml

在打算定义会话管理的虚拟主机上配置

注意:汉字是注释,使用的时候不能加

<Host name="zhouyafei.com" appBase="/data/webapps"

unpackWARs="ture" autoDeploy="true">

<Context path="/" docBase="ROOT" reloadable="" >

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

failoverNodes="n2" #故障转移节点,设为n2,n1是活动的

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" #要忽略的URI有哪些,不去会话追踪

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

</Context>

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="centos7_access_log." suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

实现后端 nginx服务静态,tomcat服务动态,在前端再用一个nginx进行反代

在tomcat主机上在部署一个nginx,用来处理纯静态内容

yum install nginx -y

在自己自定义的host虚拟主机的目录下的ROOT目录下添加一个静态页面

echo TEST R1 > /data/webapps/ROOT/test.html

现在在两个tomcat主机上一个静态页面index.html 和一个动态页面index.jps

配置nginx能实现反代

注:红色的为添加的内容

vim /etc/nginx/nginx.conf

server {

listen 80 default_server;

listen [::]:80 default_server;

server_name _;

root /data/webapps/ROOT; #添加网站的目录

# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;

location ~* \.(jsp|do)$ { #~*忽略大小写 所有以jsp和do结尾的文件

proxy_pass http://192.168.63.131:8080; #反代给本机,在生产中是使用localhost

location / {

index index.jsp index.html; #识别主页

error_page 404 /404.html;

location = /40x.html {

error_page 500 502 503 504 /50x.html;

location = /50x.html {

检查配置

nginx -t

启动服务

nginx

在后端192.168.63.132 tomcat部署nginx服务

yum install nginx -y

在自己自定义的host虚拟主机的目录下的ROOT目录下添加一个静态页面

echo TEST R1 > /data/webapps/ROOT/test.html

现在在两个tomcat主机上一个静态页面index.html 和一个动态页面index.jps

配置nginx能实现反代

注:红色的为添加的内容

vim /etc/nginx/nginx.conf

server {

listen 80 default_server;

listen [::]:80 default_server;

server_name _;

root /data/webapps/ROOT; #添加网站的目录

# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;

location ~* \.(jsp|do)$ { #~*忽略大小写 所有以jsp和do结尾的文件

proxy_pass http://192.168.63.132:8080; #反代给本机,在生产中是使用localhost

location / {

index index.jsp index.html; #识别主页

error_page 404 /404.html;

location = /40x.html {

error_page 500 502 503 504 /50x.html;

location = /50x.html {

检查配置

nginx -t

启动服务

nginx

3.host文件解析域名

192.168.63.131

192.168.63.132

192.168.63.141

vim /etc/hosts

192.168.63.131 contes7.magedu.com

192.168.63.140 www.magedu.com web.magedu.com

192.168.63.132 zhouyafei.com

4.启动tomcat服务,并查看日志

192.168.63.131

systemctl restart tomcat

查看日志

tail -f /var/log/tomcat/catalina.2018-07-22.log

可以看见

INFO: ——–

– finished initialization:

– sticky: true

– operation timeout: 1000

– node ids: [n1]

– failover node ids: [n2]

– storage key prefix: null

– locking mode: null (expiration: 5s)

——–

192.168.63.132

systemctl restart tomcat

查看日志

tail -f /var/log/tomcat/catalina.2018-07-22.log

可以看见

INFO: ——–

– finished initialization:

– sticky: true

– operation timeout: 1000

– node ids: [n1]

– failover node ids: [n2]

– storage key prefix: null

– locking mode: null (expiration: 5s)

5.测试 192.168.63.132 tomcat主机

测试 192.168.63.131 tomcat主机

6.配置基于nginx的负载均衡

192.168.63.140

vim /etc/nginx/conf.d/www.conf

upstream tcsrvs { #后端tomcat服务器

server zhouyafei.com:80;

server contes7.magedu.com:80;

server {

listen 80;

server_name www.magedu.com; #要访问的域名

location / {

proxy_pass http://tcsrvs; #其他的都调度到tcsrvs

检查配置

nginx -t

启动服务

nginx

7.测试,不加端口号,

由后端的nginx服务器反代到tomcat的主机上的nginx,在由tomcat主机的nginx反代到前端的nginx服务器

8. 测试

可以看见Session ID一行的最后有一个n1

10.在memcached查看保存的会话

yum install libmemcached -y

memdump –servers="contes7.magedu.com:11211"

注意:在memcached的配置中n2被设置为故障转移节点,此前所有的会话都是由n1来提供,当n1

出现故障在由n2提供会话

如果n1和n2都存在,n2是备用的

如果n1故障n2启用,但是n1创建的会话还保持着n1的属性

###################################################################################################################################

Tomcat的常用优化配置:

(1) 内存空间:

/etc/sysconfig/tomcat, /etc/tomcat/tomcat.conf, /usr/local/tomcat/bin/catalina.sh

JAVA_OPTS="-server -Xms32g -Xmx32g -XX:NewSize= -XX:MaxNewSize= -XX:PermSize= -XX:MaxPermSize="

-server:服务器模型

-Xms:堆内存初始化大小;

-Xmx:堆内存空间上限;

-XX:NewSize=:新生代空间初始化大小;

-XX:MaxNewSize=:新生代空间最大值;

-XX:PermSize=:持久代空间初始化大小;

-XX:MaxPermSize=:持久代空间最大值;

192.168.63.131 tomcat主机

vim /etc/tomcat/tomcat.conf

注:JAVA_OPTS="-server 为服务器端优化

-Xms512 初始化大小为512m兆

-Xmx1.5g 最大1500m

-XX:MaxNewSize=512m 新生代的大小,新生成的对象

-XX:NewSize=256m 新生代初始化大小

#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"

JAVA_OPTS="-server -Xmx1500m -Xms512m -XX:MaxNewSize=512m -XX:NewSize=256m"

vim /etc/tomcat/server.xml

默认主机是localhost

<<Engine name="Catalina" defaultHost="localhost" jvmRoute="TcB">

启动服务

systemctl restart tomcat

浏览器

可以看见一个server status,单机进入

能看见刚才定义的内容

可以根据使用的大小更改配置文件

vim /etc/tomcat/tomcat.conf

2.线程池设置

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

常用属性:

maxThreads:最大线程数;最大并发连接数;

minSpareThreads:最小空闲线程数;

maxSpareThreads:最大空闲线程数;

acceptCount:等待队列的最大长度;

URIEncoding:URI地址编码格式,建议使用UTF-8;

enableLookups:是否启用dns解析,建议禁用;

compression:是否启用传输压缩机制,建议“on";

compressionMinSize:启用压缩传输的数据流最小值,单位是字节;

compressableMimeType:定义启用压缩功能的MIME类型;

text/html, text/xml, text/css, text/javascript

(3) 禁用8005端口;

<Server port="-1" shutdown="SHUTDOWN">

(4) 隐藏版本信息:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

Server="SOME STRING"

*******************************************************************************************************8888

垃圾回收

新生代垃圾回收 Minor GC

原文链接:https://blog.csdn.net/weixin_33774615/article/details/91658612

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享