spymemcached 是内存数据库memcached的的开源客户端软件,比较流行。 spymemcached 支持集群操作,但是 由于其内部机制的设计缺陷性,导致其 集群过程中 会出现一些预想之外的情况。
spymemcached 中locator.getSequence(key)最多会提供7个备选虚拟节点。根据作者的提示知道,当集群中的某一个节点宕机之后,spymemcached不会选择其他可用机器,而是选择直接失败,当当前节点宕机之后 spymemcached会有限的选择 另一个节点,但是根据作者的提示,当前节点失败后,会有 128 分之一的 几率会选择 宕机的节点。
我们需要修改源码。
请尊重知识,请尊重原创 更多资料参考请见 http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1
作者的源码
public Iterator<MemcachedNode> getSequence(String k) { // Seven searches gives us a 1 in 2^7 chance of hitting the // same dead node all of the time. return new KetamaIterator(k, 7, getKetamaNodes(), hashAlg); }*
修改之后的代码
public Iterator<MemcachedNode> getSequence(String k) { // return new KetamaIterator(k, 7, getKetamaNodes(), hashAlg); int maxTry = config.getNodeRepetitions() + 1; if (maxTry < 20) { maxTry = 20; } return new KetamaIterator(k, maxTry, getKetamaNodes(), hashAlg); }
其 get set delete 可能会存在由于 网络等原因造成的 操作失败。
可以适当修改其执行 方式来实现操作
@Override public OperationFuture<Boolean> set(String key, int exp, Object o) { OperationFuture<Boolean> result = null; Object obj = null; int count = 50; while(obj == null && count >0 ){ result = asyncStore(StoreType.set, key, exp, o, transcoder); obj = get(key); count --; } return result; }
@Override public OperationFuture<Boolean> delete(String key) { OperationFuture<Boolean> result = null; Object obj = key; int count = 50; while(obj != null && count > 0){ result = delete(key, 0L); obj = get(key); count --; } return result; }
相对于源码来说 加入了简单的重试机制。
可根据自身实际情况选择使用与否。
本文部分资料参考 http://www.udpwork.com/item/14792.html
相关推荐
由重启引起的Oracle RAC节点宕机分析及追根溯源.docx
RAC节点宕机故障分析
由于项目需要,编写基于zookeeper集群监测服务器宕机...原理:服务器端向zookeeper注册,在znode节点创建文件,zookeeper心跳检测,一旦服务器宕机,znode节点的文件会删除,客户端会响应做出相应的操作,如发邮件通知。
43-计算节点宕机了怎么办1
本文主要是本人在实际的生产环境中遇到WebLogic宕机问题,经过自己的经验整理而总结的文档,对从事中间件的人将会是很好的参考。
宕机检测工具,可进行多台服务器,多IP,多个业务端口的检测。适合用于监视集群中各个节点是否正常工作。
本文测试 redis集群节点宕机 fail状态以上篇博文为基础Redis集群策略及集群实例。 在Redis集群策略及集群实例中通过单机集群创建多实例(3主3从)的方式搭建了redis集群,以此为基础做实测 首先查看一下集群状态...
RAC-1 宕机,RAC-2正常,在RAC-2节点上,删除RAC-1节点步骤。
zookeeper的客户端使用,图形化界面查看节点信息。只需启动bat脚本,输入连接ip即可
在使用ansys进行分析后,需要批量提取某些节点的位移数据,可以将这些节点写到txt文件中,然后通过编写循环来提取某时间段内的位移数据。同样原理可以扩展到提取杆件应力等问题,但是循环提取的过程是比较慢的,如果...
本项目是基于XMPP的物联网客户端软件的实现,其实现的主要功能是一款能和物联网节点交互的即时通讯软件。目前支持九类传感器节点交互,主要有:温湿度、风扇、直流电机、LED灯、步进电机、门磁、光电接近、烟雾和...
手头正在处理的winform项目经过三个月左右的设计和开发,终于进行了测试和验收阶段。...注册过后,再用OPC客户端(也是我们的应用服务器)去连接OPC服务器(我们读的是力控6.0)就可以找到OPC服务器并正常读取了。
n2n的安卓客户端软件,手机要求root,超级节点可以在各大搜索引擎搜索。
NULL 博文链接:https://edge.iteye.com/blog/1928413
基本的IEEE三机九节点simulink模型,如有问题请指出
NULL 博文链接:https://chengjianxiaoxue.iteye.com/blog/2277358
集群外节点安装客户端使用hdfs上传文件失败用户问题集群外节点安装客户端使用hdfs上传文件失败问题现象在集群节点上安装客户端,在该客户端使用hdfs命令上传一
用于浏览器和节点的 zbus java脚本客户端.js
三机九节点电力系统仿真,利用matlab中的simulink进行电气仿真
Sybase数据库宕机处理步骤,适合刚开始入手的初学者。