Home  >  Article  >  Database  >  Memcache 持久性分布式数据库MemcacheDB

Memcache 持久性分布式数据库MemcacheDB

WBOY
WBOYOriginal
2016-06-07 15:05:521429browse

Memcachedb是新浪网基于Memcached(源代码是基于Memcached。)开发的一个分布式的Key-Value存储持久化开源项目。通过为Memcached增加Berkeley DB的持久化存储机制和异步主辅复制机制,使Memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合

 Memcachedb是新浪网基于Memcached(源代码是基于Memcached。)开发的一个分布式的Key-Value存储持久化开源项目。通过为Memcached增加Berkeley DB的持久化存储机制和异步主辅复制机制,使Memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合需要超高性能读写速度、持久化保存的应用场景,例如,将memcachedb应用于新浪博客的管理。如果对Memcached有持久化需求,可以考虑使用memcachedb。

特点:

1.高性能的key-value的读/写

2.高可靠的持久化存储与交易

3.高性能的数据存储与复制

4.Memcahce协议

官网地址:http://memcachedb.org/

项目地址:

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

https://github.com/mplatov/memcachedb

 一、应用场景

从基本的数据存储的角度看mysql、memcached、memcachedb的区别和特点,当然它们肯定不只这点区别。

Memcache 持久性分布式数据库MemcacheDB

memcached因为是非持久存储的,所以它的定位就是缓存。 而memcachedb不是用来做缓存的,它是和mysql同个层次的东西。不一样的是,memcachedb性能要比mysql高,而mysql检索功能比memcachedb强。如果非要从缓存的角度看的话,那memcached就是缓解mysql读压力,而memcachedb则是缓解mysql写压力。 
memcachedb适合应用的场景: 
1.浏览/点击/等统计,也可以局部代替mysql的count函数 
2.标志,例如,JE的“我在干什么”功能 
3.频繁写的地方,访客列表、评论之类的 

二、安装

安装MemcacheDB之前需要安装Libevent和Berkeley Db 
1.先安装libevent 
下载地址: http://www.monkey.org/~provos/libevent/ 

wget http://jaist.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz

tar -zxvf libevent-2.0.22-stable.tar.gz 

cd libevent-2.0.22-stable

./configure --prefix=/home/slim/libevent

make 

make install

2.安装Berkeley Db  (使用root安装)

MemcacheDB 1.2.0 is released, for BerkeleyDB 4.7,所以需要下载 BerkeleyDB 4.7版本
下载地址:http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html

wget http://download.oracle.com/berkeley-db/db-4.7.25.tar.gz

tar -zxvf db-4.7.25.tar.gz 

cd db-4.7.25

cd build_unix/

../dist/configure

make

make install

安装完后,编辑/etc/ld.so.conf将Berkeley+Db运行库的路径添加到系统配置里面

echo "/usr/local/BerkeleyDB.4.7/lib/" >> /etc/ld.so.conf

#重载系统Ld运行库

ldconfig

3.安装memcachedb 
下载地址:http://code.google.com/p/memcachedb/downloads/list 
 tar -zxvf memcachedb-1.2.0.tar.gz 
cd memcachedb-1.2.0/
./configure --enable-threads  --prefix=/home/slim/memcachedb --with-libevent-dir=/home/slim/libevent

make
make install

检查安装:

./bin/memcachedb -h
memcachedb 1.2.0  
-p <num>      TCP监听端口,默认是 21201  
-U <num>      UDP监听端口,默认是 0,也就是关闭。  
-s <file>     使用socket通讯,参数是设置unix socket的路径,此通讯方式只能本地使用  
-a <mask>     unix socket文件的权限,默认是 0700  
-l <ip_addr>  监听地址,默认是 INDRR_ANY  
-d            以守护进程方式运行  
-r            maximize core file limit  
-u <username> 以<username>启动,只有root才能使用,因为memcachedb不允许以root启动  
-c <num>      max simultaneous connections, default is 1024  
-b <num>      item size smaller than <num> will use fast memory alloc, default is 512B  
-v            打印错误和警告信息  
-vv           打印整个交互过程  
-h            print this help and exit  
-i            print license info  
-P <file>     进程PID保存路径,只能在守护进程方式下使用  
-t <num>      线程数,默认是4  
--------------------BerkeleyDB Options-------------------------------  
-m <num>      in-memmory cache size of BerkeleyDB in megabytes, default is 64MB  
-A <num>      underlying page size in bytes, default is 4096, (512B ~ 64KB, power-of-two)  
-f <file>     数据文件名, 默认是 'data.db'  
-H <dir>      数据保存目录,默认是 '/data1/memcachedb'  
-B <db_type>  数据结构类型,有 'btree' 和 'hash'两种. 默认是 'btree'  
-L <num>      log buffer size in kbytes, default is 32KB  
-C <num>      每隔多少秒checkpoint, 设置为0将实时写入硬盘, 默认是5分钟  
-T <num>      do memp_trickle every <num> seconds, 0 for disable, default is 30 seconds  
-e <num>      percent of the pages in the cache that should be clean, default is 60%  
-D <num>      do deadlock detecting every <num> millisecond, 0 for disable, default is 100ms  
-N            设置 DB_TXN_NOSYNC 标志来改善性能,但是牺牲事务的持久性。默认为 关闭  
--------------------Replication Options-------------------------------  
-R            主服务器提供同步数据的地址和端口,主从模式必须设置  
-O            从服务器同步源地址和端口  
-M/-S         以主或从服务器启动  
-n            允许从服务器数量, 默认是2台  
-----------------------------------------------------------------------  </num></num></num></num></num></num></num></db_type>
</dir></file></num></num></num></file></num></num></num></username></username></ip_addr></mask></file></num></num>
关于-C和-N选项涉及到数据完整性,会在下面会说明一下

注意:

若报错”./bin/memcachedb: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory“.

libevent库的路径添加到系统配置里面

echo "/home/slim/libevent/lib" >> /etc/ld.so.conf

ldconfig

4.创建数据保存点 

cd ~/memcachedb

mkdir data/11211 -p

四、使用

1.单机模式

./bin/memcachedb  -p 11211  -d -r -H  /home/slim/memcachedb/data/11211 -v >>/home/slim/memcachedb/data/11211.log 2>&1  

2.主从模式

./bin/memcachedb  -p 11211  -d -r -H  /home/slim/memcachedb/data/11211 -N -R 192.168.13.102:11200 -M 

主服务器,用11200来同步数据  

./bin/memcachedb  -p 11311  -d -r -H  /home/slim/memcachedb/data/11311 -N -R 192.168.13.102:11300 -O  192.168.13.102:11200 -S 

从服务器,主从模式-R是必须设置的。

从服务器不能储存数据。

3.测试是否同步

# telnet 192.168.13.102 11211
set yy 0 0 4  
yyyy  
STORED  
get yy  
VALUE yy 0 4  
yyyy  
END  
#telnet 192.168.13.102 11311
get yy  
VALUE yy 0 4  
yyyy  
END

五、备份和恢复 
1.热备份 
因为memcachedb是基于bdb的,所以可以用bdb自带的热备份工具备份 
[root@srv willko]# /usr/local/BerkeleyDB.4.7/bin/db_hotbackup -h /data/21201/ -b ./bak/  
-h是数据的目录  
-b是备份的目录  
恢复的话,启动memcacedb的数据目录设置成备份目录就可以了 
2.单机模式crash恢复 
bdb的事务处理和很多事物引擎相似,都是先写日志,数据先保存在内存。所以crash以后,可以通过日志来恢复。启动memcachedb的时候,可以使用-C选项来设置checkpoint的间隔时间,如果设置得太长,恢复时间越长。 
/usr/local/BerkeleyDB.4.7/bin/db_recover -cf -h /data/21201/  
-h是你的数据目录  
3.模拟crash 

#./bin/memcachedb  -p 11211 -d -r -H  /home/slim/memcachedb/data/11211 -v >>/home/slim/memcachedb/data/11211.log  2>&1  -P /home/slim/memcachedb/data/11211 .pid  
# telnet 192.168.13.102 11211
set t 0 0 4   
hhhh       #设置键为t,值为hhhh的  
STORED  
get t  
VALUE t 0 4  
hhhh  
END  
quit  
Connection closed by foreign host.  
# kill -9 `cat /home/slim/memcachedb/data/11211 .pid  ` #用-9来模拟crash  
# /usr/local/BerkeleyDB.4.7/bin/db_recover -cf -h /home/slim/memcachedb/data/11211
recovery 100% complete  
# ./bin/memcachedb  -p 11211 -d -r -H  /home/slim/memcachedb/data/11211 -v >>/home/slim/memcachedb/data/11211.log  2>&1  -P /home/slim/memcachedb/data/11211 .pid  
# telnet 192.168.13.102 11211  
get t  
VALUE t 0 4  
hhhh #还可以获得crash前设置的值  
END  

4.主从模式的crash恢复

主从模式下可以考虑启用-N选项来提高性能,如果不是用-N,日志是实时写到硬盘,这也是为什么crash以后可以通过日志恢复的原因。 但是如果使用-N来提高性能是有代价的,也就是日志不实时写硬盘,那crash以后无法保证完全恢复,没写入硬盘的数据无法通过日志恢复。但是如果你做了主从模式,那就无需担心,因为当事务提交以后,会马上同步到slave。 也就是说使用-N选项后,crash后通过slave来恢复。 


参考文章

Memcachedb使用手册

Memcachedb介绍、编译以及安装

轻量级持久存储系统 MemcacheDB

Memcachedb百度百科

Memcachedb的缓存解决方案(nginx小文件缓存)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn