tomcat结合nginx

  • 一、tomcat简介及安装
    • 1.tomcat介绍
    • 2.nginx结合tomcat
    • 3.tomcat 结合Nginx
    • 4.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到win2008的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恢复信息时,不会恢复重复信息

LAMP架构:tomcat结合nginx相关推荐

  1. LAMP架构之nginx:nginx重定向+防盗链

    LAMP架构之nginx:nginx重定向+防盗链 一.nginx重定向 1.防止域名恶意解析到服务器IP,rewrite(URL重定向) 2.重定向做全站加密 3.网站的整体迁移 二.nginx防盗 ...

  2. python搭建web服务器需要tomcat吗_如何快速学习网站基本搭建和服务器环境配置(LAMP/LNMP/Tomcat)?...

    一.基本概念 实验1: 在阿里云上部署Tomcat服务器 业务背景 Tomcat为网站的服务器,每个网站在后面都有一个服务器来解析那个网页,Tomcat 对于 Java 来说它就是一个 Servlet ...

  3. LAMP架构 (资源)

    2019独角兽企业重金招聘Python工程师标准>>> LAMP架构 LAMP(Linux+Apache+MYSQL|Mariadb+PHP|PERL|Python)WEB架构组合. ...

  4. (十)RHEL系统之基于LAMP架构部署商城系统

    基于LAMP架构部署商城系统 接上篇:(九)RHEL系统之linux自有服务 任务背景 小王经过一段时间学习,慢慢的了解到公司的一些业务架构,发现好几个项目不是LAMP架构就是Nginx+Tomcat ...

  5. centos 安装tomcat_简单介绍Linux配置mysql,tomcat,Nginx 开机自启动的几个方式

    概述 一般我们打算把一些服务,例如 mysql,tomcat,Nginx设置开机自启动的话一般是有三四种方式来实现,下面以mysql,tomcat,Nginx做例子来演示. 一.使用定时任务 cron ...

  6. 百度贴吧10亿量级LAMP架构分享

    导读:天下武功,唯快不破.对日益激烈的互联网竞争你所拥有的利器就是快!本文来自百度贴吧的LAMP解决方案介绍,摘录至此旨在研究分享,看看其是如何全面支持快速迭代的. 文章内容如下: 贴吧是功能性产品, ...

  7. Lamp 架构 搭建 论坛网站

    实验环境: firewalld : stoped selinux: disabled 一. 构建lamp架构搭建论坛网站 在server1和server2上都安装部署相同的论坛网站,且二者共用同一个数 ...

  8. 末学者笔记--apache编译安装及LAMP架构上线

    apache介绍 一.Apache的三种工作模式 Apache一共有3种稳定的MPM模式(多进程处理模块),它们分别是prefork.worker.event.http-2.2版本的httpd默认的m ...

  9. Apache web服务器(LAMP架构)

    apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 3).URL 统一资源定位符 http:/ ...

最新文章

  1. FCC有意支持Sprint与T-Mobile合并?
  2. C++编程风格(一)
  3. IDEA中新建SpringBoot项目时提示:Artifact contains illegal characters
  4. Android inline hook手记
  5. Oracle入门(十四.22)之创建DDL和数据库事件触发器
  6. 前端学习(1452):表格案例--效果演示
  7. java implements interface_java接口(interface)与现实(implements)
  8. 通过html直接显示txt内容_10分钟教你用Python爬取Baidu文库全格式内容
  9. python中什么是按位取反_js中怎么理解按位取反?
  10. 问题解决:./config.sh: line 103
  11. Flutter实战视频-移动电商-18.首页_火爆专区后台接口调试
  12. UG NX二次开发(C#)-UI Styler-批量选择点
  13. 中标麒麟 NeoKylin-SDK 里都有哪些库文件
  14. 案例19:Java私房菜定制上门服务系统设计与实现开题报告
  15. 安卓读取U盘容量信息,支持低版本API
  16. python文档生成_python文档生成工具:pydoc、sphinx;django如何使用sphinx?
  17. 我的自选股估值观察:家电+银行+地产+白酒
  18. UVA1149 装箱 Bin Packing 题解
  19. 回到过去--慢慢的偏离了自己的轨迹
  20. Android Toast控件

热门文章

  1. 【uniapp】实现对TXT文本文件的读取和保存下载
  2. zip的mysql_安装zip的mysql
  3. java支付模块之支付宝
  4. PMP试题 | 每日一练,快速提分 6.4
  5. 本地mysql数据库安装
  6. nginx填坑之路(1)Nginx 检测语法正常,启用报 [emerg] bind() to 0.0.0.0:XXXX failed (13: Permission denied)错误处理...
  7. 【数据挖掘】pandas使用手册
  8. vulnhub之VENOM:1
  9. 主力吸筹猛攻指标源码_通达信偷偷连续吸筹指标,主力吸筹猛攻指标源码
  10. L010-老男孩linux高端运维课程—第二关linux命令及基础手把手实战