博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Memcached-Repcached小小探测
阅读量:5977 次
发布时间:2019-06-20

本文共 4281 字,大约阅读时间需要 14 分钟。

           Memcached-Repcached小小探测

  忘记在什么地方,看到一个memcache的文档,当时看到在启动memcached服务的时候,有两个参数-x-X,当时很奇怪,以前也做过memcached方面的实验,但也没有见过这两个参数,于是拉出来以前的实验环境,查看help,也没有此参数,便心想,自己对memcached也只是有一个初步的了解,可能是遗漏了什么内容,于是在网上搜了搜,总算搞清楚了是什么回事。

-x-X参数并非来自于原生的memcached参数,它是由一个Memcached的变种产品repcached所以提供,repcached由日本人开发,可以说是Memcached的一个patch,为了实现Memcached的复制功能,可以支持多个Memcached之间相互复制,解决了Memcached的容灾问题。

Repcached是一个单masterslave的方案,它的master/slave都是可读写的,而且可以同步,如果master挂掉,slave侦测到连接断了,就会自动listen而成为master,如果slave挂掉,master也会侦测到连接已经断开,并且重新侦听,等待slave加入。

知道了原因,当然要动手操作一下,找了两台实验机,做一个主备。

Repcached有两种安装形式,一种是以Memcached的补丁形式,只有Repcached补丁,在为自己的Memcached打补丁的时候,要选对应的Repcached补丁,别一种是集成的形式,包中直接集成MemcachedRepcached,本次主要以后者实验。

实验环境:master: red hat5.4   IP :192.168.2.13

         Slave: red hat 5.4     IP:192.168.2.14

软件包:libevent-2.0.21-stable.tar.gz

                memcached-1.2.8-repcached-2.2.1.tar.gz

注:masterslave服务器的配置均相同,不再重复贴出

1.Libevent安装

Memcached是基于libevent的事件处理机制,Libevent是由C开发的程序库,它把BSD系统的kqueuelinuxepoll等事件处理功能封闭成一个接口。Memcached利用这个库进行异步事件处理

# ./configure--prefix=/usr/local/libevent

# make && make install

安装之后,将Libevent的库文件添加到动态库中

          # cat /etc/ld.so.conf

include ld.so.conf.d/*.conf

/usr/local/libevent/lib              //此处为要添加的libevent库目录

# ldconfig                        //重新加载动态lib

注:如果无此步骤,在启动memcached时,会提示看不到libevent的库文件。

2.Memcached-repcached安装

## ./configure--prefix=/usr/local/memcachedrep --with-libevent=/usr/local/libevent--enable-replication --enable-64bit

# make && make install

如果在此处安装时,出现错误代码:

memcached.c: Infunction ‘add_iov’:

memcached.c:697:error: ‘IOV_MAX’ undeclared (first use in this function)

memcached.c:697:error: (Each undeclared identifier is reported only once

memcached.c:697:error: for each function it appears in.)

make[2]: ***[memcached-memcached.o] Error 1

make[2]: Leavingdirectory `/root/memcached/memcached-1.2.8-repcached-2.2.1'

make[1]: ***[all-recursive] Error 1

make[1]: Leavingdirectory `/root/memcached/memcached-1.2.8-repcached-2.2.1'

make: *** [all]Error 2

则需要手动修改源文件

# vim memcached.c

 55 /* FreeBSD 4.x doesn't have IOV_MAXexposed. */

 56 #ifndef IOV_MAX

 57 #if defined(__FreeBSD__) ||defined(__APPLE__)

 58 # define IOV_MAX 1024

 59 #endif

 60 #endif

修改为:

 55 /* FreeBSD 4.x doesn't have IOV_MAXexposed. */

 56 #ifndef IOV_MAX

 57 /*#if defined(__FreeBSD__) ||defined(__APPLE__)*/

 58 # define IOV_MAX 1024

 59 #endif

 60 /*#endif*/

安装过程比较简单,主要是memcached  make时安装出错这儿会有点麻烦。

3.测试

首先启动master/slave memcached.

启动master memcached:

  #/usr/local/memcachedrep/bin/memcached -d -m 100 -l 192.168.2.13  -p 11211 -u root -c 1024 -X 11212 -P/tmp/memcached-rep.pid

查看memcached监听端口:

    # netstat -tupln | grep memcached

tcp  0 0 0.0.0.0:11211   0.0.0.0:* LISTEN      12443/memcached    

tcp 0 0 :::11211             :::*  LISTEN      12443/memcached    

tcp 0 0 :::11212            :::*   LISTEN     12443/memcached    

udp 0 0 0.0.0.0:11211    0.0.0.0:*              12443/memcached    

udp 0 0 :::11211:::*                           12443/memcached  

启动slave memcached

  #/usr/local/memcachedrep/bin/memcached -d -m 100 -l 192.168.2.14 -p 11211 -uroot -c 1024 -x 192.168.2.13 -X 11212 -P /tmp/memcached-rep.pid

查看memcached监听端口:

       # netstat -tupln | grep memcached

tcp 0 0192.168.2.14:11211  0.0.0.0:*  LISTEN     22888/memcached    

udp 0 0 192.168.2.14:11211 0.0.0.0:*              22888/memcached  

参数:

    -x: 设置从哪个IP上进行数据同步,也就是MasterIP

    -X:设置数据同步的端口,默认为11212,所以可以省略此参数,如果11212已经被另外的服务占用的话,则必须使用此参数进行端口的指定。

其它的参数你可以直接使用:#/usr/local/memcachedrep/bin/memcached –h来获取,当然获取的也包括-x-X

鉴于本文主要是测试数据间的同步,所以只进行简单的测试

1>连接到master服务器的11211端口,添加数据

Xshell:\>telnet 192.168.2.13 11211

Connectingto 192.168.2.13:11211...

Connectionestablished.

To escapeto local shell, press 'Ctrl+Alt+]'.

set dd 00 3            //命令

ddd                  //命令

STORED

2>连接到slave服务器的11211端口进行取数据

Connectingto 192.168.2.13:11211...

Connectionestablished.

To escapeto local shell, press 'Ctrl+Alt+]'.

get dd                   //命令

VALUE dd0 3

ddd

END

3>可以看到在slave服务器上也已经同步了数据。

4>我们也可以在slave服务器上写数据,在master上读数据

slave服务器上写数据

Connectingto 192.168.2.14:11211...

Connectionestablished.

To escapeto local shell, press 'Ctrl+Alt+]'.

get dd

VALUE dd0 3

ddd

END

set ee 00 3               //命令

eee                     //命令

STORED

master服务器上读数据

Connectingto 192.168.2.13:11211...

Connectionestablished.

To escapeto local shell, press 'Ctrl+Alt+]'.

set dd 00 3

ddd

STORED

get ee

ERROR

get ee

VALUE ee0 3

eee

END

可以看到slave也可以写数据,在master上可以读数据,但是期间有一定的数据同步时间。就像上面第一次取数据时,并没有取出,说明数据还没有同步!

4.如果你愿意的话,也可以将两台memcached服务器做成相互master/slave

本文转自 guodong810 51CTO博客,原文链接:http://blog.51cto.com/guodong810/1338953,如需转载请自行联系原作者
你可能感兴趣的文章
查看centos信息
查看>>
主从同步出现一下错误:Slave_IO_Running: Connecting
查看>>
游戏服务器部署
查看>>
java(十六) 对象的this引用
查看>>
Android 是移动世界的鸭嘴兽
查看>>
Spring MVC 教程,快速入门,深入分析——多视图控制器
查看>>
我的友情链接
查看>>
ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
查看>>
Oracle创建dblink和同义词小记
查看>>
docker supervisor管理进程
查看>>
javamail发送邮件
查看>>
被音乐毒害的孩纸
查看>>
我的友情链接
查看>>
简单工厂模式与工厂方法模式
查看>>
W32.Downedup.B顽固病毒——查杀记
查看>>
PHP两种不同的快递运单号查询
查看>>
java学习笔记:使用dom4j解析xml
查看>>
AGG第七课 内存分配策略
查看>>
ASP.NET夜话笔记06
查看>>
android之Fragment(官网资料翻译)二
查看>>