设为首页 收藏本站
查看: 948|回复: 0

[经验分享] 第2周 简单而有效的键值型内存数据库memcached

[复制链接]

尚未签到

发表于 2015-11-18 14:48:17 | 显示全部楼层 |阅读模式
memcached 是一个键值型的内存数据库。  


http://www.memcached.org/
http://www.memcached.org/files/memcached-1.4.16.tar.gz


memcached的特点:
全内存运转
哈希方式存储简单文本协议进行数据通信
只操作字符型数据
其它类型数据由应用解释,序列化以及反序列化
集群也由应用进行控制,采用一致性哈希算法  
  

一、 Memcached安装
  
  1.1. 准备工作
  1.1.1.1. 准备安装文件

下载memcached与libevent的安装文件

http://memcached.googlecode.com/files/memcached-1.4.16.tar.gz(memcached下载地址)

https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz(libevent下载地址)

1.2. 具体安装步骤

1.2.1. 具体安装步骤

1.由于memcached依赖于libevent,因此需要安装libevent。由于linux系统可能默认已经安装libevent,执行命令:

rpm -qa|grep libevent

查看系统是否带有该安装软件,如果有执行命令:

rpm -e libevent-1.4.13-4.el6.x86_64 --nodeps(由于系统自带的版本旧,忽略依赖删除)

2. 安装libevent命令:

tar zxvf libevent-2.0.21-stable.tar.gz

  cd libevent-2.0.21-stable

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

  make

  make install
  至此libevent安装完毕;测试libevent是否安装成功:
  

[iyunv@linux memcached]#  ls -al /usr/lib | grep libevent
lrwxrwxrwx   1 root root       21 12-10 19:00 libevent-2.0.so.5 -> libevent-2.0.so.5.1.9
-rwxr-xr-x   1 root root   769655 12-10 19:00 libevent-2.0.so.5.1.9
-rw-r--r--   1 root root   999618 12-10 19:00 libevent.a
lrwxrwxrwx   1 root root       26 12-10 19:00 libevent_core-2.0.so.5 -> libevent_core-2.0.so.5.1.9
-rwxr-xr-x   1 root root   460431 12-10 19:00 libevent_core-2.0.so.5.1.9
-rw-r--r--   1 root root   615610 12-10 19:00 libevent_core.a
-rwxr-xr-x   1 root root      970 12-10 19:00 libevent_core.la
lrwxrwxrwx   1 root root       26 12-10 19:00 libevent_core.so -> libevent_core-2.0.so.5.1.9
lrwxrwxrwx   1 root root       27 12-10 19:00 libevent_extra-2.0.so.5 -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x   1 root root   323470 12-10 19:00 libevent_extra-2.0.so.5.1.9
-rw-r--r--   1 root root   384080 12-10 19:00 libevent_extra.a
-rwxr-xr-x   1 root root      977 12-10 19:00 libevent_extra.la
lrwxrwxrwx   1 root root       27 12-10 19:00 libevent_extra.so -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x   1 root root      935 12-10 19:00 libevent.la
lrwxrwxrwx   1 root root       29 12-10 19:00 libevent_openssl-2.0.so.5 -> libevent_openssl-2.0.so.5.1.9
-rwxr-xr-x   1 root root    71205 12-10 19:00 libevent_openssl-2.0.so.5.1.9
-rw-r--r--   1 root root    79544 12-10 19:00 libevent_openssl.a
-rwxr-xr-x   1 root root     1006 12-10 19:00 libevent_openssl.la
lrwxrwxrwx   1 root root       29 12-10 19:00 libevent_openssl.so -> libevent_openssl-2.0.so.5.1.9
lrwxrwxrwx   1 root root       30 12-10 19:00 libevent_pthreads-2.0.so.5 -> libevent_pthreads-2.0.so.5.1.9
-rwxr-xr-x   1 root root    14297 12-10 19:00 libevent_pthreads-2.0.so.5.1.9
-rw-r--r--   1 root root    11826 12-10 19:00 libevent_pthreads.a
-rwxr-xr-x   1 root root      998 12-10 19:00 libevent_pthreads.la
lrwxrwxrwx   1 root root       30 12-10 19:00 libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.9
lrwxrwxrwx   1 root root       21 12-10 19:00 libevent.so -> libevent-2.0.so.5.1.9



  

3. 安装memcached命令:

tar zxvf memcached-1.4.2.tar.gz

  cd memcached-memcached-1.4.2

        ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/

make

make install
    至此memcached安装完毕;测试是否成功安装memcached:
  [iyunv@linux memcached]# ls -al /usr/local/bin/mem*

-rwxr-xr-x 1 root root 245919 12-10 19:03 /usr/local/bin/memcached
  



2.2.2. 可能存在的错误以及解决方案
  如果出现客户端连接不上memcached的情况,请将防火墙关闭或将防火墙中的memcached端口(11211端口)打开。
  


  2.1.1. 启动memcached

1.打开一个终端,输入以下命令:

/usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 –P /tmp/memcached.pid

[iyunv@linux memcached]# ps aux | grep memcached

root     15424  0.0  0.0  55408  2020 ?        Ssl  19:27   0:00 /usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 -P /tmp/memcached.pid

root     15523  0.0  0.0   5196   692 pts/1    S+   19:38   0:00 grep memcached



启动参数说明:

-d 选项是启动一个守护进程。

-u root 表示启动memcached的用户为root。

-m 是分配给Memcache使用的内存数量,单位是MB,默认64MB。

-M return error on memory exhausted (rather than removing items)。

-u 是运行Memcache的用户,如果当前为root 的话,需要使用此参数指定用户。

-l 是监听的服务器IP地址,默认为所有网卡。

-p 是设置Memcache的TCP监听的端口,最好是1024以上的端口。

-c 选项是最大运行的并发连接数,默认是1024。

-P 是设置保存Memcache的pid文件。

-f <factor> chunk size growth factor (default: 1.25)。

-I Override the size of each slab page. Adjusts max item size(1.4.2版本新增)。  也可以启动多个守护进程,但是端口不能重复

2.查看memcached启动命令

ps aux|grep memcached



2.1.2. 停止memcached

打开一个终端,输入以下命令:

ps -ef | grep memcached

在服务开启的状态下,会出现如下图所示的提示:



其中5929为memcached服务的pid

输入一下命令终止memcached服务

kill -9 5929
  参考链接:
  

http://blog.iyunv.com/clarkcc1988/article/details/8509822
http://www.cnblogs.com/zgx/archive/2011/08/10/2134097.html  
  



二、测试memcached
  

[iyunv@linux ~]# telnet 10.10.10.8 11211
Trying 10.10.10.8...
Connected to linux (10.10.10.8).
Escape character is '^]'.
set abc 0 0 3
pub
STORED
get abc
VALUE abc 0 3
pub
ENDset <key> <flag> <expires> <byte>

flag 用于指定是否压缩数据,0不压缩,1压缩

expires 指定数据保存的时间,一个方法是秒数(不超过30天),另一种可以是unix时间戳指定,0为有效期无线

byte 保存&#20540;的字节数
  
  



set ct 0 0 1
1
STORED
incr ct 1     --加1,变为2
2
get ct
VALUE ct 0 1
2
END
incr ct 2  --加2,变为4
4
get ct     
VALUE ct 0 1
4
END
delete ct  --删除键
DELETED
get ct
ENDset test 0 0 4
test
STORED
get test
VALUE test 0 4
test
END
append test 0 0 3   --追加‘add’串
add
STORED
get test
VALUE test 0 7
testadd
ENDflush_all --清楚所有的key—value
  quit --退出

三、memcached集群
  启动memcached多节点

/usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 -P /tmp/memcached.pid

/usr/local/memcached/bin/memcached -d -m 256 -u root -p 11212 -c 1024

/usr/local/memcached/bin/memcached -d -m 256 -u root -p 11213 -c 1024


  

[iyunv@linux libevent-2.0.21-stable]# ps aux | grep memcache

root      3837  0.0  0.0  54380   952 ?        Ssl  18:16   0:00 /usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 -P /tmp/memcached.pid

root      3844  0.0  0.0  54380   932 ?        Ssl  18:16   0:00 /usr/local/memcached/bin/memcached -d -m 256 -u root -p 11212 -c 1024

root      3853  0.0  0.0  55124   932 ?        Ssl  18:16   0:00 /usr/local/memcached/bin/memcached -d -m 256 -u root -p 11213 -c 1024

root      3862  0.0  0.0   5196   712 pts/0    S&#43;   18:16   0:00 grep memcache


  可以看见上面的命令就可以启动多个memcached,缓存数据是根据key来哈希运算然后决定缓存到具体哪个节点的。读取的时候也是根据key来哈希之后到相应的节点去取&#20540;。


DSC0000.jpg


  每个节点管理一点范围的哈希&#20540;。如果一个节点挂了,就把这个这点的管理范围顺时针分给另外一个节点。
  如果添加一个节点,就把顺时针的节点管理范围一分为二,分一半给新增的节点管理。
  这样做的原因就是为了只造成小范围的数据波动,在这里就有一个问题,节点1挂了,那么节点1里面缓存的数据就没有了,需要重新在节点2再缓存一次。
  这就需要另外一个东西:高可用方案repcached,repcached可以接管其它节点的缓存,在节点之间相互复制缓存。


  


  安装repcached
  参考:http://www.cnblogs.com/zhoujinyi/archive/2013/04/23/3036862.html


  # rpm -ivh libevent-devel-1.4.13-1.i386.rpm  --nodeps
warning: libevent-devel-1.4.13-1.i386.rpm: Header V3 DSA signature: NOKEY, key ID e8562897
Preparing...                ########################################### [100%]
1:libevent-devel         ########################################### [100%]
# tar -zxvf memcached-1.2.8-repcached-2.2.1.tar.gz
# cd memcached-1.2.8-repcached-2.2.1
# ./configure --enable-replication --program-transform-name=s/memcached/repcached/ --with-libevent=/usr/local/libevent/
# make&&make install
--不能以root身份运行
$ /usr/local/bin/repcached -d -m 64 -u nobody -p 11211 -c 1024 -v
$ /usr/local/bin/repcached -d -m 64 -u nobody -p 11212 -c 1024 -x 127.0.0.1 -v


  注意:make的时候报错

memcached.c: 在函数‘add_iov’中:
memcached.c:
696:30: 错误: ‘IOV_MAX’未声明(在此函数内第一次使用)
memcached.c:
696:30: 附注: 每个未声明的标识符在其出现的函数内只报告一次
make[2]: *** [memcached-memcached.o] 错误 1
  需要修改 memcached.c 文件:

DSC0001.gif
/* FreeBSD 4.x doesn't have IOV_MAX exposed. */
#ifndef IOV_MAX
#if defined(__FreeBSD__) || defined(__APPLE__)
# define IOV_MAX
1024
#endif
#endif
改成:
/* FreeBSD 4.x doesn't have IOV_MAX exposed. */
#ifndef IOV_MAX
# define IOV_MAX
1024
#endif

再make&&make install,编译之后退出root用户。
  


  测试同步缓存


  [oracle@linux ~]$ telnet 10.10.10.8 11211
Trying 10.10.10.8...
Connected to linux (10.10.10.8).
Escape character is '^]'.
set test 0 0 4
test
STORED
get test
VALUE test 0 4
test
END
quit
Connection closed by foreign host.
[oracle@linux ~]$ telnet 10.10.10.8 11212
Trying 10.10.10.8...
Connected to linux (10.10.10.8).
Escape character is '^]'.
get test             --正向复制
VALUE test 0 4
test
END
set ing 0 0 3
ing
STORED
get ing
VALUE ing 0 3
ing
END
quit
Connection closed by foreign host.
[oracle@linux ~]$ telnet 10.10.10.8 11211
Trying 10.10.10.8...
Connected to linux (10.10.10.8).
Escape character is '^]'.
get ing                    --反向复制
VALUE ing 0 3
ing
END
quit
Connection closed by foreign host.





版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140796-1-1.html 上篇帖子: win7下安装memcached 下篇帖子: eAccelerator与memcached的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表