利用memcached做缓存服务器,为后端tomcat服务器做会话保持,利用httpd的jk模块模块做负载均衡

前端使用httpd作为反代负载均衡至后端tomcat主机:tomcat可用memcached当做会话服务器保存会话:

实验环境:物理机win7,虚拟机centos7

node1:172.18.11.111 TomcatA

node2:172.18.11.112 TomcatB

node3:172.18.11.113 调度器httpd

安装tomcat

分别在node1和node2安装tomcat:

]# yum -y install java-1.7.0-openjdk java-1.7.0-openjdk-devel

]# vim /etc/profile.d/java.sh

export JAVA_HOME=/usr

]# . /etc/profile.d/java.sh

]# yum -y install tomcat tomcat-lib tomcat-webapps tomcat-admin-webapps

]# cd /var/lib/tomcat/webapps/

]# mkdir testapp

]# cd testapp/

]# mkdir classes lib WEB-INF META-INF

]# vim index.jsp

<%@ page language="java" %>

<%@ page import="java.util.*" %>

<html>

<head>

<title>JSP Test Page </title>

</head>

<body>

<% out.println("hello world,tomcat 1,172.18.11.111") ;

%>

</body>

</html>

]# scp -r /var/lib/tomcat/webapps/testapp/ node2:/var/lib/tomcat/webapps/

修改node2上配置:

]# vim /var/lib/tomcat/webapps/testapp/index.jsp

仅修改一条:<% out.println("hello world,tomcat 2,172.18.11.112") ;

在node3:

编译安装jk模块,此模块不是httpd默认的模块需要编译才能使用;

安装开发环境:

]# yum groupinstall "Development Tools" "Server Platform Development"

需要安装httpd自己的开发包,才能编译安装第三方模块;

]# yum -y install httpd-devel

]# which apxs

/usr/bin/apxs

编译时会用到此路径;

下载jk模块并解压:

]# tar xf tomcat-connectors-1.2.40-src.tar.gz

]# cd tomcat-connectors-1.2.40-src/native/

]# ./configure --with-apxs=/usr/bin/apxs

]# make

]# make install

显示部分内容:

chmod 755 /usr/lib64/httpd/modules/mod_jk.so

表示编译完成;

]# vim /etc/httpd/conf.d/mod_jk.conf

]# vim /etc/httpd/conf.d/workers.properties

]# httpd -t

显示:Syntax OK

]# systemctl reload httpd.service

浏览器输入:http://172.18.11.113/test/

刷新实现负载均衡效果;负载均衡效果,node1和node2比例为1:2;

如有要实现会话绑定,只需在/etc/httpd/conf.d/workers.properties配置文件中添加:

worker.tcsrvs.sticky_session=1

但还需要在node1和node2上,在tomcat配置文件/etc/tomcat/server.xml中的Engine配置段添加一个‘jvmRoute=’指令,用来标识tomcat服务器的id号;

在node1上:

]# vim /etc/tomcat/server.xml

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

]# systemctl restart tomcat.service

在node2上:

]# vim /etc/tomcat/server.xml

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

]# systemctl restart tomcat.service

浏览器输入:http://192.168.255.3/test/

实现会话绑定。

以上仅实现了使用httpd的jk模块及做会话绑定的演示。但基于会话粘性绑定会话实际并不使用,因为此种方法会损害负载均衡的效果,而且一旦有一台服务器掉线,则该服务器上的会话将丢失。

而实际中可用会话服务器为tomcat保存会话,而使用memcached就可做会话服务器。配置如下:

根据以上配置负载均衡的基础上,基于memcached做tomcat的会话服务器:

使用会话服务器,必须要tomcat支持,而tomcat默认不支持,需要借助第三方程序;

会话在内存中保存时它们是一个对象,tomcat是面向对象的,所以内部所有都是对象;对象都有特定结构,而网络传输都是要序列化数据后才能传输的;会话服务器只能存储序列化数据,默认对象都不是序列化的;

需要序列化工具将会话对象先转换成序列格式,才能存储在会话服务器上(memcached中);让tomcat的会话保存在memcached中,memcached当做一个会话服务器;

不同的会话服务器存储数据时虽然相同,但不同的序列化工具在将数据序列化时有可能是不同的;所以对象序列化工具也有多种,例如memcached-session-manager;跟tomcat版本密切相关,根据使用的tomcat版本来下载相对应的memcached-session-manager版本。

下载memcached-session-manager所需要到相关的类库:

javolution-5.5.1.jar

memcached-session-manager-1.8.2.jar

memcached-session-manager-tc7-1.8.2.jar

msm-javolution-serializer-1.8.2.jar

spymemcached-2.10.2.jar

把这些类库拷贝到tomcat安装时的类库目录下:

]# cp * /usr/share/tomcat/lib/

拷贝一份给node2:

]# scp -r msm/* node2:/usr/share/tomcat/lib/

停止node1和node2的tomcat

]# systemctl stop tomcat.service

实验时,就把node1和node2即当两台tomcat主机又当两台memcached会话服务器:

安装memcached:

在node1和node2:

]# yum -y install memcached

]# systemctl start memcached.service

]# ss -tnl 确保11211端口监听;

使用memcached会话服务器,对tomcat而言则是引入了新的会话管理器;

可把这个会话管理器放在Engine、Context、Host中均可,根据想要在哪个级别生效就放在哪个配置段里;

在node1:

]# vim /etc/tomcat/server.xml

...

<Context path="/test" docBase="testapp">

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

memcachedNodes="n1:172.18.11.111:11211,n2:172.18.11.112:11211"

failoverNodes="n1"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"

/>

</Context>

...

复制一份该配置文件给node2:

]# scp /etc/tomcat/server.xml node2:/etc/tomcat/

在node2:

]# vim /etc/tomcat/server.xml

只改:

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

分别在node1和node2启动tomcat:

]# systemctl start tomcat

浏览器输入:http://172.18.11.113/test/test.jsp

刷新后,调度到后端不同主机响应,但会话始终没有变;

手动使n2的memcached会话服务器掉线:

测试另一台会话服务器仍能工作:

注意:此会话信息中因为含有后端服务器的信息,所以在会话服务器切换时会话会改变;这可能因为jsp程序的问题,如果会话信息中不添加后端主机的信息,当调度到不同主机响应时,会话信息应该是不会变化的。

时间: 2024-10-13 14:32:08

利用memcached做缓存服务器,为后端tomcat服务器做会话保持,利用httpd的jk模块模块做负载均衡的相关文章

阿里云服务器上搭建tomcat服务器

由于任务需要,而且阿里云服务器上已经有了php运行环境,而且网站已经搭建好,需要在布置一个java web网站, 由于本人菜鸟,不知道如何搭建,而且对能否搭建两个深表怀疑,百度很多资料,没有找到想要的,最终在http://blog.csdn.net/neverever01/article/details/78246337 找到所需,首先在服务器上搭建tomcat服务器,jdk+tomcat 搭建好后,但是却不能访问到tomcat欢迎页面,自己写了一个a.html放在了ROOT目录下,输入ip+端

nginx做反向代理和后端web服务器之间的交互

1.Nginx是什么? Nginx就是反向代理服务器. 首先我们先来看看什么是代理服务器,代理服务器一般是指局域网内部的机器通过代理服务发送请求到互联网上的服务器,代理服务器一般作用于客户端.比如GoAgent,翻墙神器. 一个完整的代理请求过程为:客户端首先与代理服务器创建连接,然后根据代理服务器所使用的代理协议,请求对目标服务器创建连接.或则获得目标服务器的指定资源.Web代理服务器是网络的中间实体.代理位于Web客户端和Web服务器之间,扮演"中间人"的角色. HTTP的代理服务

nginx反向代理tomcat集群达到负载均衡,同时使用proxy_cache做web缓存

Nginx最早是作为一款优秀的反向代理软件,以高并发下的卓越性能被越来越多的用户所用户,国内最早研究nginx的是张宴,该大牛的博客地址:http://zyan.cc/ .但是随着需求的发展,nginx的功能已经不再单单是反向代理,现在已经更倾向作为web容器. Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对

nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式

构建tomcat集群,实现前端一台nginx反代,到后端的apache服务器,由apache负责向后端的tomcat服务器进行资源调度,这样的模式比直接用nginx反代到后端主机,tomcat服务器所受到的压力会更小,服务将会更加稳定,这样的模式是经过实践检验出来的.如果nginx直接调度到后端tomcat服务器,则只支持http和https,而不支持ajp,http与https模式的设定,可以让外来客户直接访问tomcat服务器,而不需要经过我们设置好的前端nginx的端口,这样是十分不安全的

nginx做前端反代负载均衡,后端httpd+tomcat

实验内容:用nginx做前端反代负载均衡后端httpd+tomcat 实验环境:物理机win7,虚拟机centos7: node1:172.18.11.111 httpd+tomcat node2:172.18.11.112 httpd+tomcat node3:172.18.11.113 nginx反代负载均衡 说明:httpd有两种方式与tomcat通信: (1)httpd可使用http模块反代tomcat,此时tomcat使用http链接器: (2)httpd还可使用ajp模块反代tomc

Memcached数据库缓存

Memcached 一.Memcached简介 Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写,总共2000多行代码.从软件名称上看,前3个字符"Mem"就是内存的意思,而接下来的后面5个字符"cache"就是缓存的意思,最后一个字符d,是daemon的意思,代表是服务器端守护进程模式服务. Memcached服务分为服务器端和客户端两部分,其中,服务器端软件的名字形如Memcached-1.4.24.tar.gz,客户端软件的

Tomcat高级部分-使用特定模块和软件反向代理请求到后端tomcat实现负载均衡和session保持

实验目标: 1.反向代理服务器将用户请求负载均衡到后端tomcat节点: 2.配置基于nginx的负载均衡,实现会话绑定: 3.配置基于mod_jk的负载均衡,实现会话绑定: 4.基于mod_proxy实现负载均衡,实现会话绑定: 网络架构图: 网络主机规划表: 实验步骤: 前提配置: 1.tom1和tom2节点时间必须同步: 建议使用ntp协议进行: 参考博客:http://sohudrgon.blog.51cto.com/3088108/1598314 2.节点之间必须要通过主机名互相通信:

Nginx+Tomcat+Memcached负载均衡配置完整流程(多方总结,亲测可用)

Nginx+Tomcat+Memcached负载均衡配置完整流程: 前言: Nginx实现Tomcat的负载均衡和利用memcached实现session共享. 首先配置tomcat,JDK 将jdk,tomcat 放入站点/opt目录中 安装JDK cd /opt chmod 755 jdk-6u45-linux-x64-rpm.bin ./jdk-6u45-linux-x64-rpm.bin java -version      //检验版本 安装Tomcat tar -zxf apache

WEB工程与tomcat服务器的搭建

WEB工程 1.那么什么是Web呢? Web的意思是网页,我们在浏览器上看到的所有信息都被称为WEB资源. WEB资源分为静态WEB资源和动态WEB资源. 静态WEB资源:代码不变,展示的内容就不变.eg:HTML.CSS.JS.图片.视频等. 动态WEB资源:展示的内容由程序控制.eg:JSP/Servlet.ASP.PHP.Ruby.Python等. 2.两种软件架构的比较  B/S和C/S B/S是浏览器/服务器,通过浏览器与服务器交互,不需要安装其他应用程序.比如淘宝.京东等 这种架构的