`
luckymjl2
  • 浏览: 16266 次
社区版块
存档分类
最新评论

apache负载均衡+tomcat集群+Memcached-session-manager共享session

阅读更多

转载请注明出处:

http://luckymjl2.iteye.com/blog/1932060

1Linux64位系统下安装apache

安装apache需要先安装aprapr-util支持

1.1下载apache

地址:http://httpd.apache.org/download.cgi

版本:2.2.25

环境:Unix

 

1.2安装aprapr-util

安装apr

 

tar -xvfz httpd-2.2.25.tar.gz
# cd httpd-2.2.25
1.编译和安装 apr
cd srclib/apr
./configure  --libdir=/usr/lib64   --prefix=/usr/local/apr  
make
make install

 

安装apr-util

cd ../apr-util
./configure --libdir=/usr/lib64 --prefix=/usr/local/apr-util --with-apr=/usr/local/apr  
make  (如果这一步报错,就先执行下面的再执行本步)
make install
# vi  Makefile

APRUTIL_LIBS = -lsqlite3 /usr/lib/libexpat.la /root/tar/httpd-2.2.25/srclib/apr/libapr-1.la -luuid -lrt -lcrypt -lpthread -ldl
改为
APRUTIL_LIBS = -lsqlite3 /usr/lib64/libexpat.la /root/tar/httpd-2.2.25/srclib/apr/libapr-1.la -luuid -lrt -lcrypt -lpthread -ldl

1.3安装apache2.2.25

./configure LDFLAGS="-L/usr/lib64 -L/lib64"--prefix=/usr/local/httpd-2.2.25 --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

 

make
make install

2、安装Tomcat

21下载Tomcat

地址:http://tomcat.apache.org/download-70.cgi

版本:7.0.42

环境:Unix

 

22解压tomcat

tar -xvfz httpd-2.2.25.tar.gz

3、安装memcache

安装mencached之前需要先安装libevent支持

3、1下载libevent

官方:http://libevent.org/

地址:http://www.monkey.org/~provos/libevent-1.4.9-stable.tar.gz

版本:1.4.9

环境:Unix

3.1.1安装依赖包libevent

tar -xvzf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable
./configure -prefix=/usr
make & make install

 

 

32下载memcache

地址:http://code.google.com/p/memcached/downloads/list

版本:1.4.15

环境:Unix

3.2.1安装memcache

tar xvzf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure -with-libevent=/usr

make & make install

 

3.2.2启动memcache

/usr/local/bin/memcached -d -m 64 -u root

 

memcached命令参数

-p <num>      监听的TCP端口(默认: 11211)

-U <num>      监听的UDP端口(默认: 11211, 0表示不监听)

-s <file>     用于监听的UNIX套接字路径(禁用网络支持)

-a <mask>     UNIX套接字访问掩码,八进制数字(默认:0700

-l <ip_addr>  监听的IP地址。(默认:INADDR_ANY,所有地址)

-d            作为守护进程来运行。

-r            最大核心文件限制。

-u <username> 设定进程所属用户。(只有root用户可以使用这个参数)

-m <num>      单个数据项的最大可用内存,以MB为单位。(默认:64MB

-M            内存用光时报错。(不会删除数据)

-c <num>      最大并发连接数。(默认:1024

-k            锁定所有内存页。注意你可以锁定的内存上限。

              试图分配更多内存会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。

              (不是前面的 -u <username> 参数;在sh下,使用命令"ulimit -S -l NUM_KB"来设置。)

-v            提示信息(在事件循环中打印错误/警告信息。)

-vv           详细信息(还打印客户端命令/响应)

-vvv          超详细信息(还打印内部状态的变化)

-h            打印这个帮助信息并退出。

-i            打印memcachedlibevent的许可。

-P <file>     保存进程ID到指定文件,只有在使用 -d 选项的时候才有意义。

-f <factor>   块大小增长因子。(默认:1.25

-n <bytes>    分配给key+value+flags的最小空间(默认:48

-L            尝试使用大内存页(如果可用的话)。提高内存页尺寸可以减少"页表缓冲TLB"丢失次数,提高运行效率。

              为了从操作系统获得大内存页,memcached会把全部数据项分配到一个大区块。

-D <char>     使用 <char> 作为前缀和ID的分隔符。

              这个用于按前缀获得状态报告。默认是":"(冒号)。

              如果指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命"stats detail on"来开启。

-t <num>      使用的线程数(默认:4

-R            每个连接可处理的最大请求数。

-C            禁用CAS

-b            设置后台日志队列的长度(默认:1024

-B            绑定协议 可能值:ascii,binary,auto(默认)

-I            重写每个数据页尺寸。调整数据项最大尺寸。

 

 

==================漂亮的分隔线,到此程序安装完毕================

转载请注明出处:

 

http://luckymjl2.iteye.com/blog/1932060

4Tomcat集群部署

Tomcat集群采用session共享方式,将session写入memcached-session-manger统一管理。提高性能。

4.1 jar包下载

4.1.1 memcached-session-manager

memcached-session-manager-${version}.jar

地址:http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/1.6.5/

版本:1.6.5

4.1.2 tomcat7下支持包

memcached-session-manager-tc7-${version}.jar 

地址:http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/1.6.5/版本:1.6.5

4.1.3  spymemcached

spymemcached-${version}.jar

地址:http://code.google.com/p/spymemcached/downloads/list

版本:2.9.1

 

4.1.4 Couchbase-Java-Client客户端

 

地址:http://packages.couchbase.com/clients/java/1.1.9/Couchbase-Java-Client-1.1.9.zip

版本:1.1.9

说明:这个本来是Couchbase的客户端程序,我不知道为什么一定需要,但是报错提示就是缺少客户端jar包,放进去就好了。

 

以上jar包全部放入$CATALINA_HOME/lib/目录,也就是tomcatlib目录

4.2 tomcatsession写入memcache

vi /opt/tomcat-7.0.42-jvm1/conf/context.xml

<Context></Context>中加入

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

    memcachedNodes="n1:192.168.10.110:11211"

    sticky="false"

    sessionBackupAsync="false"

    lockingMode="none"

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

    transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"/>

 

参数说明:

className (required)

类名:de.javakaffee.web.msm.MemcachedBackupSessionManager

 

memcachedNodes (required)

memcached节点:此属性应该包含所有运行的memcached节点或者membase bucketuri地址,每一个memcached节点的属性定义格式为<id>:<host>:<port>,多个节点定义直接使用空格或者逗号分隔,形如:memcachedNodes="n1:app01:11211,n2:app02:11211",如果只有单个的memcached节点,则<id>是可选项,只需配置<host>:<port>即可,形如:memcachedNodes="localhost:11211"

如果我们配置的是membase,那么从1.6.0版本开始,我们可以配置指定一个或者多个membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/poolsBucket 名称和密码通过属性username,password来定义。membase buckets连接需要遵循memcached协议,传输数据通过二进制流方式。

 

failoverNodes (optional, must not be used for non-sticky sessions)

故障转移节点:可选项,对非黏性session不可用,属性必须包含memcached节点集群的所有ids。节点id之间用空格或者逗号分隔。

 

username (since 1.6.0, optional)

1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证。

 

password (since 1.6.0, optional)

1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。

 

memcachedProtocol (since 1.3, optional, default text)

定义memcached协议,默认使用text文本

 

sticky (since 1.4.0, optional, default true)

定义session方式为黏性或非黏性,默认为true

 

lockingMode (since 1.4.0, optional, for non-sticky sessions only, default none)

只有非黏性session才使用,默认值为none

none: 从不对session进行锁定

all: session将一直被锁定,知道请求结束

auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定

uriPattern:<regexp>: 通过正则表达式的方式来对请求uri以及查询字符串进行匹配,只有匹配上的才会被锁定。

 

requestUriIgnorePattern (optional)

 

sessionBackupAsync (optional, default true)

 

backupThreadCount (since 1.3, optional, default number-of-cpu-cores)

 

sessionBackupTimeout (optional, default 100)

 

operationTimeout (since 1.6.0, optional, default 1000)

 

sessionAttributeFilter (since 1.5.0, optional)

 

transcoderFactoryClass(since1.1,optional,

default de.javakaffee.web.msm.JavaSerializationTranscoderFactory)

序列化接口实现:

Java serialization: de.javakaffee.web.msm.JavaSerializationTranscoderFactory

Kryo based serialization: de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory

Javolution based

 serialization: de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory

XStream based serialization: 

de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory

 

copyCollectionsForSerialization (since 1.1, optional, default false)

 

customConverter (since 1.2, optional)

 

enableStatistics (since 1.2, optional, default true)

 

enabled (since 1.4.0, optional, default true)

4.3 Tomcat集群配置

vi /opt/tomcat-7.0.42-jvm1/conf/service.xml

 

声明在集群中的名称jvmRoute

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat107-1">

 

非粘性session配置,该配置好处在于如果一台tomcat挂掉,集群中的别的节点可以接管该机器session

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">

<Manager className="org.apache.catalina.ha.session.DeltaManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"/>

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.4"

port="45564"

frequency="500"

dropTime="3000"/>

 

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4000"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

 

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

                               

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

</Channel>

 

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=""/>

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

 

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                    tempDir="/tmp/war-temp/"

                    deployDir="/tmp/war-deploy/"

                    watchDir="/tmp/war-listen/"

                    watchEnabled="false"/>

 

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

 

 

复制一份tomcat到本地,改名tomcat-7.0.42-jvm2修改service.xml 以下信息

 

<Server port="8005" shutdown="SHUTDOWN">

改为:

<Server port="8006" shutdown="SHUTDOWN">

 

 

<Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443"

               enableLookups="false"

               acceptCount="500" />

改为: 

<Connector port="8081" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

enableLookups="false"

acceptCount="500" />

 

 

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4000"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

改为:

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4001"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

 

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat107-1">

改为:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat107-1">

 

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

改为:

<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

4.3.1集群配置测试

Tomcatwebapp下创建test文件夹,文件夹下创建test.jspjsp中写入以下信息:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%

response.setHeader("Cache-Control","no-store");

response.setHeader("Pragrma","no-cache");

response.setDateHeader("Expires",0);

%>

<html>

<head><title></title></head>

<body>

<%

String s = session.getId();

%>

</br>

<%=s%>

</body>

</html>

 

打开浏览器输入:

http://192.168.10.107:8080/test/test.jsp

获得一个session格式为B7BDC67CA8EC738771BE20D162CCA9B8-n1.tomcat107-1

改变地址为http://192.168.10.107:8081/test/test.jsp

Session不变,当前两个tonmcat共享相同session,说明配置成功。

 

5apache负载均衡配置

vi /usr/local/apache2/conf/httpd.conf 

 

5.1. Apache在启动时自动加载代理(proxy)模块。 

去掉以下文本前的注释符(#)

LoadModule proxy_module modules/mod_proxy.so    

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so    

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so    

LoadModule proxy_connect_module modules/mod_proxy_connect.so    

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so    

LoadModule proxy_http_module modules/mod_proxy_http.so 

5.2 代理负载配置

<IfModule ssl_module>

SSLRandomSeed startup builtin

SSLRandomSeed connect builtin

</IfModule>

 

ProxyRequests Off

#lbmethod=bytraffic(byrequests) stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3

ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3

ProxyPassReverse / balancer://cluster/ 

 

<proxy balancer://cluster>

 

BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=tomcat107-1

 

BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=tomcat107-2

 

</proxy>

分享到:
评论

相关推荐

    tomcat9+tomcat-cluster-redis-session-manager_4.0.zip

    Tomcat Cluster Redis Session Manager是一个插件,它允许Tomcat集群中的各个节点共享和同步Session信息,确保用户在集群中的任何服务器上都能保持登录状态。 集成Tomcat集群和Redis Session Manager的过程大致如下...

    Nginx+Tomcat+Memcached-Session-Manager集群Session共享

    在本篇文章中,我们将深入探讨如何使用Nginx、Tomcat和Memcached-Session-Manager(MSM)来构建一个集群环境,并实现Session共享。这涉及到集群搭建、分布式应用以及缓存管理等多个方面的IT知识。下面将详细展开这些...

    apache-tomcat-7.0.47-memcached-各种序列化策略-session共享

    以上就是关于"apache-tomcat-7.0.47-memcached-各种序列化策略-session共享"的知识点,涵盖了Tomcat集群、Memcached的使用以及多种序列化策略的应用。通过深入理解和实践这些技术,你可以构建出高可用、高性能的Web...

    Memcached-session-manager所需最新jar包-tomcat7-kryo序列

    3. **Memcached-session-manager**:这是一个开源项目,用于在Apache Tomcat应用服务器中集成Memcached,以便将用户的会话数据存储在Memcached集群中,以实现高可用性和可扩展性。它提供了一种替代默认的基于文件或...

    Windows + Nginx + Memcached + Tomcat 集群 session共享

    本知识点聚焦于如何在Windows环境下,利用Nginx作为反向代理,Memcached进行session共享,以及Tomcat作为Java应用服务器来搭建这样一个集群。这个配置确保了用户在集群中的任何一台服务器上的操作都能被其他服务器...

    apache+tomcat+memcached

    - 在Apache+Tomcat集群中,Memcached Session Manager (MSM)负责在多个Tomcat实例之间同步和存储Session数据,实现高可用性。 4. 粘性与非粘性Session - 粘性Session:用户的请求被定向到特定的Tomcat实例,如果...

    Nginx+Tomcat+Memcached实现tomcat集群和session共享

    在构建高性能、高可用性的Web应用系统时,通常会采用Nginx作为反向代理和负载均衡器,Tomcat作为应用服务器处理Java Servlet和JSP,而Memcached用于存储和共享Session数据。这个配置可以有效地分发用户请求,提高...

    memcached+tomcat7共享session所需要的jar包

    标题中的“memcached+tomcat7共享session所需要的jar包”是指使用Memcached作为分布式缓存系统,实现Tomcat7服务器间的Session共享。这通常是为了在集群环境中解决Session复制或粘滞会话的问题,提高Web应用的可扩展...

    Nginx + Memcached + Tomcat 集群负载均衡

    标题 "Nginx + ...以上知识点涵盖了Nginx、Memcached和Tomcat集群负载均衡的基本原理和实践,对于构建高可用、高性能的Web服务具有重要意义。理解并熟练掌握这些技术,对于提升大型Web应用的运维能力至关重要。

    windows下Nginx+memcached+Tomcat集群配置实现session共享与负载均衡

    【Nginx、memcached和Tomcat集群配置实现session共享与负载均衡】 在Windows环境下,构建一个基于Nginx的高可用性Web集群,通常包括Nginx作为反向代理和负载均衡器,memcached用于session共享,以及多个Tomcat实例...

    Nginx+Memcache+Tomcat集群(session共享)

    【Nginx+Memcache+Tomcat集群(session共享)】是一种常见的高可用性和负载均衡解决方案,主要用于提升Web应用的性能和可扩展性。这个配置利用Nginx作为反向代理和负载均衡器,Memcache作为分布式session存储,而...

    Nginx+tomcat+memcached集群session共享(win7下)所用到

    本教程将深入探讨如何在Windows 7环境下,利用Nginx作为反向代理,Tomcat作为应用服务器,以及Memcached作为分布式缓存来实现session共享。下面将详细阐述每个组件的作用以及配置过程。 1. **Nginx**: Nginx是一...

    Nginx+Tomcat+Memcached集群

    在Nginx+Tomcat集群中,Memcached用于实现Session共享,避免用户在集群中的不同Tomcat实例间切换时丢失Session数据。当用户登录后,其Session信息会被存储在Memcached中,然后由Nginx确保请求被转发到具有该Session...

    tomcat6+session+memcached

    【标题】"tomcat6+session+memcached" 涉及的知识点主要集中在Web服务器Tomcat6的配置与使用,以及如何通过Memcached实现Session的共享存储。 【描述】"jdk7+tomcat6+memcached。依赖包" 提示了这个环境是基于Java ...

    nginx+tomcat+memcached实现session共享

    标题 "nginx+tomcat+memcached实现session共享" 涉及的是在分布式环境中如何通过组合使用这三种技术来管理用户的会话数据。这个话题对于构建高可用、高性能的Web应用系统至关重要,尤其是在大型网站和企业级应用中。...

    Nginx+tomcat负载均衡集群session复制 windos

    本文将详细介绍如何在Windows环境下,利用Nginx作为反向代理服务器,与Tomcat集群配合实现负载均衡,并进行session复制,确保用户会话在不同服务器之间的一致性。 首先,Nginx是一款轻量级、高性能的HTTP和反向代理...

    tomcat集群实现session复制

    在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...

    nginx tomcat memcached 集群 session共享

    Nginx作为反向代理服务器,负责负载均衡,Tomcat作为应用服务器运行Java Web应用程序,而Memcached则作为分布式内存缓存系统,用于存储和共享session数据。 1. **Nginx**:Nginx是一个高性能的HTTP和反向代理服务器...

    tomcat+memcached共享session所需jar包

    2. **Tomcat Session Manager**:Tomcat需要配置一个支持Memcached的SessionManager,如MemcachedSessionManager,它替换默认的Manager,负责将Session操作(如创建、更新、移除)映射到Memcached操作。 3. **配置...

    tomcat7集群session共享memcache依赖包1.8.3

    在实际部署中,可能还需要考虑一些其他因素,例如安全性(加密Session数据)、负载均衡策略(如何决定用户Session在哪个节点上创建)、以及性能优化(例如,调整Memcached的缓存策略)。同时,确保Memcached服务器的...

Global site tag (gtag.js) - Google Analytics