-
Memcache集群代理服务magent + memcached for java应用0
如题:
在3个虚拟集中搭建好memcache 缓存分布式集群,利用magent代理memcache
服务器分别为A,B,C ip 分别为:192.168.100.3,192.168.100.4,192.168.100.5.
A,B作为缓存服务端口为11211,11212。
C作为mc备份服务和magent服务器。备份m服务端口为11213,magent服务端口:12000
正常情况应该是当A,B,C都启动mc服务,启动命令分别为:
memcached -d -u root -m 512 192.168.100.3 -p 11211 -c
512 -P /temp/memcached.pid
memcached -d -u root -m 512 192.168.100.4 -p 11212 -c
512 -P /temp/memcached.pid
memcached -d -u root -m 512 192.168.100.5 -p 11213 -c
512 -P /temp/memcached.pid
在C上启动magent服务,
启动命令为:
magent -u root 51200 -l 192.168.100.5 -p 12000 -s 192.168.100.3:11211 -s 192.168.100.4:11212 -b 192.168.100.5:11213
接下来用memcached for java 连接,存取值,出现一个问题。
下面是java client代码
package com.memcache.client;
/**
* Memcache 分布式缓存服务器应用
* @author gouwei
* 2012/10/30
*/
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class MemcacheClient {
//创建管理客户端和服务器通讯连接池 实例
private static SockIOPool Pool = null;
private static MemCachedClient memCacheClient = null;
//配置缓存服务器
public static void getMemcacheConnection(){
memCacheClient = new MemCachedClient();
SockIOPool scokIOPool = Pool.getInstance();
// 设置缓存服务器列表
String[] servers = {
"192.168.100.3:11211",
"192.168.100.4:11212"
//"192.168.100.5:11213"
};
//设置cache服务器权重
Integer[] weigths = {2,3};
//获取连接
/**
* 每个服务器最少可用连接数 默认:5
* 每个服务器最大可用连接数 默认:32
*/
//相连接池设置服务器列表和权重
scokIOPool.setServers(servers);
scokIOPool.setWeights(weigths);
/* 设置是否使用Nagle算法,因为我们的通讯数据量通常都比较大
(相对TCP控制数据)而且要求响应及时,因此该值需要设置为false(默认是true)
*/
scokIOPool.setNagle(false);
//开始时每个cache服务器的可用连接数
scokIOPool.setInitConn(5);
//设置socket读取等待超时时间 默认为30000ms
scokIOPool.setSocketTO(3000);
//设置scoket连接等待超时时间 默认为3000ms
scokIOPool.setSocketConnectTO(1000);
/**
* • 设置hash算法
• alg=0 使用String.hashCode()获得hash code,该方法依赖JDK,可能和其他客户端不兼容,建议不使用
• alg=1 使用original 兼容hash算法,兼容其他客户端
• alg=2 使用CRC32兼容hash算法,兼容其他客户端,性能优于original算法
• alg=3 使用MD5 hash算法
• 采用前三种hash算法的时候,查找cache服务器使用余数方法。采用最后一种hash算法查找cache服务时使用consistent方法。
*/
scokIOPool.setHashingAlg(3);
//启动pool
scokIOPool.initialize();
}
}
个人理解认为理论上应该是:
缓存服务器列表应该为A,B,然后当数据set进AB服务之后,magent服务还会将值set到C的MC备份服务器。然后当A或者B down掉之后,magent代理服务会将key hash到C的MC备份服务上取值才对。
String[] servers = {
"192.168.100.3:11211",
"192.168.100.4:11212"
};
但是测试结果告诉,当A或者B,或者AB都当掉之后,取值为null。也就是说,magent代理服务并没有将值set到备份服务上。
还有一个问题想请教各位:
在memcached for java api上有这么一段话:
· public void setServers( String[] servers )
· 设置连接池可用的cache服务器列表,server的构成形式是IP:PORT(如:127.0.0.1:11211)
· public void setWeights( Integer[] weights )
· 设置连接池可用cache服务器的权重,和server数组的位置一一对应
· 其实现方法是通过根据每个权重在连接池的bucket中放置同样数目的server(如下代码所示),因此所有权重的最大公约数应该是1,不然会引起bucket资源的浪费。
for ( int i = 0; i < servers.length; i+/+ ) { if ( this.weights /!= null && this.weights.length > i ) { for ( int k = 0; k < this.weights[i].intValue(); k+/+ ) { this.buckets.add( servers[i] ); if ( log.isDebugEnabled() ) log.debug( "++++ added " + servers[i] + " to server bucket" ); } }
我有点不明白当MC服务器个数和权重值有什么关系,最大公约数为1是什么意思。
//设置cache服务器权重
Integer[] weigths = {2,3};
看代码无非就是weigths.lengt>=servers.lengt,但是跟weights数组中的值(2,3)有什么关系呢?
谢谢大家了!
2012年11月02日 00:07
目前还没有答案
相关推荐
而“magent-0.5.tar.gz”就是一款针对Memcache集群的代理软件,它允许我们管理多个Memcache实例,并提供了一种透明的方式来分发请求。 Magent是Memcache集群的一个代理解决方案,它的工作原理类似于一个中间层,...
【标题】"nginx+tomcat+memcached例子"揭示了一个集成Web服务器技术的场景,其中Nginx作为前端代理服务器,Tomcat作为后端Java应用服务器,而Memcached则作为一个分布式内存缓存系统来提高整体性能。这个组合常用于...
Nginx+Tomcat7+Memcached集群Session共享 完整例子 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对...
- **Memcached**:安装完成后需配置缓存大小等相关参数,以提高Web应用性能。 #### 六、安装Apache、PHP、eAccelerator、php-memcache - **Apache**:安装过程中需要注意启用MPM模式,以提升处理并发请求的能力。 ...
在提供的文件"memcache学习总结(java版-winwods).docx"中,可能详细介绍了如何在Windows环境下使用Java来操作Memcached,包括安装步骤、配置以及基本的增删查改操作。 至于"Memcached_1.2.5.zip",这应该是...
总之,LNMP 结合 Memcache/Memcached 构建的环境能提供高性能的 Web 服务,通过内存缓存提升数据处理速度,降低数据库压力。在实际操作中,需注意正确配置和管理各个组件,以确保系统的稳定性和安全性。
1. `spymemcached-2.12.3.jar` 和 `spymemcached-2.10.3.jar`:这是Spy Memcached库的不同版本,它是Memcached的Java客户端,提供了连接和操作Memcached服务器的功能。Spy Memcached提供了异步操作、自动重试和故障...
这个项目包含了 Memcached 的服务端(适用于 Windows)以及 Java 客户端,是开发基于 Java 的分布式应用的重要工具。 ### 一、Memcached 服务端 (Win) Memcached 服务端为 Windows 平台提供了轻量级的内存缓存解决...
描述中提到"关于memcache 使用的 客户端是memcached client for java 的 JAVA工程",这意味着这个压缩包可能包含了一个Java项目,该项目专门设计用来连接并操作memcached服务器。Java客户端库允许开发人员在Java应用...
Java社区提供了多种memCache客户端,如spymemcached、xmemcached、memcached-client等。其中,spymemcached是较常用的一款,它由Danga Interactive开发并开源,具有简单易用、性能稳定的特点。 ### 二、...
搭建一个高效的服务器集群是IT行业中常见的任务,特别是对于高流量的Web应用来说,这能确保稳定性和可扩展性。在本场景中,我们讨论的是基于Nginx、Apache、MySQL、PHP、Memcached和Squid构建的服务器集群。下面将...
首先,我们需要了解集群Web环境的基本架构,通常包括客户端、负载均衡器、反向代理/缓存、Web服务器以及数据库服务器。在这个架构中,nginx作为负载均衡器,负责分发请求;apache与php结合处理动态内容;mysql作为...
综合以上信息,这个压缩包提供了在Windows环境下,使用Tomcat 9、Memcached和Nginx实现一个负载均衡的Web服务集群的配置示例。具体操作步骤可能包括: 1. 安装并配置Nginx作为反向代理和负载均衡器。 2. 在多台...
Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于减轻数据库负载,提高Web应用速度。它的工作原理是将数据存储在内存中,通过键值对的形式提供快速访问。Memcached 1.4.5是一个较旧的版本,发布于2010年...
redis安装:.msi文件打开直接安装即可,注意选择添加patt选项 memcached: memcached-win64-1.4.4-14 + PHP7-memcache-dll-master(7.1~7.3) + memcached.dll ... memcached.exe -d install(开启关闭服务:start/stop)
标题中的“Windows下memcached+memcached.dll 5.3.8”指的是在Windows操作系统上安装和使用Memcached服务的场景,其中`memcached.dll 5.3.8`是Memcached服务器的一个特定版本的动态链接库文件。Memcached是一款高...
在构建高可用的Web服务时,常常需要使用负载均衡技术,比如通过Nginx作为反向代理服务器,配合多个Tomcat实例实现应用集群。然而,当用户会话(Session)在集群中的不同Tomcat实例之间不能共享时,会导致用户体验...
标题中的“tomcat7+整合memcached jar包集合”指的是在Tomcat 7这个流行的Java应用服务器上集成Memcached缓存系统的过程。Memcached是一种分布式内存对象缓存系统,广泛用于减轻数据库压力,提高Web应用的性能。在这...
在IT行业中,尤其是在Java Web应用领域,服务器集群和session共享是一个常见的需求。`Tomcat8`是Apache软件基金会的开源项目,是一个广泛使用的Java Servlet容器,而`Memcached`则是一种分布式内存对象缓存系统,常...
在构建分布式Web应用程序时,确保跨服务器的会话(session)共享是至关重要的。Tomcat8和Memcached的集成提供了一种高效且可扩展的解决方案,以处理这个问题。本资源包含的是实现这一功能所需的全部jar包,使得在...