Repcached实现Memcached主从复制功能

Repchched项目地址:
 
关于repcached
“repcached”是一个补丁集合,它添加数据复制功能到memcached 1.2.x。
 
主要目的

实现冗余memcached系统。
 
主要功能

多主复制。

异步数据复制。

支持所有的memcached命令(set, add, delete, incr/decr, flush_all, cas)。

Memcached 1.4.x的Repcached补丁
地址:
最新补丁:

工作原理

repcached实现了memcached复制的功能,它是一个单master单slave的方案,但master/slave都是可读写的,而且可以相互同步,如果master坏掉slave侦测到连接断了,它会自动listen而成为master,这时坏掉的master只能启用为slave,它们之间互换角色,才能保持复制功能,换句话说,master没有抢占功能;而如果slave坏掉,master也会侦测到连接断,它就会重新listen等待新的slave加入。
 
应用场景

用memcached做session共享或其它服务时会存在memcached的单点故障,如果memcached宕机,那么整个系统用户无法登陆(session)。
基于这种情况,采用repcached做memcached的主从冗余。
 
Repcached下载地址


 
Repcached安装方式

Repcached有两种安装方式:
    1.补丁版本安装 
    先安装相应版本的memcached,然后对应版本的Repcached补丁。
    2.整合版本安装 
    直接安装整合版本的memcached
 
方式一:补丁版本安装
1. 安装Memcache,相关安装方法可以参见博文: 

2. 下载对应的repcached版本补丁安装文件: 
假设安装的memcahced版本为1.2.8,下载针对该版本最新的补丁:   

wget    
gzip -cd ../repcached-2.2.1-1.2.8.patch.gz | patch -p1   
./configure --enable-replication   
make && make install

方式二:整合版本安装
1. 安装libevent: 

cd /tmp   
wget    
tar zxvf libevent-2.0.22-stable.tar.gz   
cd libevent-2.0.22-stable   
./configure --prefix=/usr/local/lib   
make && make install

2. 将libevent的库文件添加到动态库中: 

vi /etc/ld.so.conf

在最后添加如下行:   
/usr/local/lib //此处为要添加的libevent库目录   
重新加载动态lib库   

ldconfig

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

3. 测试libevent是否安装成功: 

ls -al /usr/lib | grep libevent-

4. 创建启动帐号: 

groupadd memcached   
useradd -g memcached memcached

5. 创建PID进程目录并修改所有者: 

mkdir /var/run/memcached   
chown -R memcached.memcached /var/run/memcached

6. 安装整合memcached-repcached包: 

cd /tmp   
wget    
cp memcached-1.2.8-repcached-2.2.1.tar.gz /usr/local   
cd /usr/local   
tar zxvf memcached-1.2.8-repcached-2.2.1.tar.gz   
mv memcached-1.2.8-repcached-2.2.1 memcached   
cd memcached   
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/lib --enable-replication --enable-64bit

注意:默认memcached单个进程只支持到2G内存,需要更大内存支持的话,需要打开64位支持,编译的时候加参数:   
--enable-64bit

make && make install

提示编译出错:   

make all-recursive   
make[1]: Entering directory `/usr/local/memcached'   
Making all in doc   
make[2]: Entering directory `/usr/local/memcached/doc'   
make[2]: Nothing to be done for `all'.   
make[2]: Leaving directory `/usr/local/memcached/doc'   
make[2]: Entering directory `/usr/local/memcached'   
gcc -DHAVE_CONFIG_H -I. -DNDEBUG -m64 -g -O2 -MT memcached-memcached.o -MD     
MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f     
memcached.c' || echo './'`memcached.c   
memcached.c: In function ‘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]: Leaving directory `/usr/local/memcached'   
make[1]: *** [all-recursive] Error 1   
make[1]: Leaving directory `/usr/local/memcached'   
make: *** [all] Error 2

解决方案:   

vi memcached.c

将下面的几行   

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3a8dc6beb373b3a9042c4c3d43c54afb.html