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

[经验分享] Memcached介绍及安装

[复制链接]

尚未签到

发表于 2018-12-25 07:56:14 | 显示全部楼层 |阅读模式
  memcached:由LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件,现已成为mixi,hatena,Facebook,Vox,LiveJournal等众多服务器提高Web应用程序扩展性的重要因素;
      memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。
      memcached完全工作在旁路模式下,自身并不是缓存服务器,数据不会保存在磁盘上,只是一个提供了缓存功能的服务器,可缓存所有可序列化的数据;所能缓存的值的大小不能超过1M;基于事件驱动,使用epoll算法;
  memcached的特点
       1,协议简单:服务器与客户端通信使用基于文本行的协议,而不是基于其他复杂的协议(如XML等);
       2,基于libevent的事件驱动模型:memcached依赖于libevent库;
       3,使用内存存储的方式:memcached的数据存储在内存中,因此性能得到提升,但重启机器后数据会丢失,如果要保证数据不丢失可以采用memcachedb或redis;
       4,memcached各服务器之间完全独立:多台memcached服务器的情况下,各服务器之间也不会互相通信,存放的数据不会共享;
  libevent:一个事件触发的网络库,适用于多种平台(Linux,BSD,windwos),内部使用select,epoll,kqueue等事件机制,拥有高性能,即使对服务器连接数的增加,也能达到O(1)的性能;
  LRU(Least Recently Used):尽管memcached或优先使用已经超时的缓存记录空间,但当存放的数据量达到指定的值后(内存空间不足时),LRU算法会自动删除不常使用的数据,以存放新的数据;
  memcached内存管理机制
       malloc和free:早期使用的内存管理机制,容易导致内存碎片,降低系统性能;
       Salb Allocation:现在使用的内存管理机制,将从内核获取到的内存分割成许多不同大小的块,然后把相当大小的块分为一个组;
            主要术语
                 page     分配给slab的内存空间,默认是1MB;分配给slab后根据slab的大小切分成块(chunk);
                 chunk     用于缓存数据的内存空间;
                 slab class     特定大小的块的组;
            存储过程
                 memcached收到程序发送的数据后,查找memcached中保存的slab class内空闲chunk的列表,选择与数据的大小合适的chunk保存数据;
            缺点:由于chunk的大小是固定的,将100字节的数据缓存到128字节的chunk,会造成28字节的内存空间浪费;
            growth factor(生长因子):为了尽量减少内存空间的浪费,可以根据缓存数据的大小为slab指定生长因子,用于控制slab class之间的差异(使用memcached -f指定),默认为1.25,如第一组slas class的chunk大小为88字节,第二组slab class的chunk大小为112字节,第三组为144字节;在该选项出现之前,该因子为2,被称为“powers of 2”策略;
  memcached删除机制
       memcached类似于磁盘的存储方式,数据删除或超时后不会从内存中删除,而是修改它的状态(类似于inode map,客户端自此将无法查看数据),memcached让新的数据可以重复使用该chunk;
       lazy expiration:memcached不会检查缓存记录是否过期,而是在get时查看缓存记录的时间戳,查看是否过期;所以,memcached不会在过期检查上耗费cpu资源;
  memcached分布式算法
  当有多台memcached服务器时,客户端程序使用的算法主要有以下两种
       根据余数计算分散:根据服务器台数的余数进行分散,通过计算对"键"的整数哈希值,然后再除以服务器的台数,根据其余数来选择服务器;
            缺点:添加或删除服务器时,余数会发生巨变,将无法获取与数据保存时相同的服务器,从而影响缓存的命中率,因此缓存重组的代价相当大;
       一致性hash算法(Consistent Hashing):首先计算出memcached服务器的的hash值,并将其放入到0~2的32次方的圆上,然后用同样的方法计算出"键"的hash值,并映射到圆上,然后从数据映射的位置开始顺时针查找,将数据保存在找到的第一台服务器上;如果超过2的32次方仍然找不到服务器,则保存在第一台服务器上;
            优点
            1,添加或删除服务器,只有从增删节点的位置到逆时针的第一台服务器这个范围内的键受到影响;
            2,为了避免服务器映射点的分布不均匀,一致性hash算法采用了虚拟节点,为每个物理服务器分配100-200个虚拟节点放在圆上,虚拟节点映射到物理服务器,每个存放在虚拟节点上的缓存实际上都是存放在物理节点上,这样就能最大限度的减小分布不均匀;计算公式"(1-n/(n+m))*100",n是原有服务器台数,m是增加服务器的台数;

  给予memcached多大内存
       1,在32位系统中,每个进程最多只能用2G内存;
       2,-m指定的内存为memcached保存数据使用的大小,不包括"slab alloctor"自身占用的内存和为了保存数据而使用的管理空间,因此memcached实际使用的内存会大于指定内存;
       3,由于实际使用的内存会大于指定的内存,因此需要确保分配给memcached内存后,不会引发swap(如服务器4G内存,指定memcached使用3G内存);
  安装memcached
  服务器IP地址:192.168.159.130;
  操作系统:CentOS 6.4 x86 (已安装开发工具);
  同步时钟:ntpdate time.windwos.com
  创建一个memcached用的系统用户:useradd -r -u 112 -M -s /sbin/nologin memcached
  memcached默认监听端口:11211 tcp/udp;
  安装过程
       1,依赖库libevent
            下载地址:https://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
            tar xf libevent-2.0.21-stable.tar.gz
            cd libevent-2.0.21-stable
            ./configure --prefix=/usr/local/libevent-2.0.21
            make
            make install
            ln -s /usr/local/libevent-2.0.21 /usr/local/libevent
       2,编译安装memcached
            下载地址:http://memcached.org/files/memcached-1.4.20.tar.gz;
            tar xf memcached-1.4.20.tar.gz
            cd memcached-1.4.20
            ./configure --prefix=/usr/local/memcached-1.4.20 --with-libevent=/usr/local/libevent-2.0.21
            make
            make install
            ln -s /usr/local/memcached-1.4.20 /usr/local/memcached
       3,启动memcached
            /usr/local/memcached/bin/memcached -u memcached -d
       4,memcached命令的常用选项
            -l           指定进程监听的地址;
           -d          以服务(daemon)模式运行在后台;
           -u nobody          以指定的用户身份运行memcached进程;
           -m 64m          用于缓存数据的最大内存空间,单位为MB,默认为64MB,建议指定的内存大小不应该太大(2G-3G左右);
           -c 1024          最大支持的并发连接数,默认为1024;
           -p 11211          指定监听的TCP端口,默认为11211;
           -U 11211          指定监听的UDP端口,默认为11211,0表示关闭UDP端口;
           -t 4          用于处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效;
           -f 1.25          设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子,默认为1.25;
           -M          当内存空间不够使用时返回错误信息,而不是按LRU算法进行操作;
           -n          指定最小的slab chunk大小,单位是字节;
           -S          启用sasl进行用户认证;
           -v          显示调试信息,-vv或-vvv可以显示更详细;

            -h          获取命令帮助;
  memcached数据管理命令     
       存储类命令
            set     设置一个缓存,无论键是否存在;
            add     新增,当键不存在时使用;
            replace     替换,替换键中的数据;
            append     在已有缓存后面附加值;
            prepend     在已有缓存前面加值;
       获取数据类命令
            get          指定键
            delete          清除
            incr          原有缓存中的数值加1或指定的数值;
            decr         原有缓存中的数值减1或指定的数值;
     统计类命令

            stats和stats items          查看缓存数据的信息;
            stats slabs          查看slabs的占用情况;
            stats sizes          查看空间的使用情况;
     清理命令: flush_all          清空缓存;

  使用telnet测试memcached
       telnet 192.168.159.130 11211
       示例
            add命令:
            add keyname flag  timeout  datasize         ketname:键名      flag:标记,通常为0;     timeout:超时时长(秒,如果不指定按照LRU计算)     datasize:字符的个数;
                如:
                add mykey 0 10 12
                Hello world!
          get命令:get keyname
                如:

                 get mykey
                VALUE mykey 0 12
                Hello world!
                END

            append命令:append keyname flag timeout datasize
                 如:
                 append mykey 0 100 5
                 hello
            quit:退出命令;
  在PHP服务器上安装php的memcache扩展
  服务器IP:192.168.159.129
  操作系统:CentOS 6.4 x86 (已安装开发工具);
  PHP版本:php-5.4.26(编译安装)
  软件下载地址:http://pecl.php.net/get/memcache-2.2.7.tgz;
  首先同步系统时钟:ntpdate time.windows.com
  安装步骤
       1     tar xf memcache-2.2.7.tgz
       2     cd memcache-2.2.7
       3     /usr/local/php-5.4.26/bin/phpize
       4     ./configure --with-php-config=/usr/local/php-5.4.26/bin/php-config --enable-memcache
       5     make
       6     make install
  配置php载入模块
       vim /etc/php.ini
       extension=/usr/local/php-5.4.26/lib/php/extensions/no-debug-zts-20100525/memcache.so          在extension位置新增该行;
       保存退出;
       重启php-fpm服务;
  客户端连接memcached使用的库
       php
            memcache
            memcached(库的名称叫memcached,而不是代表memcached服务器)
       perl
            cache:memcached
       c/c++
            libmemcached
  memcached的监控工具
  memadmin:使用php开发的一个工具,类似于phpMyadmin;
       下载地址:http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz;
       安装方式:将tar.gz直接解压到服务器的网页文件存放目录中即可;
  libmemcached:命令行的客户端管理工具;
       下载地址:https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz;
       安装过程
            1     tar xf libmemcached-1.0.18.tar.gz
            2     cd libmemcached-1.0.18
            3     ./configure --prefix=/usr/local/libmemcached-1.0.18
            4     make
            5     make install
       添加到系统库的搜素路径
            1     vim /etc/ld.so.conf.d/libmemcached.conf
            2     /usr/local/libmemcached-1.0.18/lib/          新增此行;
            3     保存退出
            4     ldconfig
       添加到头文件的搜索路径
            1     ln -s /usr/local/libmemcached-1.0.18/include /usr/include/libmemcached
       修改PATH的搜索路劲
            1     vim /etc/profile.d/path.sh
            2     export PATH=$PATH:/usr/local/libmemcached-1.0.18/bin          新增该行
            3     chmod +x /etc/profile.d/path.sh
            4     source /etc/profile
       常用命令
            memcat --servers=192.168.159.130:11211 mykey          查看键的值;
            memstat --servers=192.168.159.130:11211     查看服务器的状态;
            memping --servers=192.168.159.130:11211          检测服务器是否在线;
            memslap --servers=192.168.159.130:11211          产生一个对memcached服务器的负载,用于测试服务器性能;
            注:以上命令可使用"-h"获取帮助;
  声明:本文为学习笔记,内容参考多方资料,如涉及版权问题,请告知本人,谢谢!




运维网声明 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-655461-1-1.html 上篇帖子: memcached 安装部署 下篇帖子: memcached的安装及管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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