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

[经验分享] tlinux(CentOS)下memcached 安装与使用

[复制链接]

尚未签到

发表于 2018-12-25 08:28:03 | 显示全部楼层 |阅读模式
tlinux(CentOS)下memcached 安装与使用
0x00 背景
业务使用的原memcached机器过保故障,需要在新机器上部署memcached服务,同时设置相关网络策略限制,保护缓存数据安全。
整个通过编译安装方式搭建服务的过程非常简单,异常的可能性不大,主要是服务启动后的验证,一个是通过telnet连接到新机器的1121端口然后输入相关命令验证,一个是安装php扩展,通过php脚本进行验证。


0x01 准备

memcached是一个高性能分布式的内存对象缓存系统, 通常被用于降低数据库加载压力以提高动态web应用的响应速度。
官网: http://memcached.org/ ,目前最新版本为v1.4.24 release notes (2015-4-25)
下载地址: http://www.memcached.org/files/memcached-1.4.24.tar.gz

依赖文件:
libevent2.0.22:http://libevent.org/
https://sourceforge.net/projects/levent/files/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz

0x02 安装
   1. 安装依赖libevent
cd /data/zk-install
wget -O libevent-2.0.22-stable.tar.gz https://sourceforge.net/projects/levent/files/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz
tar -zxf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure
make&& make install 2.安装memcached
cd /data/zk-install  
wget -O memcached-1.4.24.tar.gz  http://www.memcached.org/files/memcached-1.4.24.tar.gztar zxvf memcached-1.4.24.tar.gz
cd memcached-1.4.24 ./configure
## 默认是可以找到相关配置,如果找不到需要指定 –with-libevent=libevent编译安装路径 make; make install 3.启动memcached服务
/usr/local/bin/memcached -d -u root -l  10.175.97.99 -m 2048 -p 12121
##绑定内网地址;指定root用户运行memcached;允许分配最大内存2G,指定服务端口为11211
4.安全加固
IPT=`whereis iptables|awk '{ print $2 }'`#begin$IPT  -F  ETH1_TCP
#acl
$IPT -A ETH1_TCP -p tcp -s ip1 --dport 11211 -j ACCEPT
$IPT -A ETH1_TCP -p tcp -s ip2 --dport 11211 -j ACCEPT
$IPT -A ETH1_TCP -p tcp --dport 11211 -j DROP
$IPT  -A  ETH1_TCP -p tcp -j ACCEPTIPT=`whereis iptables|awk '{ print $2 }'`#begin$IPT  -F  ETH1_UDP#acl$IPT -A ETH1_TCP -p udp --dport 11211 -j DROP
$IPT -A ETH1_TCP -p udp -s  ip1  --dport 11211 -j ACCEPT
$IPT -A ETH1_TCP -p udp -s ip2 --dport 11211 -j ACCEPT
$IPT -A ETH1_TCP -p udp --dport 11211 -j DROP
$IPT  -A  ETH1_UDP -p udp -j ACCEPT0x03  使用
1. 启动Memcache 常用参数
-p  设置TCP端口号(默认不设置为: 11211)
-U  UDP监听端口(默认: 11211, 0 时关闭)
-l  绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)
-d 以daemon方式运行
-u  绑定使用指定用于运行进程
-m  允许最大内存用量,单位M (默认: 64 MB)
-P  将PID写入文件,这样可以使得后边进行快速进程终止, 需要与-d 一起使用
-c 选项是最大运行的并发连接数
2. 连接
telnet ip 11211
3. 基本命令

五种基本 memcached 命令:
set
add
replace
get
deleteset,add,replace是用于操作存储在memcached中的键值对的标准修改命令。
语法:
command    参数 用法
key key 用于查找缓存值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节点
value 存储的值(始终位于第二行)附录相关说明:set set 命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。set 命令:set userId 0 0 512345STORED
如果使用 set 命令正确设定了键值对,服务器将使用单词 STORED 进行响应。add 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。
使用 add 命令的标准交互:set userId 0 0 512345STOREDadd userId 0 0 555555NOT_STOREDadd companyId 0 0 3564STOREDreplace 仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从 memcached 服务器接受到一条 NOT_STORED 响应。
下面是使用 replace 命令的标准交互:replace accountId 0 0 567890NOT_STOREDset accountId 0 0 567890STOREDreplace accountId 0 0 555555STORED
最后两个基本命令是 get 和 delete。这些命令相当容易理解,并且使用了类似的语法,如下所示:
command get get 命令用于检索与之前添加的键值对相关的值。您将使用 get 执行大多数检索操作。
下面是使用 get 命令的典型交互:set userId 0 0 512345STOREDget userIdVALUE userId 0 512345ENDget bobEND使用一个键来调用get,如果这个键存在于缓存中,则返回相应的值。如果不存在,则不返回任何内容。delete 最后一个基本命令是 delete。delete 命令用于删除 memcached 中的任何现有值。您将使用一个键调用delete,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条NOT_FOUND 消息。
下面是使用 delete 命令的客户机服务器交互:set userId 0 0 598765STOREDdelete bob
NOT_FOUNDdelete userId
DELETEDget userIdEND可以在 memcached 中使用的两个高级命令是 gets 和 cas。gets 和cas 命令需要结合使用。您将使用这两个命令来确保不会将现有的名称/值对设置为新值(如果该值已经更新过)。我们来分别看看这些命令。
gets
gets 命令的功能类似于基本的 get 命令。两个命令之间的差异在于,gets 返回的信息稍微多一些:64 位的整型值非常像名称/值对的 “版本” 标识符。
下面是使用 gets 命令的客户机服务器交互:set userId 0 0 512345STOREDget userIdVALUE userId 0 512345ENDgets userIdVALUE userId 0 5 412345END考虑 get 和 gets 命令之间的差异。gets 命令将返回一个额外的值 — 在本例中是整型值 4,用于标识名称/值对。如果对此名称/值对执行另一个set 命令,则gets 返回的额外值将会发生更改,以表明名称/值对已经被更新。清单 6 显示了一个例子:stats stats 命令的功能正如其名:转储所连接的 memcached 实例的当前统计数据。在下例中,执行 stats 命令显示了关于当前 memcached 实例的信息:
STAT pid 22459 进程ID
STAT uptime 1027046 服务器运行秒数
STAT time 1273043062 服务器当前unix时间戳
STAT version 1.4.4 服务器版本
STAT pointer_size 64 操作系统字大小(这台服务器是64位的)
STAT rusage_user 0.040000 进程累计用户时间
STAT rusage_system 0.260000 进程累计系统时间
STAT curr_connections 10 当前打开连接数
STAT total_connections 82 曾打开的连接总数
STAT connection_structures 13 服务器分配的连接结构数
STAT cmd_get 54 执行get命令总数
STAT cmd_set 34 执行set命令总数
STAT cmd_flush 3 指向flush_all命令总数
STAT get_hits 9 get命中次数
STAT get_misses 45 get未命中次数
STAT delete_misses 5 delete未命中次数
STAT delete_hits 1 delete命中次数
STAT incr_misses 0 incr未命中次数
STAT incr_hits 0 incr命中次数
STAT decr_misses 0 decr未命中次数
STAT decr_hits 0 decr命中次数
STAT cas_misses 0 cas未命中次数
STAT cas_hits 0 cas命中次数
STAT cas_badval 0 使用擦拭次数
STAT auth_cmds 0STAT auth_errors 0STAT bytes_read 15785 读取字节总数
STAT bytes_written 15222 写入字节总数
STAT limit_maxbytes 1048576 分配的内存数(字节)
STAT accepting_conns 1 目前接受的链接数
STAT listen_disabled_num 0 STAT threads 4 线程数
STAT conn_yields 0STAT bytes 0 存储item字节数
STAT curr_items 0 item个数
STAT total_items 34 item总数
STAT evictions 0 为获取空间删除item的总数flush_all flush_all 是最后一个要介绍的命令。这个最简单的命令仅用于清理缓存中的所有名称/值对。如果您需要将缓存重置到干净的状态,则 flush_all 能提供很大的用处。下面是一个使用 flush_all 的例子:set userId 0 0 555555STOREDget userIdVALUE userId 0 555555ENDflush_all
OKget userIdEND
4.PHP程序中调用memcached服务
  开发说明文档: http://php.net/manual/zh/intro.memcached.php
  memcache PHP扩展:http://pecl.php.net/package/memcache
  下载地址:http://pecl.php.net/get/memcache-3.0.8.tgz
PHP环境说明:

PHP版本:php-5.4.43PHP路径:/usr/local/php/bin/phpize  /usr/local/php/bin/php-configPHP扩展路径:/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525注意事项:
如果libmemcached被安装在一个非标准路径,使用--with-libmemcached-dir=DIR 来指定路径,DIR就是libmemcached安装时的prefix参数。这个路径需要包含文件include/libmemcached/memcached.h。
如果要支持压缩就需要zlib。对于非标准安装的zlib库,使用--with-zlib-dir=DIR 来指定zlib安装路径,DIR就是zib安装时的prefix参数。
session处理器的支持默认是开启的。如果要关闭它,使用选项--disable-memcached-session 。 下载安装memcache php扩展:
cd /data/zk-install
wget -O memcache-3.0.8.tgz http://pecl.php.net/get/memcache-3.0.8.tgztar -zxf memcache-3.0.8.tgz cd memcache-3.0.8
/usr/local/php/bin/phpize  
./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
make;make install
PHP调用memcache代码:


5.常见问题答疑
  Q1:编译安装memcached过程中找不到libevent库地址?
  A:可以在编译安装libevent指定安装目录,在编译安装memcached通过参数--with-libevent=(编译libevent时指定的地址)
Q2:集群方案如何搭建?
A:可以考虑,magent is a simple but useful proxy program for memcached servers.
官网地址:https://code.google.com/archive/p/memagent/

如有其他问题,欢迎RTX(qunyingliu)交流,一同进步,一同成长。
  





运维网声明 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-655489-1-1.html 上篇帖子: memcached的分布式算法 下篇帖子: Memcached 1.4.22安装和配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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