-
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
目前还没有答案
相关推荐
memcache集群代理软件 magent-0.5.tar.gz,使用memcache的比较少了,如果有需要的可以直接下载 亲试,可用,使用有问题可以联系我
Nginx+Tomcat7+Memcached集群Session共享 完整例子 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对...
Lnmp+memcache+memcached
nginx+tomcat8.0+memcached1.5 session共享所需jar包,亲测可用,采用javolution解析
tomcat的lib内已经包括了相关的jar
关于memcache 使用的 客户端是memcached client for java 的 JAVA工程
nginx做tomcat负载均衡时tomcat9+memcached+memcachedSessionManagerjar
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)
memCache 源码 java客户端.实例
memcache java client 2.6.3版本,包括完整的jar包. memcached win 服务端.
tomcat8+memcached所需完整jar包,完成你所想要的session共享
谷歌对于memcached提供给Java的客户端有spymemcached、xmemcached、memcache-client-forjava等多种形式,但memcache-client-forjava是使用最多、最稳定的。里边的文件和文档(有中文文档)都是从官网下载的,里边的...
CentOS 5.4下的Memcache安装步骤分享,想要配置Linux+Nginx+PHP+Memcached运行环境的朋友可以参考下
tomcat8 +memcached session 共享jar包,目前自己使用的包。肯定可用。配置文件大家可以随便搜索一个的都可以
中文名: Apache, MySQL, memcached和Perl开发Web应用程序 原名: Developing Web Applications with Apache, MySQL, memcached, and Perl 作者: Patrick Galbraith资源格式: PDF 版本: 文字版 出版社: Wrox书号: ...
Windows_Memcache安装(XAMPP+Memcache+PHP) 安装步骤,详细说明
tomcat+nginx+memcache高可用
该资源基于ssm整合框架集成memcached的开发
nginx配置tomcat集群session共享的时候memcache所用的jar包,