`

Memcached无单点解决方案

 
阅读更多

 

原文链接:https://linux.cn/article-669-2.html

一.Repcached (memcached同步补丁)

下载地址:http://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2.8/

版本号:memcached 1.2.8  repcached 2.2.1

1、repcached介绍

repcached是日本人开发的实现memcached复制功能,它是一个单 master单 slave的方案,但它的 master/slave都是可读写的,而且可以相互同步,如果 master坏掉, slave侦测到连接断了,它会自动 listen而成为 master;而如果 slave坏掉, master也会侦测到连接断,它就会重新 listen等待新的 slave加入

2、安装

在两台服务器上分别安装memcached服务,另注本文libevent的版本为:libevent-1.4.13,下载地址: http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz (安装省略)

repcached有两种方式:

方式一、下载对应的repcached版本

#wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
#tar zxf memcached-1.2.8-repcached-2.2.tar.gz
#cd memcached-1.2.8-repcached-2.2

方式二、下载对应patch版本

#wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz
#gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1】
#./configure –enable-replication
# make
# make install

3、启动:

启动master

# ./memcached -v -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111   (11211:master端口;11111:同步端口)
replication: connect (peer=127.0.0.1:11111)
replication: accept
replication: marugoto copying
replication: start

启动salve

# ./memcached -v -u root -d -l 127.0.0.1 -p 11212 -x 127.0.0.1 -X 11111   (11212:slave端口;11111:同步端口)
replication: connect (peer=127.0.0.1:11111)
replication: marugoto copying
replication: close
replication: listen

4、测试:

操作master

[root@localhost bin]# telnet 127.1 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1)...
Escape character is '^]'.
get key1
END
set key1 0 0 2
aa
STORED
quit
Connection closed by foreign host.

查看slave

[root@localhost bin]# telnet 127.1 11212
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1)...
Escape character is '^]'.
get key1
VALUE key1 0 2
aa
END
quit
Connection closed by foreign host.

注意:如果master down机,slave接管并成为master,这时down机的master只能启用slave,他们之间互换角色,才能保持复制功能。换句话说,master没有抢占功能。而且,同步间隔时间未知。

优点:

  1. 数据冗余
  2. 两台memcached都可以进行读写操作

缺点:

  1. 只支持单对单
  2. 只支持memcached 1.2.x版本

二.Magent (memcached的代理)

原文地址:http://blog.s135.com/post/393/

magent是一款开源的Memcached代理服务器软件,其项目网址为:

http://code.google.com/p/memagent/

1、安装步骤:

a、编译安装libevent:

wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --prefix=/usr
make && make install
cd ../

b、编译安装Memcached:

wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure --with-libevent=/usr
make && make install
cd ../

c、编译安装magent:

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

2、使用实例:

memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
magent -u root -n 51200 -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
  1. 分别在11211、11212、11213端口启动3个Memcached进程,在12000端口开启magent代理程序;
  2. 11211、11212端口为主Memcached,11213端口为备份Memcached;
  3. 连接上12000的magent,set key1和set key2,根据哈希算法,key1被写入11212和11213端口的Memcached,key2被写入11212和11213端口的Memcached;
  4. 当11211、11212端口的Memcached死掉,连接到12000端口的magent取数据,数据会从11213端口的Memcached取出;
  5. 当11211、11212端口的Memcached重启复活,连接到12000端口,magent会从11211或11212端口的 Memcached取数据,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管11213端口的Memcached还有数 据(此问题尚待改进)。

3、整个测试流程:

[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
memcached agent v0.4
matrix 1 -> 127.0.0.1:11211, pool size 0
matrix 2 -> 127.0.0.1:11212, pool size 0
END
set key1 0 0 8
zhangyan
STORED
set key2 0 0 8
zhangyan
STORED
quit
Connection closed by foreign host.

[root@centos52 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
END
get key2
VALUE key2 0 8
zhangyan
END
quit
Connection closed by foreign host.

[root@centos52 ~]# telnet 127.0.0.1 11212
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
VALUE key1 0 8
zhangyan
END
get key2
END
quit
Connection closed by foreign host.

[root@centos52 ~]# telnet 127.0.0.1 11213
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
VALUE key1 0 8
zhangyan
END
get key2
VALUE key2 0 8
zhangyan
END
quit
Connection closed by foreign host.

模拟11211、11212端口的Memcached死掉

[root@centos52 ~]# ps -ef | grep memcached
root      6589     1  0 01:25 ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
root      6591     1  0 01:25 ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
root      6593     1  0 01:25 ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
root      6609  6509  0 01:44 pts/0    00:00:00 grep memcached
[root@centos52 ~]# kill -9 6589
[root@centos52 ~]# kill -9 6591
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
VALUE key1 0 8
zhangyan
END
get key2
VALUE key2 0 8
zhangyan
END
quit
Connection closed by foreign host.

模拟11211、11212端口的Memcached重启复活

[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
END
get key2
END
quit
Connection closed by foreign host.

 

优点:

  1. 可以做多主或多从

缺点:

  1. 当master宕掉又恢复后,取不到数据。

三.Repcached和Magent结合

安装memcached 1.2.8、repcached 2.2.1、magent 0.5

测试流程:

1、启动memcached和magent

开启代理,代理端口为12000,设置127.0.0.1:11211为主,127.0.0.1:11212为从。

magent -u root -p 12000 -s 127.0.0.1:11211 -b 127.0.0.1:11212

启动两个memcached进程,做数据同步,同步端口为11111。

./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111

./memcached -u root -d -l 127.0.0.1 -p 11212 -x 127.0.0.1 -X 11111

2、从代理写入数据,在两台memcached上查看

[root@localhost bin]# telnet 127.1 12000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set key1 0 0 1
a
STORED
quit
Connection closed by foreign host.
[root@localhost bin]# telnet 127.1 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key1
VALUE key1 0 1
a
END
quit
Connection closed by foreign host.

 

3. 模拟主或从memcached宕机后,数据是否存在

[root@localhost bin]# ps aux|grep memcached
root    15314  0.0 0.4 3556  2108 ?     Ss   16:03   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15318  0.0 0.3 3556  1836 ?     Ss   16:04   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15370  0.0 0.1 4016   696 pts/3 R+   16:09   0:00 grep memcached
[root@localhost bin]# kill 15314
[root@localhost bin]# ps aux|grep memcached
root    15318  0.0 0.3 3556  1836 ?     Ss   16:04   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15370  0.0 0.1 4016   696 pts/3 R+   16:09   0:00 grep memcached
[root@localhost bin]# telnet 127.1 12000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set key1 0 0 1
a
STORED
quit
Connection closed by foreign host.
[root@localhost bin]# telnet 127.1 11212
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key1
VALUE key1 0 1
a
END
quit
Connection closed by foreign host.

4. 模拟主或从memcached恢复后,数据是否存在/同步

[root@localhost bin]# ./memcached -u root -d -l 127.0.0.1 -X 11111
[root@localhost bin]# ps aux|grep memcached
root    15318  0.0 0.4 3556  2112 ?     Ss   16:04   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15380  0.0 0.3 3556  1808 ?     Ss   16:11   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15384  0.0 0.1 4016   700 pts/3 R+   16:11   0:00 grep memcached
[root@localhost bin]# telnet 127.1 12000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set key1 0 0 1
a
STORED
quit
Connection closed by foreign host.
[root@localhost bin]# telnet 127.1 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key1
VALUE key1 0 1
a
END
quit
Connection closed by foreign host.

优点:

  1. 数据冗余
  2. 两台memcached都可进行读写操作
  3. 可以做多主或多从(未测试)

缺点:

  1. 只支持memcached 1.2.x版本
分享到:
评论

相关推荐

    SSO 单点登录解决方案 设计流程图

    SSO 单点登录解决方案 设计流程图 SSO(Single Sign-On)单点登录解决方案是当前企业应用系统中最常用的身份验证机制之一。该解决方案的设计流程图将会详细介绍 SSO 的实现机制、时序图、数据库设计、程序实现和...

    单点登陆实现(完全跨域、单点退出)

    单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只...总之,这个单点登录例子结合了多种技术和工具,构建了一个高效且安全的SSO解决方案,为用户提供一致且便捷的登录体验,同时保证了系统的安全性。

    memcached缓存

    - **分布式缓存**:memcached是一种分布式缓存解决方案,它可以将数据分散存储在多台服务器上,减少单台服务器的压力。 - **键值对存储**:memcached采用键值对(key-value)的方式来存储数据,键用于标识数据,值是...

    Memcached Redis MongoDB对比

    Memcached、Redis和MongoDB都是流行的数据库解决方案,它们各自具有不同的特点和应用场景。以下是这三种技术之间的对比分析。 性能: 这三种数据库都具备高TPS(每秒事务处理数),意味着它们都能够处理大量的数据...

    Memcached使用点滴.docx

    虽然分布式缓存可能会有数据传播的损耗,但 Memcached 的集中式缓存模式在实现简单备份后,可以有效地解决单点故障问题。 计数器功能是 Memcached 的一个重要特性,特别是在访问控制场景中。Memcached 提供了原子性...

    memcached+tomcat的session共享

    - 降低单点故障:如果某台Tomcat服务器宕机,session数据不会丢失,因为它们在memcached中是持久化的。 然而,这种方式也存在一些潜在的问题: - 安全性:session数据在内存中存储,如果memcached被攻击,可能会...

    监控memcached运行情况

    这可以帮助我们识别性能瓶颈,或者定制化监控解决方案。 6. **扩展性与优化**:当单个Memcached实例无法满足需求时,可能需要考虑集群部署。这时,了解如何正确地扩展Memcached和优化缓存策略至关重要。 7. **安全...

    memcached-2.1.jar

    2. 分布式架构:Memcached支持多台服务器分布式部署,通过一致性哈希算法实现数据的均匀分布,避免了单点故障问题。 3. LRU(Least Recently Used)策略:当内存满时,Memcached会使用LRU策略淘汰最近最少使用的数据...

    Memcached网站应用实战

    ### Memcached网站应用实战知识点详解 #### 一、Memcached简介 Memcached是一个高性能的分布式内存对象缓存系统,主要用于缓解数据库压力,提高动态网页应用的响应速度。它通过在内存中维护一个巨大的hash表来存储...

    memcached server

    1. **分布式**: Memcached支持多服务器环境下的数据分发,可以通过一致性哈希算法将数据均匀地分布到各个服务器节点上,避免了单点故障。 2. **内存存储**: 数据完全存储在内存中,没有持久化机制,这意味着一旦...

    memcached(十一)memcached-session-manager

    这暗示了讨论的内容可能与旧版本的Tomcat兼容性有关,或者是针对那个时代Web应用的解决方案。 **详细知识点:** 1. **Memcached基础**:首先,教程可能会介绍memcached的基本概念,如其内存存储模型、key-value...

    tomcat6-7+memcached支持jar包

    这个标题暗示了我们将在Tomcat服务器环境中使用Memcached作为分布式缓存解决方案,以提高应用程序的性能。 【描述分析】 描述提到"仅支持tomcat7及之前版本",这意味着该JAR包并不适用于Tomcat 8或更高版本。这可能...

    nginx+tomcat+memcached

    这种解决方案不仅提高了系统的可扩展性,还降低了单点故障的风险。在实际操作中,还可以根据具体需求进行更复杂的配置和优化,例如使用一致性哈希算法进行负载均衡,或者结合Redis等其他缓存系统来进一步提升性能。

    java_memcached-release_2.0.1.zip

    Java Memcached 2.0.1 是一个针对Java平台的Memcached客户端库,它使得Java开发者能够方便地与Memcached缓存系统进行交互。...通过理解并熟练使用其提供的特性,可以有效地设计和实现高性能的分布式缓存解决方案。

    Memcached.pdf Memcached.pdf

    - Memcached 通过在网络中的多台服务器之间分布数据,解决了这个问题,提供了更为广泛和高效的缓存解决方案。 #### 六、安装与配置 1. **安装 libevent:** - Memcached 使用 libevent 来处理事件和异步操作。 ...

    Memcached使用点滴

    为了实现服务访问频率和次数的控制,作者考虑了多种方案,最终决定使用Memcached作为集中式缓存解决方案。这样做的原因是集中式缓存在性能上更为优越,而且通过简单的备份操作可以有效避免单点故障的问题。 #### 四...

    memcached面试专题1

    2. 分布式特性:memcached允许在多个节点上分散负载,避免单点失效。 3. 更好的扩展性:在多核CPU环境下,memcached不会像MySQL的query cache那样遇到全局锁的问题。 缺点: 1. 需要额外工作量集成:与MySQL的query...

    使用cookie+memecached实现单点登录方案

    单点登录(Single Sign On,简称SSO)是一种让用户在多应用系统中只需登录一次就能访问所有相互信任的应用的技术。这种解决方案在企业级环境中广泛使用,以提高用户体验和管理效率。SSO的核心在于用户登录一次后,其...

    MemCached跨平台分布式缓存

    MemCached是一种广泛应用于互联网行业的分布式缓存系统,其设计目标是提供高性能、低延迟的数据存储解决方案,以缓解数据库的压力并提升应用的响应速度。作为一款跨平台的内存对象缓存系统,它支持多种操作系统,...

Global site tag (gtag.js) - Google Analytics