Memcached-Repcached小小探测html
忘记在什么地方,看到一个memcache的文档,当时看到在启动memcached服务的时候,有两个参数-x与-X,当时很奇怪,之前也作过memcached方面的实验,但也没有见过这两个参数,因而拉出来之前的实验环境,查看help,也没有此参数,便心想,本身对memcached也只是有一个初步的了解,多是遗漏了什么内容,因而在网上搜了搜,总算搞清楚了是什么回事。linux
-x与-X参数并不是来自于原生的memcached参数,它是由一个Memcached的变种产品repcached因此提供,repcached由日本人开发,能够说是Memcached的一个patch,为了实现Memcached的复制功能,能够支持多个Memcached之间相互复制,解决了Memcached的容灾问题。shell
Repcached是一个单master单slave的方案,它的master/slave都是可读写的,并且能够同步,若是master挂掉,slave侦测到链接断了,就会自动listen而成为master,若是slave挂掉,master也会侦测到链接已经断开,而且从新侦听,等待slave加入。vim
知道了缘由,固然要动手操做一下,找了两台实验机,作一个主备。服务器
Repcached有两种安装形式,一种是以Memcached的补丁形式,只有Repcached补丁,在为本身的Memcached打补丁的时候,要选对应的Repcached补丁,别一种是集成的形式,包中直接集成Memcached与Repcached,本次主要之后者实验。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
注:master与slave服务器的配置均相同,再也不重复贴出
1.Libevent安装
Memcached是基于libevent的事件处理机制,Libevent是由C开发的程序库,它把BSD系统的kqueue与linux的epoll等事件处理功能封闭成一个接口。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上进行数据同步,也就是Master的IP
-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