`
superlxw1234
  • 浏览: 550774 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44355
社区版块
存档分类
最新评论

关于memcached的HA方案探究2

阅读更多

1. 使用repcached
    这个不做多的说明。
    该方案优点:两个Memcached都可以进行读写操作,互相冗余。缺点:只支持单对单(一个master和一个slave),怎么样在多个memcached中使用repcached,我没找到答案。

 

2. 使用MAgent
   项目地址:http://code.google.com/p/memagent/wiki/HowMagentWorks
   安装:

mkdir magent
cd magent
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
tar -xzvf magent-0.5.tar.gz  
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make

 

分别在11211,11212,11213,11214端口启动4个memcached:

/usr/local/memcached/bin/memcached -d -p 11211 -u memcached -m 2048 -l 127.0.0.1 -p 11211 -c 300 -P/usr/local/memcached/memcached1.pid
/usr/local/memcached/bin/memcached -d -p 11212 -u memcached -m 2048 -l 127.0.0.1 -p 11212 -c 300 -P/usr/local/memcached/memcached2.pid
/usr/local/memcached/bin/memcached -d -p 11213 -u memcached -m 2048 -l 127.0.0.1 -p 11213 -c 300 -P/usr/local/memcached/memcached3.pid
/usr/local/memcached/bin/memcached -d -p 11214 -u memcached -m 2048 -l 127.0.0.1 -p 11214 -c 300 -P/usr/local/memcached/memcached4.pid

 

[root@hd026-test agent]# ps aux | grep mem
533       4097  0.0  0.0 196688  2224 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11211 -u memcached -m 2048 -l 127.0.0.1 -p 11211 -c 300 -P/usr/local/memcached/memcached1.pid
533       4105  0.0  0.0 131304  2224 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11212 -u memcached -m 2048 -l 127.0.0.1 -p 11212 -c 300 -P/usr/local/memcached/memcached2.pid
533       4112  0.0  0.0  65768  2216 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11213 -u memcached -m 2048 -l 127.0.0.1 -p 11213 -c 300 -P/usr/local/memcached/memcached3.pid
533       4123  0.0  0.0 131304  2212 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11214 -u memcached -m 2048 -l 127.0.0.1 -p 11214 -c 300 -P/usr/local/memcached/memcached4.pid
root      4248  0.0  0.0  61136   736 pts/0    S+   15:07   0:00 grep mem

 

分别在12000,12001端口启动两个MAgent:

 

./magent -u root -n 4000 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213 -b 127.0.0.1:11214 
./magent -u root -n 4000 -l 127.0.0.1 -p 12001 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213 -b 127.0.0.1:11214 

 

启动参数说明:-p表示运行的端口号,-s表示指定那个memcached作为主,-b表示指定备份memcached;

 

[root@hd026-test agent]# ps aux | grep magent
root      4139  0.0  0.0  17048   520 ?        Ss   14:48   0:00 ./magent -u root -n 4000 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213 -b 127.0.0.1:11214
root      4169  0.0  0.0  17048   520 ?        Ss   14:52   0:00 ./magent -u root -n 4000 -l 127.0.0.1 -p 12001 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213 -b 127.0.0.1:11214
root      4288  0.0  0.0  61136   740 pts/0    S+   15:11   0:00 grep magent

 

连接到MAgent-12000,插入key1:

 

[root@hd026-test agent]# telnet localhost 12000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set key1 0 0 5
11111
STORED
get key1
VALUE key1 0 5
11111
END
quit
Connection closed by foreign host.

 

连接到MAgent-12001,插入key2;

之后,分别连接Memcached-11211,Memcached-11212,Memcached-11213,Memcached-11214来get key1和key2,
发现key1在11212和11214中,key2在11211和11213中。
结构如下:




 
 

用户在连接到MAgent写数据时,MAgent会根据一定的算法将数据写入一个主memcached和一个备memcached;
这样,在主memcached挂掉时候,MAgent会从备memcached中读取数据,对用户来说是透明的。
实验一下:

kill掉Mem-11211:

 

kill 4097

[root@hd026-test agent]# ps aux | grep mem
533       4105  0.0  0.0 131304  2224 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11212 -u memcached -m 2048 -l 127.0.0.1 -p 11212 -c 300 -P/usr/local/memcached/memcached2.pid
533       4112  0.0  0.0  65768  2216 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11213 -u memcached -m 2048 -l 127.0.0.1 -p 11213 -c 300 -P/usr/local/memcached/memcached3.pid
533       4123  0.0  0.0 131304  2212 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11214 -u memcached -m 2048 -l 127.0.0.1 -p 11214 -c 300 -P/usr/local/memcached/memcached4.pid
root      4265  0.0  0.0  61136   740 pts/0    S+   15:09   0:00 grep mem

 

在连接到MAgent-12000或者MAgent-12001, get key2:

 

[root@hd026-test agent]# telnet localhost 12000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key2
VALUE key2 0 5
22222
END
get key1
VALUE key1 0 5
11111
END
quit
Connection closed by foreign host.
[root@hd026-test agent]# telnet localhost 12001
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key2
VALUE key2 0 5
22222
END
get key1
VALUE key1 0 5
11111
END
quit
Connection closed by foreign host.

 

 

数据仍然可以正常获取。
使用该方案的优点是可以有多个memcached主从节点。
缺点是当一个主节点挂掉又恢复时候,从MAgent便会取不到数据。
测试如下:

重启11211端口的memcached

 

[root@hd026-test agent]# ps aux | grep mem
533       4105  0.0  0.0 131304  2224 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11212 -u memcached -m 2048 -l 127.0.0.1 -p 11212 -c 300 -P/usr/local/memcached/memcached2.pid
533       4112  0.0  0.0  65768  2216 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11213 -u memcached -m 2048 -l 127.0.0.1 -p 11213 -c 300 -P/usr/local/memcached/memcached3.pid
533       4123  0.0  0.0 131304  2212 ?        Ssl  14:47   0:00 /usr/local/memcached/bin/memcached -d -p 11214 -u memcached -m 2048 -l 127.0.0.1 -p 11214 -c 300 -P/usr/local/memcached/memcached4.pid
533       4270  0.0  0.0 130280  1144 ?        Ssl  15:09   0:00 /usr/local/memcached/bin/memcached -d -p 11211 -u memcached -m 2048 -l 127.0.0.1 -p 11211 -c 300 -P/usr/local/memcached/memcached1.pid
root      4279  0.0  0.0  61136   740 pts/0    S+   15:10   0:00 grep mem

 

[root@hd026-test agent]# telnet localhost 12000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key2
END
get key1
VALUE key1 0 5
11111
END
quit
Connection closed by foreign host.

 

get key2,发现已经取不到数据,但其实key2在Mem-11213上还是存在的。

 

[root@hd026-test agent]# telnet localhost 11213
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key2
VALUE key2 0 5
22222
END
quit
Connection closed by foreign host.

 

 

这其实是个很致命的缺陷,不知道为何没人修复。。或许有其他的方案可以弥补。。

  • 大小: 46.6 KB
分享到:
评论
1 楼 cnsdl 2013-07-22  
magent 的缺点:
“缺点是当一个主节点挂掉又恢复时候,从MAgent便会取不到数据。”
可以克服,就是magent和repcached一起使用:

若对这个方案感兴趣可以联系我(cnsdl@126.com),这里无法贴图

相关推荐

    memcached 64位 window

    **标题与描述解析** ...总的来说,Memcached 64位 window为Windows环境提供了强大的内存缓存解决方案,可以有效提升依赖数据库的应用性能。正确配置和使用Memcached,能显著改善用户体验,降低服务器压力。

    php5.2.17关于memcached1.4.3及php_memcache扩展

    首先,Memcached 1.4.3是Memcached的稳定版本,它提供了高速的数据存储和检索功能,适用于快速读取大量数据的场景。此版本同时支持32位和64位操作系统,这意味着无论你的服务器架构如何,都可以顺利地部署和使用。在...

    memcached安装软件 libevent magent memcached

    2. 进入目录:`cd memcached-1.4.15` 3. 配置,指定libevent库的位置(如果需要):`./configure --with-libevent=/usr/local` 4. 编译:`make` 5. 安装:`sudo make install` 安装完成后,启动memcached服务: 1....

    memcached windows稳定版

    2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动...

    memcached服务器端memcached.exe 下载

    标签“memcached 服务器端 下载”明确了这是关于获取memcached服务端的资源,而且是下载操作,通常这包括了memcached服务器的运行文件和可能需要的客户端驱动(如PHP扩展)。 在压缩包中的`php_memcached.dll`和`...

    memcached安装包以及MemCachedClient

    **2. libevent 库** libevent 是一个事件通知库,Memcached 可以依赖它实现异步非阻塞I/O。当在编译 Memcached 时,如果选择使用 libevent 模式,可以提高其性能和可扩展性。libevent 提供了一种方式来处理多个长...

    windows下memcached+memcached.dll 5.3.8

    描述中提到的“详细你谷歌memcached安装教程”,暗示了用户可能需要通过搜索引擎(如Google)查找关于如何在Windows环境下安装和配置Memcached的步骤。这通常包括以下几个关键步骤: 1. **下载Memcached**: 首先,...

    memadmin+php_memcached+memcached1.4.5

    标题中的"memadmin+php_memcached+memcached1.4.5"暗示了这是一个关于内存缓存管理系统、PHP扩展以及memcached服务器的组合。这里的关键技术包括`memadmin`(一个用于管理memcached的工具)、`php_memcached`(PHP...

    安装Memcached及Memcached配置

    Memcached 是一个高性能的分布式...总的来说,Memcached提供了一种高效且易于部署的缓存解决方案,通过合理配置和使用,能显著提升Web应用的性能。了解并掌握上述知识,将有助于你在实际项目中有效地利用Memcached。

    Memcached 原理和使用详解

    2. **简单的协议**:Memcached使用自定义的文本协议,简洁明了,易于实现和调试。客户端可以轻松地与Memcached进行交互,存储和检索数据。 3. **基于libevent的事件处理**:libevent是一个跨平台的事件通知库,用于...

    java连接memcached示例代码

    Java连接Memcached是一种常见的缓存操作,特别是在处理大数据量或者需要快速响应的Web应用程序中。Memcached是一款高性能、分布式内存对象缓存系统,用于减轻数据库负载,提高网站性能。下面我们将详细探讨如何在...

    memcached.exe及memcached.dll

    **Memcached:高性能分布式...总结来说,Memcached是一个高效、轻量级的内存缓存解决方案,广泛应用于需要快速数据访问的场景。正确配置和使用memcached.exe和memcached.dll,可以为你的应用程序带来显著的性能提升。

    memcached-1.5.11.tar.gz

    六、 Memcached的局限性与替代方案 虽然Memcached在很多场景下表现优秀,但也有其局限性,如不支持持久化、数据安全性较低等。在特定情况下,可能会考虑使用Redis这样的更全面的缓存解决方案,它支持更多的数据结构...

    memcached-笔记资料

    【标题】"memcached-笔记资料"涉及到的核心知识点是分布式内存缓存系统——Memcached,它是一个高性能、轻量级的缓存解决方案,主要用于减轻数据库的负载,提高Web应用的性能。 【描述】"memcached-笔记资料"暗示了...

    memcached安装包以及java所需的memcached架包

    **memcached** 是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问...但同时也要注意,memcached并非万能解决方案,对于需要持久化存储和复杂查询的数据,仍需依赖数据库。

    hibernate-memcached包

    **hibernate-memcached包** 是一个专为Hibernate框架设计的扩展,目的是将流行的分布式内存缓存系统Memcached整合到Hibernate中,作为其二级缓存解决方案。在大型分布式应用中,缓存技术是提高性能的关键,特别是...

    memcached-2.4.2.jar memcached-2.4.2.jar

    使用memcached 方法 package com.war.common.util; import com.danga.MemCached.*; import java.util.Date; public class MemCached { protected static MemCachedClient mcc; protected static Logger log; ...

    memcached1.5.6.rar

    **标题解析:** "memcached1.5.6.rar" 这个标题表明这是一个关于memcached软件的压缩包,具体版本是1.5.6。memcached是一个高性能、分布式的内存对象缓存系统,常用于减轻数据库负载,提高Web应用性能。 **描述解读...

Global site tag (gtag.js) - Google Analytics