nginx+tomcat+memcache

因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用是开发和调试JSP 程序的首选对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

jdk是运行java所必需的 

软件下载:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src/master/ 拷贝jar包到/usr/local/tomcat/lib目录:    配置tomcat: #  vim /usr/local/tomcat/conf/context.xml <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.25.0.3:11211,n2:172.25.0.4:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

 实验前:server1上将openrestry的nginx关闭,打开nginx服务;server2、3上将httpd Web服务器关掉systemctl stop httpd。

1 server2、3准备安装tomcat服务器。

server2上安装tomcat:

打开tomcat服务

 netstat -antlp查看端口发现8080端口(tomcat服务端口):

server3上同样安装jdk、tomcat、并启动tomcat服务:

server2、3上访问tomcat

 

2 nginx结合tomcat(和nginx结合httpd一样,使用负载均衡的方式)

 

访问.jsp页面时,通过proxy_pass调度给tomcat负载均衡器

 

tomcat负载均衡器(调度到server2、3的tomcat服务器,类似于LVS调度给server2、3的httpd上)

 

实验1: 没图片是因为只有.jsp页面的才提交给tomcat,图片不是jsp结尾,所以不显示

 实验2:访问test.jsp:

server2 、3tomcat默认发布目录里面添加test.jsp,用来记录cession列表信息,

server2上tomcat挂了,由于访问的是ngnix对后端有健康监测,所以会调度到server3,但是存入server2内存的信息没了,用户端提交信息丢了,虽然服务端没报错但是用户体验感下降(购物车里的东西没了)。现在不存在这样问题,cession共享了。

 解决实验2问题:当server2挂掉后,server2上面内存原有cession信息可以被server3获取

如果使用一个共享存储会浪费资源。

nginx+tomcat+memcache交叉存储

memcache只是临时存tomcat的信息,必能持久化。

nginx在server1上,T1和M1在结点server2上,T2和M2在节点server3上。

nginx负载均衡,tomcat1(T1)将session信息存储在memcache2(M2)上。只有当M2不可用时,T1才将session存储在M1上。T2类似,只有当M1不可用时,才把session信息存储在M2上。使用这种配置的好处是,当T1和M1同时挂掉也不会丢失session会话,避免单点故障。(nginx

负载到T1,T1数据一份在内存上,一份存在M2上,当T1挂掉后,T2在M2上获得T1数据并将新数据加上之前数据都存在M2上;当左边整个节点挂掉,T2依旧可以从M2获取T1数据,而T2的数据T2内存有一份,后续将T2数据都存到M2)

实验:server1上打开nginx

server2上交叉存储

将上面调用的java的类放在tomcat/lib底下

 将调用的java类文件发送到server3tomcat/lib下

 安装memcache: yum install memcached -y,启动查看发现11211端口

server3上和server2相同操作:

启动查看发现11211端口 因为配置过tomcat文件,所以重启tomcat,查看日志,配置生效:

server3相同操作:

浏览器输入数据实验:

下面实验n2的ID:CE1FFC036621768ADD0DF5C5CB19B9E2-n2
下面ID不一样是因为实验了多次,截屏乱了,但不影响实验判断

 (1)server3 -> n1  ,数据在n1里面(user1、2、3)

(2)server3上停掉tomcat:/usr/local/tomcat/bin/shutdown.sh
输入user4、5 , 变为server2 -> n1 ,数据在n1里面(user1、2、3、4、5)

(3) 停掉server2上的memcache  n1时:[root@server2 tomcat]# systemctl stop memcached
输入user6、7变为server2 -> n2,使用工具telnet来查看我们缓存的信息:telnet 172.25.254.3 11211输入n2ID发现所有数据(user1到7)存在在n2上。

 (4)打开server3的tomcat关掉server2的tomcat:输入user8   变为server3 -> n2
所有信息在n2上。


 

(5)上面server3 -> n2不是交叉存储,打开server2上的mem服务(打开n1),关掉server3上的mem(关掉n2),输入user9变为server3 -> n1交叉存储,数据user1......9存在n1上实现交叉存储
  [root@server2 tomcat]# /usr/local/tomcat/bin/startup.sh
  [root@server3 tomcat]# /usr/local/tomcat/bin/shutdown.sh
上述无论是tomcat挂掉还是memcache关闭,或者是某个后端服务器(server2或server3)挂掉都不影响session信息的保存。(注:如果某个后端服务器挂掉(例如server2),数据就只存在server3上的memcache上,重新开启服务器server2后,要手动切换到交叉存储,不然如果server2服务器再挂掉,数据就丢失了)



    




 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值