100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > LAMP架构:tomcat结合nginx

LAMP架构:tomcat结合nginx

时间:2020-02-14 06:44:15

相关推荐

LAMP架构:tomcat结合nginx

tomcat结合nginx

一、tomcat简介及安装1.tomcat介绍2.nginx结合tomcat3.tomcat 结合Nginx4.tomcat和jdk软件下载二、修改server5的nginx配置文件三、客户端访问测试四、nginx+tomcat+memcached建立cession共享

一、tomcat简介及安装

1.tomcat介绍

tomcat详细介绍

Tomcat介绍

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。(Tomcat 不太适合高并发,解决方法,增加后端数量)

tomcat 启动前需要配置JDK环境变量,如果没有配置JDK的环境变量,那么tomcat启动的时候就会报错,也就是无法启动。

JDK 是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

2.nginx结合tomcat

Tomcat和Nginx的区别:

tomcat一般做动态解析才会用得到,支持jsp的解析,需要配置JDK支持。

nginx,则一般是做静态,本身不具备动态解析功能,需要配置其他插件或通过其他软件协同才具备动态功能,比如php,tomcat,或者proxypass到win的iis服务器做ASP的动态链接等,但nginx在静态上的功能非常强大,也可做访问控制,而且可以做成各种协议负载服务器。

动态静态资源分离:

之前开发web方面的程序时候我们习惯将html、css等资源文件也放置于Tomcat中,用户访问后tomcat需要将请求的这些静态资源文件一并返回给用户。再者如果有多台同业务逻辑的tomcat服务器的话,同样的资源还需要在每个服务器上放一份,同时也增加了tomcat服务器的网络IO

如果我们只将JSP之类的请求交给tomcat,在代理服务器上存放静态资源,当用户的请求非动态资源的时候,我们完全可以将代理服务器的静态资源直接返回给用户,而不去增大Tomcat的压力,tomcat只需要负责逻辑处理和动态资源的加载就可以了

同时,Tomcat的高并发性能很弱,所以在处理静态请求的时候,我们就抛给Nginx处理,而Tomcat专门处理动态请求。

Nginx和Tomcat结合方式

1. 将所有静态页面交给nginx动态请求交给后端tomcat处理

2. 将所有请求交给后端tomcat服务器处理,只利用Nginx自身的负载均衡功能进行多台tomcat服务器调度流。

3.tomcat 结合Nginx

为了实现tomcat集群之间的session同步:利用memcached实现(MSM工具)。memcached存储session,并把多个tomcat的session集中管理,前端在利用nginx负载均衡和动静态资源分离,在兼顾系统水平扩展的同时又能保证较高的性能。即通过MSM工具把Tomcat的Session序列化后保存到Memcached里面,从而实现Session共享。

MSM介绍:

MSM是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,还可使用Memcached存取Session,以实现高可用。

传统tomcat集群,会话复制随着结点数增多,扩展性成为瓶颈。MSM使用memcached完成统一管理tomcat会话,避免tomcat结点间过多会话复制。

MSM利用Value(Tomcat 阀)对Request进行跟踪。Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享之目的, 支持sticky和non-sticky模式:

sticky : 会话粘连模式(黏性session)。客户端在一台tomcat实例上完成登录后,以后的请求均会根据IP直接绑定到该tomcat实例。

no-sticky:会话非粘连模式(非粘性session)。客户端的请求是随机分发,多台tomcat实例均会收到请求

下面给出一个黏性session模式的设置示例,此实例中安装了2个tomcat以及2个memcached。

交叉存储:Tomcat-1(t1)的首要选择是把session存储在memcached-2 (m2)上(m2是t1的一个普通节点),而m2是运行在另外的一台机器上。只有当m2不可用(宕机或无法访问)时,t1才会把session存储到memcached-1(m1,m1是t1的故障转移节点)上。使用这种配置,即使机器1宕机了session也不会丢失。具体如下图所示:

4.tomcat和jdk软件下载

server5开启原生nginx

关闭server6和server7的apache

server6上安装jdk和tomcat并启动

用负载均衡的方式用nginx结合tomcat

启动tomcat

server7上安装jdk和tomcat并启动

二、修改server5的nginx配置文件

三、客户端访问测试

复制jsp文件到server6和server7下的tomcat的默认发布目录下

四、nginx+tomcat+memcached建立cession共享

交叉式存储框图

在做项目时存储都是另外算,因为存储很重要,而且加上存储后会变得很复杂。除了交叉存储方案,还可以用商用的共享存储,也就是raid存储阵列,自带高可用,冗余机制,但是成本太高。

MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。

Memcache官方网站:Memcache官网

核心优化概述

什么是优化:以更小的资源支持更大负载网站的运行,以小博大。

思路:尽量减少用户等待时间,节省系统资源开销,节省带宽使用。

优化的三方面:Memcache内存缓存技术、静态化技术、mysql优化

>tomcat的cession信息除了在memcache会存储,本机的内存中也有一份存储信息。memcaceh只是临时存储,没有持久化,只是将tomcat的cession信息临时存一份到memcache,以便于tomcat出现故障时,另一台tomcat从中获取信息。使用tomcat的session管理器,默认将sesion信息交叉存储,当出现故障时可以存储在本地的memcache,这两个memcache的地址都需要告知tomcat。交叉存储的好处,是任何一个业务单点出现故障,都可以自动高可用自动冗余,及时整个节点down掉也不影响,除非两个tomcat都坏掉。memcache本身就是临时存储,没有持久化,把tomcat的session信息临时存一份进来,以便于其中一个tomcat故障时,另一个tomcat可以从中获取信息。

关闭server6的tomcat,并修改配置文件信息

server6主机上设置

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:172.25.254.16:11211,n2:172.25.254.17:11211"failoverNodes="n1"requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"#这里调用的是java的类/>

因为上面的配置文件调用了java的类,所以复制jar包(java的压缩包)到tomcat的lib库目录下

tc6是针对tomcat的6版本,memecache-session-manager(session管理器)是tomcat的java类可以直接调用,简称MSM,可以把session数据存储到memcahe

安装memcached,并启动

server7主机上进行相设置

启动server6的tomcat,查看日志信息

启动server7的tomcat,查看日志信息

测试:

server2和server3通过tomcat+memcache+MSM自己解决了高可用和sesion共享,但并没有用共享存储,是策略解决的,共享存储会提高成本,所有的session信息都是存储在tomcat内存上,memcache只是临时存储,没有持久化,down掉就没了

安装telnet,查看memcache

telnet命令使用详解

模拟故障:关闭server7的tomcat

启动server7的tomcat,关闭server6的memcache进行测试

关闭server6的tomcat进行测试

现在tomcat的memcahe都在一个节点上,该节点如果down了,会出问题,因为现在不是交叉存储的,交叉存储时,整个节点down掉没有问题

恢复交叉存储

启动server6的memcache

停止server7的memcached

注意:memcache会对重复信息进行剔除,所以tomcat内存从memcache恢复信息时,不会恢复重复信息

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。