0 0

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)有什么关系呢?

谢谢大家了!

目前还没有答案

相关推荐

    memcache集群代理软件 magent-0.5.tar.gz

    而“magent-0.5.tar.gz”就是一款针对Memcache集群的代理软件,它允许我们管理多个Memcache实例,并提供了一种透明的方式来分发请求。 Magent是Memcache集群的一个代理解决方案,它的工作原理类似于一个中间层,...

    nginx+tomcat+memcached例子

    【标题】"nginx+tomcat+memcached例子"揭示了一个集成Web服务器技术的场景,其中Nginx作为前端代理服务器,Tomcat作为后端Java应用服务器,而Memcached则作为一个分布式内存缓存系统来提高整体性能。这个组合常用于...

    Nginx+Tomcat7+Memcached集群Session共享

    Nginx+Tomcat7+Memcached集群Session共享 完整例子 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对...

    nginx+apache+mysql+php+memcached+squid搭建门户网站

    - **Memcached**:安装完成后需配置缓存大小等相关参数,以提高Web应用性能。 #### 六、安装Apache、PHP、eAccelerator、php-memcache - **Apache**:安装过程中需要注意启用MPM模式,以提升处理并发请求的能力。 ...

    JAVA+MYSQL+Memcached

    在提供的文件"memcache学习总结(java版-winwods).docx"中,可能详细介绍了如何在Windows环境下使用Java来操作Memcached,包括安装步骤、配置以及基本的增删查改操作。 至于"Memcached_1.2.5.zip",这应该是...

    Lnmp+memcache+memcached

    总之,LNMP 结合 Memcache/Memcached 构建的环境能提供高性能的 Web 服务,通过内存缓存提升数据处理速度,降低数据库压力。在实际操作中,需注意正确配置和管理各个组件,以确保系统的稳定性和安全性。

    nginx+tomcat8.0+memcached1.5 session共享所需jar包

    1. `spymemcached-2.12.3.jar` 和 `spymemcached-2.10.3.jar`:这是Spy Memcached库的不同版本,它是Memcached的Java客户端,提供了连接和操作Memcached服务器的功能。Spy Memcached提供了异步操作、自动重试和故障...

    memcached 完整的项目,服务端(win) 客户端 包括jar包

    这个项目包含了 Memcached 的服务端(适用于 Windows)以及 Java 客户端,是开发基于 Java 的分布式应用的重要工具。 ### 一、Memcached 服务端 (Win) Memcached 服务端为 Windows 平台提供了轻量级的内存缓存解决...

    memcached for java client 例子

    描述中提到"关于memcache 使用的 客户端是memcached client for java 的 JAVA工程",这意味着这个压缩包可能包含了一个Java项目,该项目专门设计用来连接并操作memcached服务器。Java客户端库允许开发人员在Java应用...

    memCache源码java客户端

    Java社区提供了多种memCache客户端,如spymemcached、xmemcached、memcached-client等。其中,spymemcached是较常用的一款,它由Danga Interactive开发并开源,具有简单易用、性能稳定的特点。 ### 二、...

    搭建nginx+apache+mysql+php+memcached+squid服务器集群.zip_nginx正向代理

    搭建一个高效的服务器集群是IT行业中常见的任务,特别是对于高流量的Web应用来说,这能确保稳定性和可扩展性。在本场景中,我们讨论的是基于Nginx、Apache、MySQL、PHP、Memcached和Squid构建的服务器集群。下面将...

    nginx+apache+mysql+php+memcached+squid搭建集群web环境

    首先,我们需要了解集群Web环境的基本架构,通常包括客户端、负载均衡器、反向代理/缓存、Web服务器以及数据库服务器。在这个架构中,nginx作为负载均衡器,负责分发请求;apache与php结合处理动态内容;mysql作为...

    tomcat9+memcached+memcachedSessionManagerjar.zip

    综合以上信息,这个压缩包提供了在Windows环境下,使用Tomcat 9、Memcached和Nginx实现一个负载均衡的Web服务集群的配置示例。具体操作步骤可能包括: 1. 安装并配置Nginx作为反向代理和负载均衡器。 2. 在多台...

    memadmin+php_memcached+memcached1.4.5

    Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于减轻数据库负载,提高Web应用速度。它的工作原理是将数据存储在内存中,通过键值对的形式提供快速访问。Memcached 1.4.5是一个较旧的版本,发布于2010年...

    redis+memcached win安装包以及php7.3dll文件

    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”指的是在Windows操作系统上安装和使用Memcached服务的场景,其中`memcached.dll 5.3.8`是Memcached服务器的一个特定版本的动态链接库文件。Memcached是一款高...

    nginx配置session+memcached所需jar包

    在构建高可用的Web服务时,常常需要使用负载均衡技术,比如通过Nginx作为反向代理服务器,配合多个Tomcat实例实现应用集群。然而,当用户会话(Session)在集群中的不同Tomcat实例之间不能共享时,会导致用户体验...

    tomcat7+整合memcached jar包集合

    标题中的“tomcat7+整合memcached jar包集合”指的是在Tomcat 7这个流行的Java应用服务器上集成Memcached缓存系统的过程。Memcached是一种分布式内存对象缓存系统,广泛用于减轻数据库压力,提高Web应用的性能。在这...

    tomcat8 +memcached session 共享jar包

    在IT行业中,尤其是在Java Web应用领域,服务器集群和session共享是一个常见的需求。`Tomcat8`是Apache软件基金会的开源项目,是一个广泛使用的Java Servlet容器,而`Memcached`则是一种分布式内存对象缓存系统,常...

    tomcat8+memcached所需完整jar包

    在构建分布式Web应用程序时,确保跨服务器的会话(session)共享是至关重要的。Tomcat8和Memcached的集成提供了一种高效且可扩展的解决方案,以处理这个问题。本资源包含的是实现这一功能所需的全部jar包,使得在...

Global site tag (gtag.js) - Google Analytics