memcached使用及运维.ppt_第1页
memcached使用及运维.ppt_第2页
memcached使用及运维.ppt_第3页
memcached使用及运维.ppt_第4页
memcached使用及运维.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Memcached使用及运维 By 薛长俊 2013-8 介绍 安装和使用 周边 Memcached 应用示例 介绍 介绍 Memcached是国外社区网站 LiveJournal 的开发团队开发的高性能的分布式 内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库 访问次数,以提高动态Web应用的速度、提高可扩展性。 memcache是一个自由和开放源代码、高性能、分布式的内存对象缓存系统。 用于加速动态web应用程序,减轻数据库负载。 介绍 Memcached运行图 介绍 Memcached特征 基于C/S架构,协议简单 ; 基于libevent的事件处理 ; 内置内存存储方式 ; 基于客户端的memcached分布式。 适用场景 需要分布式部署的; 需要频繁访问相同数据的; 需要数据共享的。 介绍 基于C/S架构,协议简单 服务端启动memcached进程; 客户端可以通过telnet操作,也可以通过各种编程语言实现的客户端程序存取 数据及查询状态; memcached的服务器与客户端通信并不使用复杂的XML等格式,而使用简单 的基于文本行的协议。 基于libevent的事件处理 libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统: Windows/Linux/BSD/Solaris 等操作系统的的事件处理; 包装的接口包括:poll、select(Windows)、epoll(Linux)、kqueue(BSD)、 /dev/pool(Solaris); Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发 情况下,仍旧能够保持快速的响应能力。 介绍 数据存储方式:Slab Allocation Slab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特 定长度的块,以完全解决内存碎片问题。 Slab Allocation的原理相当简单。 将分配的内存分割成各种尺寸的块( chunk),并把尺寸相同的块分成组(chunk的集合) Slab Alloction 构造图 介绍 数据存储方式:Slab Allocation Page:分配给Slab的内存空间,默认是1MB。分配给Slab之后根据slab的大 小切分成chunk。 Chunk:用于缓存记录的内存空间。 Slab Class:特定大小的chunk的组。 memcached根据收到的数据的大小,选择最适合数据大小的slab。 memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然 后将数据缓存于其中。 Slab Alloction 分配图 介绍 数据存储方式:Slab Allocation Slab Alloction 缺点:由于分配的是特定长度的内存,因此无法有效利用分配 的内存。例如,将100字节的数据缓存到128字节的chunk中,剩余的28字节 就浪费了。 介绍 数据过期方式-Lazy Expiration memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳, 检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此, memcached不会在过期监视上耗费CPU时间。 数据过期方式-LRU memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新 记录时空间不足的情况,此时就要使用名为 Least Recently Used(LRU)机 制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此, 当memcached的内存空间不足时(无法从slab class 获取到新的空间时), 就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用 角度来看,该模型十分理想。 介绍 基于客户端的分布式 选择服务器节点常见算法: 1.余数式hash算法 2.一致性hash算法 安装和使用 安装部署 cd /root/install wget /store/memcached-1.4.5.tar.gz yum -y install libevent libevent-devel find ./ -type f -name *.tar.gz -exec tar -zxf ; cd /root/install/memcached-1.4.5 ./configure -prefix=/opt/soft/memcached-1.4.5 make clean make make install ln -s /opt/soft/memcached-1.4.5/ /opt/soft/memcached 启动参数 -p 监听的TCP端口(默认: 11211) -U 监听的UDP端口(默认: 11211, 0表示不监听) -s 用于监听的UNIX套接字路径(禁用网络支持) -a UNIX套接字访问掩码,八进制数字(默认:0700) -l 监听的IP地址。(默认:INADDR_ANY,所有地址) -d作为守护进程来运行。 -r最大核心文件限制。 -u 设定进程所属用户。(只有root用户可以使用这个参数) -m 单个数据项的最大可用内存,以MB为单位。(默认:64MB) -M内存用光时报错。(不会删除数据) -c 最大并发连接数。(默认:1024) -k锁定所有内存页。注意你可以锁定的内存上限。试图分配更多内存 会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。 -v提示信息(在事件循环中打印错误/警告信息。) -vv详细信息(还打印客户端命令/响应) 安装和使用 启动参数 -vvv超详细信息(还打印内部状态的变化) -h打印这个帮助信息并退出。 -I打印memcached和libevent的许可。 -P 保存进程ID到指定文件,只有在使用 -d 选项的时候才有意义。 -f 块大小增长因子。(默认:1.25) -n 分配给key+value+flags的最小空间(默认:48) -L尝试使用大内存页(如果可用的话)。 -D 使用 作为前缀和ID的分隔符。 -t 使用的线程数(默认:4) -R每个连接可处理的最大请求数。 -C禁用CAS。 -b 设置后台日志队列的长度(默认:1024) -B绑定协议 - 可能值:ascii,binary,auto(默认) -I 重写每个数据页尺寸。调整数据项最大尺寸。 安装和使用 监测脚本示例 #!/bin/sh pid=/bin/ps -ef | grep memcached -d | grep 8086 | grep -v grep | awk print $2 if -n “$pid” ; then echo $pid else /opt/soft/memcached/bin/memcached -d -m 2048 -c 2048 -l -p 8086 -u root fi 添加至cron * * * * * /opt/scripts/checkMemcached.sh 安装和使用 命令列表 存储命令set/add/replace/append/prepend/cas 读取命令get/gets 删除命令delete 计数命令incr/decr 统计命令stats/settings/items/sizes/slabs 工具memcached-tool 安装和使用 格式 command 安装和使用 commandset无论如何都进行存储 add只有数据不存在时进行添加 repalce只有数据存在时进行替换 append往后追加:append datablock ? prepend往前追加:prepend datablock cas按版本号更改 key字符串,30天为unixtime bytesbyte字节数,不包含rn,根据长度截取存/取的字符串,可以是0,即存空串 datablock文本行,以rn结尾,当然可以包含r或n statusSTORED/NOT_STORED/EXISTS/NOT_FOUND ERROR/CLIENT_ERROR/SERVER_ERROR服务端会关闭连接以修复 存储命令set/add/replace 安装和使用 set lu 32 0 7 zicheng STORED/正确 get lu VALUE lu 32 7 zicheng END set lai 32 0 6 laiji CLIENT_ERROR bad data chunk ERROR/长度错误 set lu 32 0 7 zicheng STORED add lu 32 0 7 zicheng NOT_STORED/已存在 不能add add lai 32 0 5 laiji STORED /不存在可以 add set lu 32 0 7 zicheng STORED replace lu 32 0 9 luzicheng STORED/已存在可以 replace replace jige 32 0 5 laiji NOT_STORED/不存 在不能replace datablock长度必须正确add只能添加不存在的keyreplace只能替换已有的key 读取命令get/gets 安装和使用 set lu 32 0 7 zicheng STORED set lai 32 0 5 laiji STORED get lu lai VALUE lu 32 7 zicheng VALUE lai 32 5 laiji END get普通查询,gets用于查询带版本的值,多个key用空格分开 set lu 32 0 7 zicheng STORED set lai 32 0 5 laiji STORED gets lu lai VALUE lu 32 7 3 zicheng VALUE lai 32 5 4 laiji END 检查存储命令cas 安装和使用 gets lu VALUE lu 32 7 3 zicheng END cas lu 32 0 7 3 zicheng STORED/版本号相同才修改 gets lu VALUE lu 32 7 5 zicheng END cas即check and set,只有版本号相匹配时才能存储,否则返回EXISTS 设计意图:解决多客户端并发修改同一条记录的问题,防止使用经过改变了 的value/key对 计数命令incr/decr 安装和使用 set count 32 0 1 1 STORED incr count 100 101 decr count 23 78 delete count DELETED incr count 1 NOT_FOUND set lu 32 0 7 zicheng STORED incr lu 100 CLIENT_ERROR cannot increment or decrement non- numeric value 实现计数器key不存在不能计数value不是数字不能计数 删除命令delete 安装和使用 set lu 32 0 7 zicheng STORED delete lu DELETED get lu END 格式:delete time: 秒数或Unixtime,在time时间内不能add或replace,但能set,不能get 。过期后才能够重新set有效并能get 统计命令stats 安装和使用 格式:stats stats STAT pid 25587 STAT uptime 6038 STAT time 1376993797 STAT version 1.4.5 STAT pointer_size 64 STAT rusage_user 0.000000 STAT rusage_system 0.004000 STAT curr_connections 5 STAT total_connections 8 STAT connection_structures 6 END stats统计项 安装和使用 名称描述 pidMemcached进程ID uptimeMemcached运行时间,单位:秒 timeMemcached当前的UNIX时间 versionMemcached的版本号 rusage_user该进程累计的用户时间,单位:秒 rusage_system该进程累计的系统时间,单位:秒 curr_connections当前连接数量 total_connectionsMemcached运行以来接受的连接总数 connection_structuresMemcached分配的连接结构的数量 cmd_get查询请求总数 get_hits查询成功获取数据的总次数 get_misses查询成功未获取到数据的总次数 cmd_set存储(添加/更新)请求总数 bytesMemcached当前存储内容所占用字节数 bytes_readMemcached从网络读取到的总字节数 bytes_writtenMemcached向网络发送的总字节数 limit_maxbytesMemcached在存储时被允许使用的字节总数 curr_itemsMemcached当前存储的内容数量 total_itemsMemcached启动以来存储过的内容总数 evictionsLRU释放对象数,用来释放内存 分析CPU占用是否 高 分析连接数是否太多 分析命中率是否太低 分析字节数流量 分析对象数LRU频率 stats settings查看设置 安装和使用 stats settings STAT maxbytes 2147483648 STAT maxconns 2048 STAT tcpport 8086 STAT udpport 8086 STAT inter STAT verbosity 0 STAT oldest 0 STAT evictions on STAT domain_socket NULL STAT umask 700 STAT growth_factor 1.25 END 名称描述 maxbytes最大字节数限制,0无限制 maxconns允许最大连接数 tcpportTCP端口 udpportUDP端口 inter verbosity日志0=none,1=som,2=lots oldest最老对象过期时间 evictionson/off,是否禁用LRU domain_socketsocket的domain umask创建Socket时的umask growth_factor增长因子 chunk_sizekey+value+flags大小 num_threads线程数,可以通过-t设置,默认4 stat_key_prefixstats分隔符 detail_enabledyes/no,显示stats细节信息 reqs_per_event最大IO吞吐量(每event) cas_enabledyes/no,是否启用CAS,-C禁用 tcp_backlogTCP监控日志 auth_enabled_saslyes/no,是否启用SASL验证 stats items数据项统计 安装和使用 stats items STAT items:1:number 3 STAT items:1:age 4306 STAT items:1:evicted 0 STAT items:1:evicted_nonzero 0 STAT items:1:evicted_time 0 STAT items:1:outofmemory 0 STAT items:1:tailrepairs 0 STAT items:1:reclaimed 0 END 名称描述 number该slab中对象数,不包含过期对象 ageLRU队列中最老对象的过期时间 evictedLRU释放对象数 evicted_nonzero设置了非0时间的LRU释放对象数 evicted_time最后一次LRU秒数,监控频率 outofmemory不能存储对象次数,使用-M会报错 tailrepairs修复slabs次数 reclaimed使用过期对象空间存储对象次数 stats sizes对象数量统计 安装和使用 格式:STAT 注意:会锁定服务,暂停处理请求 stats sizes STAT 96 3 END stats slabs区块统计 安装和使用 被浪费内存数=(total_chunks * chunk_size) - mem_requested 如果太大,需要调整factor stats slabs STAT 1:chunk_size 96 STAT 1:chunks_per_page 10922 STAT 1:total_pages 1 STAT 1:total_chunks 10922 STAT 1:used_chunks 3 STAT 1:free_chunks 2 STAT 1:free_chunks_end 10917 STAT 1:mem_requested 224 . STAT total_malloced 1048512 END 名称描述 chunk_sizechunk大小,byte chunks_per_page每个page的chunk数量 total_pagespage数量 total_chunkschunk数量*page数量 get_hitsget命中数 cmd_setset数 delete_hitsdelete命中数 incr_hitsincr命中数 decr_hitsdecr命中数 cas_hitscas命中数 cas_badvalcas数据类型错误数 used_chunks已被分配的chunk数 free_chunks剩余chunk数 free_chunks_end分完page浪费chunk数 mem_requested请求存储的字节数 active_slabsslab数量 total_malloced总内存数量 区块 数量 命 中 率 分析 占用 情况 其它命令 安装和使用 version flush_all quit version VERSION 1.4.5 flush_all OK quit Connection closed by foreign host. magent 介绍 magent 是一个简单,但非常有用的 memcached 缓存服务器的代理小程序。 功能 保持到memcached服务器的多个连接; 支持下列memcached指令: get gets delete incr decr add set replace prepend append cas 基于 libevent 的事件驱动库; 支持 ketama 算法; 服务器备份; unix domain socket。 magent 命令行参数 -h this message -u uid -g gid -p port, default is 11211. (0 to disable tcp support) -s ip:port, set memcached server ip and port -b ip:port, set backup memcached server ip and port -l ip, local bind ip address, default is -n number, set max connections, default is 4096 -D do not go to background -k use ketama key allocation algorithm -f file, unix socket path to listen on. default is off -i number, max keep alive connections for one memcached server, default is 20 -v verbose magent 工作流程 单key请求,先从服务集群中获取数据,失败从备份集群中获取; 对多key的请求,会进行遍历; delete incr decr add set replace prepend append cas这些命令会同时发送给 服务集群和备份集群; 与memcached保持长链接; 支持ketama算法(一致性hash的一个实现),添加/删除memcached服务器是 只影响到1/n的key。 memcachedb 介绍 memcachedb是 一个由新浪网的开发人员开放出来的开源项目,给 memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异 步主辅复制机制,让memcached具备了事务恢复能力、持久化能力和分布 式复制能力,非常适合于需要超高性能读写速度,但是 不需要严格事务约束 ,能够被持久化保存的应用场景。 特性 key/value对象的高性能读写; 高可靠的持久化存储; 高可用的数据存储和复制; 与memcached协议兼容性。 memcachedb 支持的memcached协议 get(also mutiple get) set, add, replace append/prepend incr, decr delete stats 私有协议 rget db_checkpoint db_archive memcache 简介 memcache是一个关于memcached的php模块。memcache模块提供了于 memcached方便的面向过程及面向对象的接口,memcache模块同时提供 了一个session 处理器 (memcache)。 memcache 部署安装 yum -y install libevent libevent-devel cd /root/install wget /store/memcache-3.0.6.tar.gz find ./ -type f -name *.tar.gz -exec tar -zxf ; cd /root/install/memcache-3.0.6/ /opt/soft/php/bin/phpize ./configure -with-php-config=/opt/soft/php/bin/php-config make clean make make install echo “memcachenextension = memcache.so“ /opt/soft/php/lib/php.ini memcache 使用示例 connect(localhost, 11211) or die (“Could not connect“); $version = $memcache-getVersion(); echo “Servers version: “.$version.“n“; $tmp_object = new stdClass; $tmp_object-str_attr = test; $tmp_object-int_attr = 123; $memcache-set(key, $tmp_object, false, 10) or die (“Failed to save data at the server“); echo “St

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论