Memcached-Repcached小小探测

                          Memcached-Repcached小小探测html

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

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

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

知道了缘由,固然要动手操做一下,找了两台实验机,作一个主备。服务器

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

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

         Slave: red hat 5.4     IP:192.168.2.14tcp

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

                memcached-1.2.8-repcached-2.2.1.tar.gzmemcached

注: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

参考连接:http://yjh625.blog.51cto.com/225746/1264696

         http://f.dataguru.cn/thread-179095-1-1.html

相关文章
相关标签/搜索