环境CentOS 6.5,Nginx 1.7.2 ,Memcached 1.4.20
一.导出lib
1.利用maven,构建并导出基于kryo-serializer的lib,可以将下面的依赖版本和配置如下
<properties> <memcached-session-manager.version>1.8.2</memcached-session-manager.version> <spymemcached.version>2.11.4</spymemcached.version> <kryo-serializers.version>0.11</kryo-serializers.version> <kryo.version>1.04</kryo.version> <minlog.version>1.2</minlog.version> <reflectasm.version>1.01</reflectasm.version> <asm.version>3.2</asm.version> </properties> <dependencies> <!-- memcached-session-manager --> <dependency> <groupId>de.javakaffee.msm</groupId> <artifactId>memcached-session-manager</artifactId> <version>${memcached-session-manager.version}</version> <exclusions> <exclusion> <groupId>net.spy</groupId> <artifactId>spymemcached</artifactId> </exclusion> <exclusion> <groupId>com.couchbase.client</groupId> <artifactId>couchbase-client</artifactId> </exclusion> <exclusion> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> </exclusion> <exclusion> <groupId>com.google.code.findbugs</groupId> <artifactId>annotations</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>de.javakaffee.msm</groupId> <artifactId>memcached-session-manager-tc7</artifactId> <version>${memcached-session-manager.version}</version> <exclusions> <exclusion> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> </exclusion> <exclusion> <groupId>com.google.code.findbugs</groupId> <artifactId>annotations</artifactId> </exclusion> </exclusions> </dependency> <!-- spymemcached --> <dependency> <groupId>net.spy</groupId> <artifactId>spymemcached</artifactId> <version>${spymemcached.version}</version> </dependency> <!-- kryo-serializer --> <dependency> <groupId>de.javakaffee.msm</groupId> <artifactId>msm-kryo-serializer</artifactId> <version>${memcached-session-manager.version}</version> <exclusions> <exclusion> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> </exclusion> <exclusion> <groupId>com.google.code.findbugs</groupId> <artifactId>annotations</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>de.javakaffee</groupId> <artifactId>kryo-serializers</artifactId> <version>${kryo-serializers.version}</version> </dependency> <dependency> <groupId>com.googlecode</groupId> <artifactId>kryo</artifactId> <version>${kryo.version}</version> </dependency> <dependency> <groupId>com.googlecode</groupId> <artifactId>minlog</artifactId> <version>${minlog.version}</version> </dependency> <dependency> <groupId>com.googlecode</groupId> <artifactId>reflectasm</artifactId> <version>${reflectasm.version}</version> </dependency> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>${asm.version}</version> </dependency> </dependencies>
2.执行下面的命令下载lib
mvn dependency:copy-dependencies -DoutputDirectory=./target/lib
lib就会被自动下载到/target/lib目录下,内容如下图。
二.配置tomcat
配置方式主要见https://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
1.拷贝LIB
将上面导出的lib拷贝到 $CATALINA_HOME/lib/ 目录下
2.配置$CATALINA_HOME/conf/context.xml
以下两种配置选择其中一种,推荐第二种
第一种: sticky sessions + kryo
<Context> ... <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context>
注意:
(1) sticky模式时,配置jvmroute参数,每台tomcat的jvmroute参数都不能一样 (测试这种配置方式不适用于多台Servlet容器,或适用于反向代理服务器可以把相同来源的请求映射到同一台容器上的情况下,不推荐;另网上看到该配置修改transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" 未验证)
$CATALINA_HOME/conf/server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
(2) 必须启动两个Memcached实例,比如
/usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 128 -P /tmp/memcached1.pid /usr/local/memcached/bin/memcached -d -m 256 -u root -p 11212 -c 128 -P /tmp/memcached2.pid
第二种:non-sticky sessions + kryo
<Context> ... <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211" sticky="false" sessionBackupAsync="false" lockingMode="uriPattern:/path1|/path2" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context>
3.可选配置$CATALINA_HOME/conf/logging.properties
如果需要调试日志,可以在logging.properties中添加如下内容
de.javakaffee.web.msm.level=FINE
4. 多台Tomcat配置 需要注意下面内容
1) 修改http访问端口(默认为8080端口)
2) 修改Shutdown端口(默认为8005端口)
3) 修改AJP 访问端口(默认为8009端口)
4) 修改http访问(默认 Connector port="8080"),添加 URIEncoding="UTF-8"
三.配置Nginx
Nginx安装方式在这:http://sgq0085.iteye.com/blog/2089266
修改配置文件 /usr/local/nginx/conf/nginx.conf
下面是Nginx 1.7.2完整事例
#user nobody; user gqshao; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { // windows系统下不要 use epoll use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; gzip on; gzip_types text/javascript text/plain text/css application/xml application/x-javascript; gzip_disable "MSIE [1-6]."; # 配置tomcat服务器 upstream web_server { #ip_hash; server 192.168.158.131:8080 max_fails=3 fail_timeout=30s; server 192.168.158.131:8081 max_fails=3 fail_timeout=30s; server 192.168.158.131:8082 max_fails=3 fail_timeout=30s; } server { # 侦听192.168.158.131的80端口 listen 80; server_name 192.168.158.131; #charset koi8-r; charset utf-8; access_log logs/host.access.log main; location / { proxy_pass http://web_server ; proxy_redirect off ; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
四.启动和停止
启动
# 启动 memcached sudo /usr/local/memcached/bin/memcached -d -m 256 -u gqshao -p 11211 -c 128 -P /tmp/memcached1.pid sudo /usr/local/memcached/bin/memcached -d -m 256 -u gqshao -p 11212 -c 128 -P /tmp/memcached2.pid # 启动 Tomcat ./startup.sh # 启动 Nginx sudo /usr/local/nginx/sbin/nginx
相关推荐
总结来说,`memcached-session-manager`是一个用于在Tomcat环境中实现基于Memcached的session共享的工具,版本1.9.6已被证实兼容Tomcat 7和8,并且能有效支持负载均衡。它利用Kryo等高效序列化库,优化了session在...
需要注意的是,使用`memcached-session-manager`可能会带来额外的网络开销,因此,在大型分布式环境中,最好对Memcached集群进行合理规划和负载均衡,以确保性能和可用性。 总之,`memcached-session-manager`为...
3. **Memcached-Session-Manager**:这是用于Tomcat的第三方模块,使得可以将用户的session数据存储在memcached服务器上,实现session的分布式管理,适合多服务器环境,提供高可用性和负载均衡。 4. **Java 1.8**:...
Memcached-session-manager是Java应用程序,用于在Tomcat或其他基于Servlet的容器中管理会话,并将其存储在Memcached中,以实现会话的分布式和高可用性。 首先,我们需要理解会话管理在Web应用中的重要性。会话允许...
3. **负载均衡**:MSM支持多种负载均衡策略,如轮询、最少连接等,确保session在多个服务器之间均匀分布,提高系统整体性能。 4. **故障转移**:如果某个Memcached服务器宕机,MSM会检测到这一情况,并自动将...
传统的基于内存的会话管理在服务器扩展时容易导致数据不一致或丢失,而 Memcached_Session_Manager 解决了这个问题。 **Memcached** 是一个高性能、分布式内存对象缓存系统,它可以存储任意的数据类型,包括字符串...
一致性哈希可以确保Session在负载均衡下的分布更均匀。通过设置`hashAlgorithm`属性,如`hashAlgorithm="CRC32"`,可实现一致性哈希策略。 4. **会话复制策略** 可以通过设置`sessionBackupAsync`属性来控制...
"tomcat9+tomcat-cluster-redis-session-manager_4.0.zip"这个文件组合涉及到的是在Tomcat 9上实现负载均衡以及使用Redis作为Session管理器的高级配置。 首先,Tomcat 9是Apache Tomcat服务器的一个版本,它是Java ...
在本篇文章中,我们将深入探讨如何使用Nginx、Tomcat和Memcached-Session-Manager(MSM)来构建一个集群环境,并实现Session共享。这涉及到集群搭建、分布式应用以及缓存管理等多个方面的IT知识。下面将详细展开这些...
在构建高性能、高可用性的Web服务时,"nginx-1.9.3--tomcat-(6,7)-memcached-session共享负载"是一个典型的架构模式,它整合了Nginx、Tomcat以及Memcached来实现负载均衡和Session共享。这个配置方案能够有效地提高...
2)Tomcat6和Tomcat7使用不同msm支持包:memcached-session-manager-tc6-1.6.5.jar和memcached-session-manager-tc7-1.6.5.jar,只可选一,否则启动报错。 3)msm源码中的lib包版本太低:spymemcached需要使用...
在Web应用中,session管理是关键,尤其是在集群环境中,确保用户会话在多个服务器之间共享以实现负载均衡和高可用性。 在这个压缩包中,包含了使用不同序列化策略的Tomcat与Memcached集成示例。序列化是将Java对象...
在这个场景中,"负载均衡session共享memcached jar包"的主题涉及到使用Nginx作为负载均衡器,解决多台Tomcat服务器之间Session共享的问题,以及如何通过引入特定的jar包来实现这一目标。 Nginx是一款高性能的HTTP和...
为了设置session共享,你需要在Tomcat的配置文件(如`context.xml`或`server.xml`)中配置Memcached Session Manager,并指定Spy Memcached为客户端,同时在Nginx配置中启用session sticky或负载均衡策略。...
- **负载均衡**:通过缓存减轻数据库负载,实现负载均衡。 - **Session共享**:在集群环境中,通过memcached实现用户session的跨服务器共享。 综上所述,`memcached-1.4.15` 是一个强大且高效的内存缓存系统,结合...
2. **配置Nginx**:在Nginx的负载均衡配置中启用`sticky`或`ip_hash`策略。`sticky`可以让相同客户端的请求总是被分发到同一台后端服务器,以保持Session的一致性;`ip_hash`则是根据客户端IP的哈希结果来分发,同样...
标题“Arch-03-15- Nginx+tomcat 配置负载均衡动静分离”涉及的是在Web服务器架构中使用Nginx与Tomcat的集成,通过配置实现负载均衡和动静态资源分离。这样的架构可以提高系统的可用性和响应速度,减轻后端应用...
这个名为“Linux-memcached-tomcat8-session共享lib.rar”的压缩包文件显然旨在解决一个特定的问题:在Linux系统上,通过Nginx作为负载均衡器,利用Memcached实现跨多个Tomcat实例的session共享。下面将详细解释这个...
通过这些jar包的集成,我们可以构建出一个高效的、基于Memcached的session管理解决方案,使得在nginx负载均衡下运行的Tomcat 7应用能充分利用Memcached进行session数据的存储和共享,从而提高系统的整体性能和可靠性...
通过这个jar包,开发者可以将用户的session状态存储在memcached中,从而实现负载均衡和高可用性。 4. **msm-javolution-serializer-1.5.1.jar**:这是一个额外的序列化器,基于Javolution库,用于memcached-session...