自己手动在虚拟机下装了下memcache,整个过程真是充满波折,本身用php5.3安装memcache扩展就麻烦很多,无法通过yum直接安装,安装方法详见http://chenwei.me/blog/server/69.html,接下来安装memcache服务,安装成功后,telnet可以成功,不过好像不是立即成功生效,过一会用stats才会有详细显示。
本机用
<?php
$mem = new Memcache;
$mem->connect(‘192.168.124.129′,11211) or die("连接失败");
$mem->getVersion();
?>
不管怎么调试始终都无法成功,后来用母机连接却连接成功了。
所以怀疑是服务器memcache扩展的问题,但是phpinfo()里面确实有了这个扩展,采用
ini_set(‘display_errors’, true);
error_reporting(E_ALL);
之后,可以显示详细错误。
"Memcache::get() [function.Memcache-get]: Server 127.0.0.1 (tcp 11211) failed with: Permission denied (13) in /var/www/.."
百度上找不到相关信息,不过google强大很多,得知这是selinuxd的问题,
selinux是一套linux的安全系统,它指定了应用程序可以访问的磁盘文件、网络端口等等。
如果装有selinux,那么默认的selinux会阻止memcache程序访问11211端口,所以必须对selinux进行配置才行。
方法1: 临时降低selinux运行级别,以便我们进行测试
命令:setenforce [Enforcing | Permissive]
Enforcing表示不允许违反策略的操作
Permissive表示允许违反策略的操作,但会记录下来
我们使用 setenforce Permissive
方法2: 修改selinux配置文件,关闭selinux
编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled
方法3: 修改selinux的http策略,使得httpd进程可以访问网络,这样也就可以使用memcache了
命令:setsebool -P httpd_can_network_connect true
参数P的意思是保持设置的有效性,这样在重启之后这个设置依然有效,不会改变
我采用的是改/etc/selinux/config SELINUX=0 重启后成功。
附:centos 安装memcache服务的方法
1.编译安装Libevent
cd ~
curl -O http://www.monkey.org/~provos/libevent-2.0.13-stable.tar.gz
tar -zxvf libevent-2.0.13-stable.tar.gz
cd libevent-2.0.13-stable-tar.gz
./configure –prefix=/usr
make && make install
检测一下查看是否安装:
ls -al /usr/lib | grep libevent
#显示
libevent.so -> libevent-2.0.so.5.1.2
2.安装Memcache
cd ~
curl -O http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
tar -zxvf memcached-1.4.0.tar.gz
cd memcached-1.4.0.tar.gz
./configure –with-libevent=/usr/
make && make install
检测是否成功安装
ls -al /usr/local/bin/mem*
#显示
/usr/local/bin/memcached
开启Memcached守护进程
memcached -d -u root
完整命令
/usr/local/bin/memcached -d -m 200 -u root -c 256 -p 11211 -P /tmp/memcache.pid
#无提证明开启成功
#连接参数
-p 监听端口
-l 连接的IP地址,默认是本机
-d start启动memecache服务
-d restart重启
-d stop|shutdown关闭服务
-d install 安装
-d uninstall 卸载
-u 以身份运行仅在root下有效
-m 最大内存使用,单位MB,默认64MB,最大2G
-M 内存耗尽时返回错误
-c 最大同时连接数量,默认是1024
-f 块大小增长因为,默认是1.25
-n 最小分配空间,key+value+flags默认48
-h 显示帮助
#使用telnet连接
telnet localhost 11211
#直接按回车会出现客户端错误.
#查看当前状态命令
stats
stats参数参考
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 0
STAT auth_errors 0
STAT 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 0
STAT bytes 0 存储item字节数
STAT curr_items 0 item个数
STAT total_items 34 item总数
STAT evictions 0 为获取空间删除item的总数