`
fangyinhui
  • 浏览: 13668 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

java memcache

阅读更多
随着IT行业的发展,linux服务器在企业中应用广泛,人们对linux上的应用服务要求也越来越高,上篇搭建了nginx群集,今天我们来搭建目前用得最多的apache群集,接下来我们亲自来搭建一个属于自己的高性能web服务器,负载均衡服务器。

一、Apache+Tomcat+Session+Memcache

共享 高性能群集服务搭建,本文采用目前主流版本搭建,搭建环境及版本如下列表:
系统版本:Centos 5.3 64位系统
Nginx版本为:httpd-2.2.13.tar.bz2 
Jdk版本为:1.6.0_18_64
Tomcat版本为:Apache Tomcat/6.0.30
其他相似版本也可以!安装服务所需的包如下下载路径:本网站集成部分下载:
jdk请到以下网站下载:请选择自己系统版本的jdk。
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter【Apache、Tomcat下载地址,下载到/usr/src下】

cd  /usr/src && wget  http://blog.mgcrazy.com/download/{httpd-2.2.13.tar.bz2,apache-tomcat-6.0.30.tar.gz }

二、安装Apache
cd /usr/src && tar -jxvf httpd-2.2.13.tar.bz2 && cd httpd-2.2.13/srclib/apr &&./configure --prefix=/usr/local/apr &&make &&make install &&cd ../apr-util/ && ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr &&make&&make install && cd ../../ && ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --with-mpm=worker --enable-deflate --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache --enable-proxy --enable-proxy-ajp --enable-proxy-balancer --enable-proxy-http --enable-rewrite --enable-charset-lite --disable-ipv6 --disable-dav --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
可以直接拷贝安装apache
【注意*这里安装mod_proxy处理Tomcat jsp页面模块,安装apr、apr-util增加Tomcat处理性能,当然也可以用mod_jk的方式,如果是mod_jk的方式的话,可以参考这篇文章:
http://bbs.linuxtone.org/thread-1195-1-1.html 】

三、Tomcat安装配置:

(1)、将所需的包下载至/usr/src 目录;首先安装jdk:
chmod o+x jdk* && ./jdk* ;程序包会提示按回车键,我们根据提示安装即可,解压完毕,会在当前目录生成 jdk1.6.0_18 这个文件夹,
mkdir -p /usr/java && mv jdk1.6.0_18 /usr/java/下
vi /etc/profile 最后面加入以下语句:
export JAVA_HOME=/usr/java/jdk1.6.0_18
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
source /etc/profile //使环境变量马上生效
java –version //查看java版本,显示版本是1.6.0_18,并且是64位的证明安装成功!
【 Java HotSpot(TM) 64-Bit Server VM (build 16.0-b10, mixed mode) 】
cd /usr/src && tar xzf apache-tomcat-6.0.30.tar.gz
解压完成执行:
mv apache-tomcat-6.0.30 /usr/local/tomcat_1 && cp /usr/local/tomcat_1 /usr/local/tomcat_2 -r
【移动到/usr/local下并重命名为tomcat_1文件夹,并cp一个tomcat_2】
部署两个Tomcat群集做负载均衡用!
(2)、设置tomcat的java变量
cd /usr/local/tomcat_1/bin/ && vi setenv.sh 创建一个setenv.sh脚本文件,添加如下语句即可
JAVA_HOME=/usr/java/jdk1.6.0_18
JAVA_JRE=/usr/java/jdk1.6.0_18/jre
并且拷贝setenv.sh文件到tomcat_2/bin/下:
cp -p /usr/local/tomcat_1/bin/setenv.sh /usr/local/tomcat_2/bin 下即可!
保存退出
检查两个tomcat下bin目录的*.sh 文件是否有可执行权限,如果没有则进入到相应的目录执行 chmod o+x *.sh 即可!
给两个tomcat分别创建不同的目录如下:mkdir -p /usr/webapps/{www_1,www_2}

(3)、设置Tomcat的 server.xml文件:
【以下是我的tomcat配置文件具体内容,本想把有配置都粘贴在这里,显示有点题,所有用了两个web链接!这样一来部分解释就产生了影响。不明白的欢迎留言】
这个是完整的server.xml文件下载地址:
http://blog.mgcrazy.com/download/server.xml.tgz
tomcat_2的配置文件下载地址:
http://blog.mgcrazy.com/download/server2.xml.tgz

两个Tomcat配置的cluster里面的端口分别为4000、4001 ,必须设置成不同的端口;而且得分别设置两个jvmroute名称,一会在apache配置文件中会用到!
四、Tomcat session会话复制:
分别在两个tomcat的conf下web.xml文件里面加入如下一行即可:
修改web应用里面WEB-INF目录下的web.xml文件,加入标签,也可以加在应用的web.xml里面如下:
<distributable/>
直接加在</web-app>之前就可以了
这个是加入tomcat的session复制的,做tomcat集群必须需要这一步,否则用户的session就无法正常使用
配置完毕后,我们测试一下广播
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal1
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal2
如果不报错则能正常广播
tomcat-replication.jar 下载:http://cvs.apache.org/~fhanik/tomcat-replication.jar
如果是两台机器的话,可以用tcpdump 抓包看看!
Tomcat配置完毕,启动两个tomcat,先启动tomcat1,tomcat_1启动日志如下:
信息: Initializing Coyote HTTP/1.1 on http-8080
2011-3-18 19:56:21 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1088 ms
2011-3-18 19:56:21 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2011-3-18 19:56:21 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.18
2011-3-18 19:56:21 org.apache.catalina.ha.tcp.SimpleTcpCluster start
信息: Cluster is about to start
2011-3-18 19:56:21 org.apache.catalina.tribes.transport.ReceiverBase bind
信息: Receiver Server Socket bound to:/192.168.2.79:4000
2011-3-18 19:56:21 org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
信息: Setting cluster mcast soTimeout to 500
2011-3-18 19:56:21 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
信息: Sleeping for 1000 milliseconds to establish cluster membership, start level:4
2011-3-18 19:56:22 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
信息: Done sleeping, membership established, start level:4
2011-3-18 19:56:22 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
信息: Sleeping for 1000 milliseconds to establish cluster membership, start level:8
2011-3-18 19:56:23 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
信息: Done sleeping, membership established, start level:8
2011-3-18 19:56:23 org.apache.catalina.ha.deploy.FarmWarDeployer start
严重: FarmWarDeployer can only work as host cluster subelement!
2011-3-18 19:56:23 org.apache.catalina.ha.session.DeltaManager start
信息: Register manager to cluster element Engine with name Catalina
2011-3-18 19:56:23 org.apache.catalina.ha.session.DeltaManager start
信息: Starting clustering manager at
2011-3-18 19:56:23 org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
信息: Manager [localhost#]: skipping state transfer. No members active in cluster group.
2011-3-18 19:56:23 org.apache.catalina.ha.session.JvmRouteBinderValve start
信息: JvmRouteBinderValve started
2011-3-18 19:56:23 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2011-3-18 19:56:24 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8411
2011-3-18 19:56:24 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/42 config=null
2011-3-18 19:56:24 org.apache.catalina.startup.Catalina start
信息: Server startup in 2676 ms
Tomcat_2的日志如下:
000,{-64, -88, 2, 79},4000, alive=86901,id={78 42 25 -19 -102 3 64 10 -76 93 69 -43 45 76 95 -112 }, payload={}, command={}, domain={}, ]. This operation will timeout if no session state has been received within 60 seconds.
2011-3-18 19:57:48 org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor report
信息: ThroughputInterceptor Report[
Tx Msg:1 messages
Sent:0.00 MB (total)
Sent:0.00 MB (application)
Time:0.01 seconds
Tx Speed:0.04 MB/sec (total)
TxSpeed:0.04 MB/sec (application)
Error Msg:0
Rx Msg:1 messages
Rx Speed:0.00 MB/sec (since 1st msg)
Received:0.00 MB]
2011-3-18 19:57:48 org.apache.catalina.ha.session.DeltaManager waitForSendAllSessions
信息: Manager [localhost#]; session state send at 11-3-18 下午7:57 received in 125 ms.
2011-3-18 19:57:48 org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor report
信息: ThroughputInterceptor Report[
Tx Msg:2 messages
Sent:0.00 MB (total)
Sent:0.00 MB (application)
Time:0.05 seconds
Tx Speed:0.02 MB/sec (total)
TxSpeed:0.02 MB/sec (application)
Error Msg:0
Rx Msg:2 messages
Rx Speed:0.00 MB/sec (since 1st msg)
Received:0.00 MB]
2011-3-18 19:57:49 org.apache.catalina.ha.session.JvmRouteBinderValve start
信息: JvmRouteBinderValve started
2011-3-18 19:57:49 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8081
2011-3-18 19:57:49 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8412
2011-3-18 19:57:49 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/34 config=null
2011-3-18 19:57:49 org.apache.catalina.startup.Catalina start
信息: Server startup in 2962 ms
如果有报错或者请查看原因!
skipping state transfer. No members active in cluster group.”
mcastBindAddress 没有添加或添加得不对
【如上报错,如果启动其中一个报的错,而且已经修改了mcastBindAddress,此时还是有报错,我们可以不用管,在启动另一个 tomcat看看,第二个tomcat没有No members active in cluster group,则表示两个tomcat通信正常。】

五、配置Apache+Session

【新建vhosts.conf proxy.conf 文件,并在httpd.conf文件末行添加:
Include conf/vhosts.conf
Include conf/proxy.conf
如上两行即可!
把以下内容写入到vhosts.conf里面:
<VirtualHost *:80>
    ServerAdmin wgkgood@163.com
    DocumentRoot "/usr/webapps/www”
    ServerName  192.168.2.79
       <Directory "/usr/webapps/www ">
       AllowOverride None
       Options None
       Order allow,deny
       Allow from all
    </Directory>
    RewriteEngine On
    ProxyPreserveHost On
    RewriteRule ^$ balancer://wwwCluster/ [P,L,NC]
RewriteRule ^/(.*)$ balancer://wwwCluster/$1 [P,L,NC]
ProxyPass / balancer://wwwCluster/ stickysession=JSESSIONID|jsessionid nofailover=On  
ProxyPassReverse / balancer://wwwCluster/

<Proxy balancer://wwwCluster>
BalancerMember ajp://localhost:8411 loadfactor=1 route=tomcat1 smax=5 max=20 ttl=120 retry=300 timeout=15  
BalancerMember ajp://localhost:8412 loadfactor=1 route=tomcat2 smax=5 max=20 ttl=120 retry=300 timeout=15
</Proxy>  
</VirtualHost>
【注意:* /usr/webapps/www 内容其实跟/usr/webapps/www_1是一样的;最后红色部分是session复制部分。绿色字体部分是处理tomcat请求。这段代码必须放在虚拟主机里面,放在proxy.conf里面的话,session绑定不会生效。所以要注释掉httpd.conf里面Include conf/proxy.conf这个配置。】

六、配置Session共享Memcache

下载如下memcache套件包:本站点集成下载:
http://blog.mgcrazy.com/download/session-memcache/javolution-5.4.3.1.jar
http://blog.mgcrazy.com/download/session-memcache/memcached-2.5.jar
http://blog.mgcrazy.com/download/session-memcache/memcached-session-manager-1.3.0.jar
http://blog.mgcrazy.com/download/session-memcache/msm-javolution-serializer-1.3.0.jar
http://blog.mgcrazy.com/download/session-memcache/msm-javolution-serializer-cglib-1.3.0.jar
http://blog.mgcrazy.com/download/session-memcache/msm-javolution-serializer-jodatime-1.3.0.jar

以上包请到新地址下载:
http://chinaapp.sinaapp.com//download/memcached-session/memcached-session-manager.tar.gz
解压即可!
下载后,分别放在两个tomcat的lib下:【/usr/local/tomcat_1/lib下即可】
然后分别两个tomcat配置文件:server.xml最后</host>前一行里面添加如下代码:
<Manager className=”de.javakaffee.web.msm.MemcachedBackupSessionManager”   
        memcachedNodes=”n1:192.168.0.84:11211″   
        requestUriIgnorePattern=”.*\.(png|gif|jpg|css|js)$”   
        sessionBackupAsync=”false”   
        sessionBackupTimeout=”100″   
        transcoderFactoryClass=”de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory”   
        copyCollectionsForSerialization=”false”  />
如果有多个memcache缓存服务器,可以在上面192.168.0.84:11211后已空格分开!例如:
n1:192.168.0.84:11211  n2:192.168.0.84:11213  即可!

tomcat_1的发布目录index.jsp内容为:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
%>
http://blog.mgcrazy.com

<%out.print(request.getSession()) ;%>

<%out.println(request.getHeader("Cookie")); %>
tomcat_2的发布目录index.jsp内容为:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
%>
http://wgkgood.gicp.net

<%out.print(request.getSession()) ;%>

<%out.println(request.getHeader("Cookie")); %>


所以配置完毕,重启tomcat和apache即可!
最后测试!在同一个ie浏览器窗口下 ctrl+f5刷新,都是同一个tomcat内容,它不会跳转到另一tomcat
http://192.168.2.79 结果如下:
http://wgkgood.gicp.net
org.apache.catalina.session.StandardSessionFacade@2d7aece8
JSESSIONID=FEB19E24719ED666D1C9C50A7A09A2BA.tomcat2
另一个firefox浏览器窗口为:
http://blog.mgcrazy.com
org.apache.catalina.session.StandardSessionFacade@259e215b
rtime=0; ltime=1298014951125; cnzz_eid=85744900-1298010049-; Hm_lvt_0e74098a87be059a433e5a74f1b5fecf=1298014951312; Hm_lvt_b7c035fd79b2c378053e06c86493de76=1300439158373; JSESSIONID=B2574ABB491F50F37162479BD3FE761C.tomcat1
无论你怎么刷新同一个窗口下都不会变!

最后,本环境是在一台机器,也可以是多台机器,只需要修改负载的ip即可。
apache+tomcat+session不能实现故障转移,可以采用nginx+tomcat+session实现故障转移,或者LVS+后端apache均衡;另外去掉session绑定的话,apache+tomcat负载均衡、并且可以带故障转移。

本文参考:
http://blog.mgcrazy.com/thread-976-1.html

http://bbs.linuxtone.org/thread-1195-1-1.html

http://wenku.baidu.com/view/9be81bd376a20029bd642d6f.html
本文出自 “【烟雨楼台】” 博客,请务必保留此出处http://wgkgood.blog.51cto.com/1192594/546223

分享到:
评论

相关推荐

    Java Memcache JDK1.4

    Java Memcache 是一个高效、广泛使用的分布式内存缓存系统,专为加速动态Web应用程序而设计。在JDK 1.4环境下使用Java Memcache,意味着我们需要一个兼容此版本JVM的客户端库,以便与Memcache服务器进行通信。在这个...

    java memcache使用例子

    本篇文章将围绕"Java Memcache使用例子"这一主题,详细介绍如何在Java中使用Memcached。 首先,确保您已经在本地正确安装了Memcached。通常,Memcached可以在Linux、macOS和Windows等操作系统上运行。你可以通过...

    Java memcache缓存实现for Windows.pdf

    Java Memcache 缓存实现是将高性能的分布式内存对象缓存系统Memcache应用于Windows环境中的技术。Memcache是一个用于存储各种类型数据的高速缓存系统,包括但不限于图像、视频、文件和数据库查询结果,它的核心原理...

    java memcache 使用

    Java Memcached 使用详解 Memcached 是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提升数据访问速度。在Java中,我们可以使用各种客户端库来与Memcached进行交互,例如...

    Java开发中的Memcache原理及实现

    Java开发中的Memcached原理及实现主要涉及分布式缓存系统、内存管理和网络通信等多个技术领域。Memcached是一款高性能、分布式内存对象缓存系统,用于减轻数据库负载,提高网站或应用程序的响应速度。在Java环境中,...

    memcache实现java客户端

    在Java开发中,我们通常使用Java客户端来与Memcache服务器进行交互。以下是一些关于如何在Java中实现Memcache客户端的重要知识点: 1. **Java Memcache客户端库**:在Java中,常用的Memcache客户端库有Xmemcached和...

    memCache源码java客户端

    **memCache源码分析——Java客户端** memCache是一款高性能、分布式的内存对象缓存系统,常用于减轻数据库的负载,提升应用性能。它的主要特点是基于内存存储,操作速度快,无持久化机制,适用于缓存非关键数据。在...

    java版memcache缓存管理与开发

    ### Java版Memcache缓存管理与开发 #### Memcache简介及其在高流量网站中的作用 在高流量网站中,为了缓解数据库的压力并提高网站响应速度,通常会采用Memcache作为缓存解决方案。Memcache是一种高性能、分布式...

    memcache学习文档 for java demo

    Memcache 学习文档 for Java Demo Memcache 是一套分布式的高速缓存系统,由 LiveJournal 的 Brad Fitzpatrick 开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站...

    Java memcache缓存实现for Windows.docx

    3. **Memcache与Tomcat、Nginx结合** 在构建Java Web应用的集群和负载均衡时,可以使用Nginx作为反向代理服务器,结合Tomcat运行多个实例。Nginx配置中,`worker_connections`设置每个工作进程的最大连接数,`proxy...

    memcache所需要的jar包

    "memcache所需要的jar包"这个标题暗示我们将讨论与Java环境下的Memcache客户端库相关的知识点。 1. **Memcache的基本概念** - Memcache是一个高性能、分布式的内存对象缓存系统,它通过在内存中存储数据来减少对...

    Memcache Session Manager Tomcat8.5.6

    6. **Java Memcache客户端**: 集成Memcache到Java应用中通常需要一个客户端库,如spymemcached或Xmemcached,这些库提供了与Memcache服务器通信的API。 7. **jar包**: Java Archive (JAR) 文件是Java平台上的归档...

    memcached client for java

    谷歌对于memcached提供给Java的客户端有spymemcached、xmemcached、memcache-client-forjava等多种形式,但memcache-client-forjava是使用最多、最稳定的。里边的文件和文档(有中文文档)都是从官网下载的,里边的...

    java调用memcache简单实例

    介绍:memcache缓存的一个项目。只是简单的增删盖查。 使用前,应该先安装memcache。如果是window上就不需要安装...这里又加入了很多spring的jar包,是应为TestSpringMemcache.java中把memcache整合到spring中。

    java遍历Memcache所有key的工具类

    JAVA遍历Memcache缓存中所有的KEY的方法,可以直接引入使用。

    java实现memcache服务器的示例代码

    Java 实现 Memcache 服务器的示例代码 Memcache 是一个高性能的分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的 hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等...

    Java连接memcache简单设值取值示例所需Jar.rar

    commons-pool-1.5.6.jar java_memcached-release_2.6.6.jar log4j-1.2.16.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar

    java的memcache的服务器以及引用jar包河测试案例

    这个压缩包中包含的"memcache.jar"可能就是其中一个客户端的库文件。为了在项目中引用这个库,你需要将jar包添加到你的项目类路径中。如果你使用的是Maven,可以在pom.xml文件中添加对应的依赖。 接下来,我们来看...

    java 遍历 memcache key 源码

    java 遍历 memcache key 源码 方法

    java遍历Memcache详细代码

    Java遍历Memcache是一种在Java应用中访问和操作内存缓存系统Memcache的方法。Memcache是一种分布式、高性能的缓存系统,广泛应用于减轻数据库压力,提高Web应用的响应速度。以下是一份详细的Java代码示例,展示如何...

Global site tag (gtag.js) - Google Analytics