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

[经验分享] linux下memcached服务器端安装

[复制链接]

尚未签到

发表于 2015-9-1 12:23:30 | 显示全部楼层 |阅读模式
  一. 安装.
  1. 准备工作, memcached用到了libevent, 需要下载.
  memcached官方下载地址:     http://www.danga.com/memcached/
  libevent官方下载地址:           http://monkey.org/~provos/libevent/
  2. 解包/编译/安装
  # tar -xzvf libevent-2.0.19-stable.tar.gz
# cd libevent-2.0.19-stable
# ./configure --preix=/usr/local
# make && make install
# cd ../
# tar -xzvf memcached-1.4.13.tar.gz
# cd memcached-1.4.13
# ./configure --prefix=/usr/local/memcached --with-libevent-dir=/usr/local
  # make && make install
  3. 运行memcached守护进程
  /usr/local/memcached/bin/memcached -d -m 20 -p 11211 -u nobody
  可以把上面的命令加到/etc/rc.local中, 这样系统启动时, memcached就会自动启动了.
  memcached启动参数解释:
  -d  以守护方式运行(daemon方式);
  -m 设置memcached可以使用的内存大小,单位为M;
  -l 监听的IP地址, 如果是本机的话, 通常可以不设置;
  -p 监听的端口, 默认为11211, 所以也可以不设置该参数;
  -P 存放pid文件的地址(如: /tmp/memcached.pid)
  -u 指定用户, 如果当前为root的话, 需要使用此参数指定用户.
  其它参数可以使用memcached -h 或者man memcached
  4. 可选的管理软件.
  magent: 开源的Memcached代理服务器软件. http://code.google.com/p/memagent/
  daemontools: 监视memcached进程并自动启动. http://cr.yp.to/daemontools.html
  二. 命令和管理
  telnet 127.0.0.1 11211
  // 保存
  set good 32 0 10
  helloworld
  STORED
  // 取值
  get good
  // 取值(带版本号)
  gets good
  // 替换
  replace good 32 0 10
  worldhello
  STORED
  // 尾部添加: append
  // 头部添加: prepend
  // 删除: delete
  // 按版本号更改: cas  (check and set)
  // memcached版本号: version
  // 删除所有: flush_all
  // 退出telnet模式: quit
  
  // 统计命令:
  // stats items
  // stats sizes
  // stats slabs
  // stats
  
  #/usr/bin/perl /home/yxw/soft/memcached-1.4.13/scripts/memcached-tool localhost:11211
  # Item_Size   Max_age 1MB_pages Count   Full?
1      88 B     1531 s       1       1      no
2     112 B        0 s       1       0      no
5     232 B        0 s       1       0      no
  # slab class编号
Item_Size Chunk大小
Max_age LRU内最旧的记录的生存时间
1MB_pages 分配给Slab的页数
Count Slab内的记录数
Full? Slab内是否含有空闲chunk
  (scripts路径: memcached源码目录下scripts)
  
  三. PHP客户端安装
  PHP客户端有两种, 一种是pecl memcached, 另一种是pecl memcache.
  推荐使用pecl memcahed.
  1. 准备软件.
  wget https://launchpad.net/libmemcached/1.0/1.0.8/+download/libmemcached-1.0.8.tar.gz
  wget http://pecl.php.net/get/memcached-2.0.1.tgz
  注: memcahe客户端下载地址:

http://pecl.php.net/get/memcache

  2. 安装
  tar -xzvf libmemcached-1.0.8.tar.gz
  cd libmemcached-1.0.8/
  ./configure
  make && make install
  cd ../
  tar -xzvf memcached-2.0.1.tgz
  cd memcached-2.0.1/
  /usr/local/php/bin/phpize
  ./configure --with-php-config=/usr/local/php/bin/php-config
  make && make install
  3. 修改php配置.
  vi /usr/local/php/lib/php.ini
  extension = memcached.so
  4. 重启apache, 测试一下:



<?php
<?php
$m = new Memcached();
$m->addServer('127.0.0.1', 11211);
$m->set('foo', 200);
var_dump($m->get('foo'));
?>
  得到结果: int(200)
  telnet看一下:
  telnet 127.0.0.1 11211
  get foo
  -----返回------
  VALUE foo 1 3
200
  END
  
  四. 存储分布算法
  memcached服务器端是集中式的缓存系统, 分布式实现由客户端决定. (客户端决定数据存在哪台服务器上)
  memcached分布算法一般有两种:
  1. 根据hash(key)的结果, 模连接数的余数来决定存储到哪个节点, 即: hash(key)%session.size().
  优点: 简单快速, 表现良好.
  缺点: 增加或删除节点的时候, 原有的缓存数据大规模失效, 命中率大受影响, 会对后面的db服务器造成很大的压力.
  2. consistent hashing, 一致性hash算法. 查找节点过程大致如下:
  首先求出memcached服务器节点的hash值, 并将其配置到0~232的圆上,
  然后用同样的方法求出存储数据的键的hash值, 并映射到圆上.
  然后从数据映射到的位置开始顺时针查找, 将数据保存到找到的第一个服务器上.
  如果超过2的32次方后,仍然找不到服务器, 就会保存到第一台memcahed服务器上.
  
  memcahed没有任何配置时, 默认使用第一种方法, 使用:
  $md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);   
  第二种算法:
  memcache在php.ini中加
  Memcache.hash_strategy =consistent
Memcache.hash_function =crc32
  memcached在程序中加(未确认):
  $md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);   

$mem->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);
  
  五. Memcache的安全
  memcache以root权限运行, telnet可以登录, 所以要注意memcache的安全.
  1. 内网访问.
  两台服务器之间的访问是内网形态的, 一般是web服务器跟memcached服务器之间.
  普遍的服务器都是有两块网卡, 一块指向互联网, 一块指向内网, 让web服务器通过内网的网卡来
  访问memcache服务器, memcahe服务器启动时监听内网ip地址和端口, 内网间的访问能够有效阻止其它非法的访问.
  2. 设置防火墙.
  防火墙是简单有效的方式, 如果是两台服务器都是挂在外网, 并且需要通过IP来访问memcahe的话, 可以考虑使用防火墙或者代理程序来过滤非法访问.
  Linux下可以使用iptables或者ipfw来指定一些规则防止一些非法的访问, 比如可以设置只允许我们的web服务器来访问我们memcache服务器,同时阻止其他的访问.



# iptables -F
# iptables -P INPUT Drop
# iptables -A INPUT -p tcp -s 192.168.0.2 --dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 --dport 11211 -j ACCEPT
  上面的iptables规则就是只允许192.168.0.2这台web服务器对memcache服务器的访问, 能够有效的阻止一些非法访问,
  相应的也可以增加一些其他规则来加强安全性, 这个可以根据自己的需要来做.
  
  参考资料:
  http://hi.baidu.com/itgp/blog/item/afa47932a73e10ed1b4cff32.html
  http://blog.sina.com.cn/s/blog_628961a10100h63d.html
  http://hi.baidu.com/xujingood/blog/item/74debe0113f3ae8ae950cd92.html
  http://hi.baidu.com/claudeyuan/blog/item/1c186f02939580e108fa9395.html
  http://www.iteye.com/topic/346682
  http://hi.baidu.com/dong_love_yan/blog/item/afbe1e12d22e7512203f2e21.html
  http://hi.baidu.com/thinkinginlamp/blog/item/717cd42a11f6e491023bf67a.html

运维网声明 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-108350-1-1.html 上篇帖子: 转:Memcached Java Client API详解 下篇帖子: 【转】LoadRunner使用Libmemcached与Memcached通讯
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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