一、引言
写有关Nosql数据库有关的文章已经有一段时间了,可以高兴的说,Redis暂时就算写完了,从安装到数据类型,在到集群,几乎都写到了。如果以后有了心得,再补充吧。然后就是MongoDB了,有关MongoDB的文章也写了一些了,安装、配置和基本使用都写了,然后就是一些高级的课题了。最近由于工作比较忙的原因,写东西就慢了,MongoDB的文章也暂缓了。今天正好有时间,我就把在Linux环境下安装和配置Memcached的过程写下来。其实这个文章不是今天写的了,写了有几天了,只是利用今天把文章发出来。
二、Memcached简介
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。 本质上,它是一个简洁的key-value存储系统。和Redis是有些类似的,但是也有很大的不同了。
三、Memcached在Linux上的安装
今天我们开始讲如何在Linux系统上安装和配置 Memcached 服务,过程很简单,马上开始我们的安装吧。
1、准备安装环境
yum install gcc wget make cmake libtool autoconf
2、下载相应的库和Memcached源码
libevent,因为Memcached依赖这个Libevent库,所以必须先下载安装
官网地址:http://libevent.org/
3、先安装 Libevent 库文件
首先检查系统中是否安装了libevent
@H_301_56@ [root@linux memcached]# pwd /root/software/download/@H_301_56@memcached [root@linux memcached]# rpm -qa |@H_301_56@grep libevent [root@linux memcached]# //@H_301_56@无值说明libevent没有安装
如果安装了则查看libevent的安装路径,后续安装时需要用到
[root@linux bin]# rpm -@H_301_56@ql libevent 未安装软件包 libevent [root@linux bin]#
如果没有安装,则先安装libevent
3.1、下载libevent
@H_301_56@ [root@linux download]# ls libevent memcached mongodb redis [root@linux download]# cd libevent/@H_301_56@ [root@linux libevent]# wget https:@H_301_56@github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz @H_301_56@ [root@linux libevent]# ls libevent-2.1.8-@H_301_56@stable.tar.gz [root@linux libevent]#
3.2、tar 解压Libevent库文件
@H_301_56@ [root@linux libevent]# pwd /root/software/download/@H_301_56@libevent [root@linux libevent]# tar zxvf libevent-stable.tar.gz [root@linux libevent]# ls libevent-8-stable libevent-8-stable.tar.gz
3.3、cd 进入根目录
[root@linux libevent]# cd libevent-stable [root@linux libevent-stable]# pwd /root/software/download/libevent/libevent-stable [root@linux libevent-8-stable]# ./configure -h/-help @H_301_56@在根目录下面查看一下配置文件,方便以后使用
3.4、设置安装路径,安装目录可以自定义。我的安装目录是:/root/application/program/memcached/libevent
[root@linux libevent-8-stable]# ./configure --prefix=/root/application/program/memcached/@H_301_56@libevent checking for a BSD-compatible install... /usr/bin/install -@H_301_56@c checking whether build environment @H_301_56@is@H_301_56@ sane... yes checking @H_301_56@for a thread-safe mkdir -p... /usr/bin/mkdir -@H_301_56@p checking @H_301_56@for@H_301_56@ gawk... gawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking whether make supports nested variables... (cached) yes checking @H_301_56@ style of include used by make... GNU checking @H_301_56@ gcc... gcc ...... ...... checking size of pthread_t... 8@H_301_56@ checking @H_301_56@for library containing ERR_remove_thread_state... -@H_301_56@lcrypto checking that generated files are newer than configure... done configure: creating ./@H_301_56@config.status config.status: creating libevent.pc config.status: creating libevent_openssl.pc config.status: creating libevent_pthreads.pc config.status: creating libevent_core.pc config.status: creating libevent_extra.pc config.status: creating Makefile config.status: creating config.h config.status: creating evconfig-@H_301_56@private@H_301_56@.h config.status: evconfig-@H_301_56@private.h @H_301_56@ unchanged config.status: executing depfiles commands config.status: executing libtool commands [root@linux libevent-8-stable]#
3.5、编译和安装 make && make install
[root@linux libevent-8-stable]# make && make install
4、安装Memcached源文件
//这不可以不执行,默认有相应的权限。如果没有,修改安装包的执行操作权限,chmod 777 memcached-1.4.15.tar.gz
4.1、下载 memcached-1.4.15 源程序
@H_301_56@ [root@linux memcached]# pwd /root/software/download/@H_301_56@memcached [root@linux memcached]# wget memcached 的地址 [root@linux memcached]# ls memcached-1.4.15@H_301_56@.tar.gz [root@linux memcached]#
4.2、解压Memcached 压缩文件
@H_301_56@memcached [root@linux memcached]# tar zxvf memcached.tar.gz memcached-15/@H_301_56@ memcached-Makefile.am memcached-trace.h memcached-config.guess memcached-cache.c memcached-util.c memcached-assoc.c .... .... memcached-15/doc/xml2rfc/rfc2629-@H_301_56@other.ent memcached-15/doc/xml2rfc/reference.RFC.0768@H_301_56@.xml memcached-xhtml.ent memcached-noinc.xsl memcached-refchk.xsl memcached-15/doc/xml2rfc/@H_301_56@rfc2629.dtd memcached-15/doc/@H_301_56@protocol.txt memcached-Makefile memcached-compile [root@linux memcached]#
4.3、进入到 memcached 根目录
@H_301_56@ [root@linux memcached]# ls memcached-15 memcached-.tar.gz [root@linux memcached]# cd memcached- [root@linux memcached-]# pwd /root/software/download/memcached/memcached-15
4.4、配置安装目录
[root@linux memcached- [root@linux memcached]# ./configure -h/-help @H_301_56@可以查看memcached 配置文件,方便使用 @H_301_56@15]# ./configure --prefix=/root/application/program/memcached/memcachedfile --with-libevent=/root/application/program/memcached/@H_301_56@libevent checking build system type... x86_64-unknown-linux-@H_301_56@gnu checking host system type... x86_64-unknown-linux-@H_301_56@gnu checking target system type... x86_64-unknown-linux-@H_301_56@gnu checking @H_301_56@c checking whether build environment @H_301_56@ sane... yes checking @H_301_56@p .... .... checking @H_301_56@ xml2rfc... no checking @H_301_56@for xsltproc... /usr/bin/@H_301_56@xsltproc configure: creating ./@H_301_56@config.status config.status: creating Makefile config.status: creating doc/@H_301_56@Makefile config.status: creating config.h config.status: executing depfiles commands [root@linux memcached-15]#
4.5、编译和安装 make && make install
[root@linux memcached-15]# make && make install
5、启动Memcached服务环境
@H_301_56@启动程序必须在安装Memcached服务的目录的Bin目录下执行操作 @H_301_56@ [root@linux bin]# pwd /root/application/program/memcached/memcachedfile/@H_301_56@bin [root@linux bin]# ./memcached -m 64 -p 11211 -u nobody -@H_301_56@vvv 前端 slab @H_301_56@class 1: chunk size 96 perslab 10922@H_301_56@ slab @H_301_56@2: chunk size 120 perslab 8738@H_301_56@3: chunk size 152 perslab 6898@H_301_56@4: chunk size 192 perslab 5461@H_301_56@5: chunk size 240 perslab 4369@H_301_56@6: chunk size 304 perslab 3449@H_301_56@ .... .... <29@H_301_56@ server listening (udp) <30@H_301_56@ server listening (udp) @H_301_56@当前处于阻塞状态,说明Memcached启动成功,但是该窗口不能关闭,否则服务也会关闭 @H_301_56@ [root@linux bin]# ./memcached -m d 后台启动 [root@linux bin]# @H_301_56@查看memcache是否开启: [root@linux ~]# netstat -ntpl|grep memcache
6、关闭Memcached服务环境
[root@linux ~@H_301_56@]# kill PID(Memcached服务的进程号) [root@linux ~]# kill 12177
7、配置
启动参数介绍如下:和上面的命令不对应
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,这里是10MB,
-u是运行Memcache的用户,这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,这里设置了256,按照服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,也可以启动多个守护进程,不过端口不能重复。
8、我们可以查看memcached命令的帮助文件
@H_301_56@ 1 @H_301_56@ [root@linux bin]# pwd @H_301_56@ 2 /root/application/program/memcached/memcachedfile/@H_301_56@bin @H_301_56@ 3 [root@linux bin]# ./memcached -h/-@H_301_56@help @H_301_56@ 4 memcached 15 @H_301_56@ 5 -p <num> TCP port number to listen on (@H_301_56@default: 11211@H_301_56@) @H_301_56@ 6 -U <num> UDP port number to listen on (@H_301_56@11211,0 @H_301_56@ off) @H_301_56@ 7 -s <file>@H_301_56@ UNIX socket path to listen on (disables network support) @H_301_56@ 8 -a <mask> access mask @H_301_56@for UNIX socket,@H_301_56@in octal (@H_301_56@0700@H_301_56@ 9 -l <addr> @H_301_56@interface to listen on (@H_301_56@default@H_301_56@: INADDR_ANY,all addresses) @H_301_56@10 <addr> may be specified @H_301_56@as host:port. If you don't specify a port number,the value you specified with -p or -U is used. You may specify multiple addresses separated by comma or by using -l multiple times @H_301_56@11 -d run @H_301_56@as@H_301_56@ a daemon @H_301_56@12 -@H_301_56@r maximize core file limit @H_301_56@13 -u <username> assume identity of <username> (only when run @H_301_56@ root) @H_301_56@14 -m <num> max memory to use @H_301_56@for items @H_301_56@in megabytes (@H_301_56@64@H_301_56@ MB) @H_301_56@15 -M @H_301_56@return@H_301_56@ error on memory exhausted (rather than removing items) @H_301_56@16 -c <num> max simultaneous connections (@H_301_56@1024@H_301_56@17 -k @H_301_56@lock down all paged memory. Note that there @H_301_56@is a limit on how much memory you may @H_301_56@lock. Trying to allocate more than that would fail,so be sure you @H_301_56@set the limit correctly @H_301_56@for the user you started the daemon with (not @H_301_56@for -u <username> user;under sh @H_301_56@this @H_301_56@is done with ulimit -S -l NUM_KB'@H_301_56@). @H_301_56@18 -v verbose (print errors/warnings @H_301_56@while @H_301_56@in @H_301_56@event@H_301_56@ loop) @H_301_56@19 -vv very verbose (also print client commands/@H_301_56@reponses) @H_301_56@20 -vvv extremely verbose (also print @H_301_56@internal@H_301_56@ state transitions) @H_301_56@21 -h print @H_301_56@this@H_301_56@ help and exit @H_301_56@22 -@H_301_56@i print memcached and libevent license @H_301_56@23 -P <file> save PID @H_301_56@in <file>,only used with -@H_301_56@d option @H_301_56@24 -f <factor> chunk size growth factor (@H_301_56@1.25@H_301_56@25 -n <bytes> minimum space allocated @H_301_56@for key+value+flags (@H_301_56@48@H_301_56@26 -L Try to use large memory pages (@H_301_56@if available). Increasing the memory page size could reduce the number of TLB misses and improve the performance. In order to @H_301_56@get large pages @H_301_56@from the OS,memcached will allocate the total item-cache @H_301_56@in@H_301_56@ one large chunk. @H_301_56@27 -D <@H_301_56@char> Use <@H_301_56@char> @H_301_56@as the delimiter between key prefixes and IDs.This @H_301_56@is used @H_301_56@for per-prefix stats reporting. The @H_301_56@default @H_301_56@is ":" (colon). If @H_301_56@this option @H_301_56@is specified,stats collection @H_301_56@is turned on automatically; @H_301_56@if not,then it may be turned on by sending the stats detail on"@H_301_56@ command to the server. @H_301_56@28 -t <num> number of threads to use (@H_301_56@4@H_301_56@29 -R Maximum number of requests per @H_301_56@event,limits the number of requests process @H_301_56@for a given connection to prevent starvation (@H_301_56@20@H_301_56@30 -@H_301_56@C Disable use of CAS @H_301_56@31 -b Set the backlog queue limit (@H_301_56@32 -B Binding protocol - one of ascii,binary,or auto (@H_301_56@33 -I Override the size of each slab page. Adjusts max item size (@H_301_56@: 1mb,min: 1k,max: 128m) @H_301_56@34 -@H_301_56@o Comma separated list of extended or experimental options @H_301_56@35 - (EXPERIMENTAL) maxconns_fast: immediately close @H_301_56@new connections @H_301_56@if@H_301_56@ over maxconns limit @H_301_56@36 - hashpower: An integer multiplier @H_301_56@for how large the hash table should be. Can be grown at runtime @H_301_56@if not big enough.Set @H_301_56@this based on STAT hash_power_level before a restart. @H_301_56@37 [root@linux bin]#
9、我们使用telnet命令来连接Linux系统上的Memcached服务。
9.1、在Window环境下通过telnet连接Memcached服务
@H_301_56@ 1 C:\Users\Administrator>telnet192.168.127.130 11211 @H_301_56@ 2 @H_301_56@ 3 @H_301_56@当前处于黑屏状态,等待输入命令,直接输入stats,直接回车。 @H_301_56@ 4 @H_301_56@ stats @H_301_56@ 5 STAT pid 12177 @H_301_56@ 6 STAT uptime 619 @H_301_56@ 7 STAT time 1522221744 @H_301_56@ 8 STAT version 9 STAT libevent stable @H_301_56@10 STAT pointer_size 64 @H_301_56@11 STAT rusage_user 0.005197 @H_301_56@12 STAT rusage_system 0.067566 @H_301_56@13 STAT curr_connections 10 @H_301_56@14 STAT total_connections 12 @H_301_56@15 STAT connection_structures 11 @H_301_56@16 STAT reserved_fds 20 @H_301_56@17 STAT cmd_get 0 @H_301_56@18 STAT cmd_set 19 STAT cmd_flush 20 STAT cmd_touch 21 STAT get_hits 22 STAT get_misses 23 STAT delete_misses 24 STAT delete_hits 25 STAT incr_misses 26 STAT incr_hits 27 STAT decr_misses 28 STAT decr_hits 29 STAT cas_misses 30 STAT cas_hits 31 STAT cas_badval 32 STAT touch_hits 33 STAT touch_misses 34 STAT auth_cmds 35 STAT auth_errors 36 STAT bytes_read 37 @H_301_56@37 STAT bytes_written 21 @H_301_56@38 STAT limit_maxbytes 67108864 @H_301_56@39 STAT accepting_conns 1 @H_301_56@40 STAT listen_disabled_num 41 STAT threads 4 @H_301_56@42 STAT conn_yields 43 STAT hash_power_level 16 @H_301_56@44 STAT hash_bytes 524288 @H_301_56@45 STAT hash_is_expanding 46 STAT bytes 47 STAT curr_items 48 STAT total_items 49 STAT expired_unfetched 50 STAT evicted_unfetched 51 STAT evictions 52 STAT reclaimed 53 @H_301_56@ END @H_301_56@54 @H_301_56@55 @H_301_56@能连接上,说明memcache成功启用,可使用stats命令查看当前状态
9.2、在Linux环境下使用telnet命令连接Memcached服务
@H_301_56@ 1 [root@linux bin]# telnet 192.168.127.130 2 Trying 127.130@H_301_56@... @H_301_56@ 3 Connected to . @H_301_56@ 4 Escape character @H_301_56@^] 5 @H_301_56@当前窗口处于等待状态,可以直接输入命令执行 @H_301_56@ 6 stats @H_301_56@直接运行该命令 @H_301_56@ 7 STAT pid 8 STAT uptime 9 STAT time 10 STAT version 11 STAT libevent 12 STAT pointer_size 13 STAT rusage_user 14 STAT rusage_system 15 STAT curr_connections 16 STAT total_connections 17 STAT connection_structures 18 STAT reserved_fds 19 STAT cmd_get 20 STAT cmd_set 21 STAT cmd_flush 22 STAT cmd_touch 23 STAT get_hits 24 STAT get_misses 25 STAT delete_misses 26 STAT delete_hits 27 STAT incr_misses 28 STAT incr_hits 29 STAT decr_misses 30 STAT decr_hits 31 STAT cas_misses 32 STAT cas_hits 33 STAT cas_badval 34 STAT touch_hits 35 STAT touch_misses 36 STAT auth_cmds 37 STAT auth_errors 38 STAT bytes_read 39 STAT bytes_written 40 STAT limit_maxbytes 41 STAT accepting_conns 42 STAT listen_disabled_num 43 STAT threads 44 STAT conn_yields 45 STAT hash_power_level 46 STAT hash_bytes 47 STAT hash_is_expanding 48 STAT bytes 49 STAT curr_items 50 STAT total_items 51 STAT expired_unfetched 52 STAT evicted_unfetched 53 STAT evictions 54 STAT reclaimed 55 @H_301_56@56 @H_301_56@57 @H_301_56@能连接上,说明memcache成功启用,可使用stats命令查看当前状态
10、查看Memcached服务是否启动:ps aux|grep memcached 或者 ps -ef|grep memcached
[root@linux ~]# ps aux|@H_301_56@grep memcached nobody 12177 0.0 0.0 323584 1052 ? Ssl 15:12 0:00 ./memcached -m d root 12292 116860 1012 pts/0 S+ 33 00 grep --color=@H_301_56@auto memcached [root@linux ~]# ps -ef|@H_301_56@12177 1 0 12 ? 00:12295 11965 33 pts/0 00 grep --color=auto memcached
11、如果我们通过telnet命令无法连接Linux上的Linux系统上的Memcached服务,可能和端口有关系。
@H_301_56@在使用window的cmd连接Linux环境上的Memcached的时候,必须先把11211这个端口增加到防火墙,否则无法连接,执行命令如下:@H_301_56@ [root@linux ~]# firewall-cmd --zone=@H_301_56@public --add-port=11211/tcp --@H_301_56@permanent [root@linux ~]# firewall-cmd --@H_301_56@reload @H_301_56@再次重新连接就没有问题了
四、总结
好了,写完了。有关Memcached的文章可能要晚一点再出来了,先要把MongoDB的文章写完,再来写有关Memcached的文章了,学习和使用也需要一个过程。还有一个原因,由于Redis的崛起和强大,已经完全可以替代Memcached了,而且很多的公司也不使用它了,所以由于原因种种,该系列就往后推了。