在CentOS环境为PHP安装Memcached扩展

首先,安装PHP的Memcached扩展前,要先安装其所依赖的libmemcached,方法如下:

# wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
# tar zxvf ./libmemcached-1.0.18.tar.gz
# cd libmemcached-1.0.18
# ./configure --prefix=/usr/local
# make
# make install

 

libmemcached安装完毕后,就可以开始安装Memcached扩展了,方法如下:

# wget https://pecl.php.net/get/memcached-2.2.0.tgz
# tar zxvf ./memcached-2.2.0.tgz
# cd memcached-2.2.0

 

解压缩后,我们需要先修改一下php_libmemcached_compat.h文件
将#include 的路径修改成#include </usr/local/include/libmemcached/memcached.h>然后再继续编译安装

# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --disable-memcached-sasl
# make
# make install

 

最后,还要修改php.ini文件,加入extension=memcached.so并重启php-fpm即可。

阳光部落原创,更多内容请访问http://www.sunbloger.com/

关于Memcached对key和value的限制

Memcached中对于键(key)的限制为最大不超过250个字符。同时,对于存储的value最大可以接受的数据不能超过1MB。

我们可以通过修改源代码的方式来改变对于key的长度限制。

方法为:

修改memcached.h文件,找到 #define KEY_MAX_LENGTH 250,将250修改为其他数值,例如:#define KEY_MAX_LENGTH 512

而关于value的1M的限制,可以在启动命令中增加-I 2m这样的参数,就可以将原本1M的限制提升至2M。

Linux下管理Memcached的Service脚本

Memcached 的编译安装过程请参考本站的《Linux下部署Memcached和PHP的Memcache扩展方法

如 Memcached 已在 Linux 中安装完毕,且被部署到 /usr/local/memcached 这个路径下,接下来我们来开始为其安装用于启动和停止的服务管理脚本。

首先,通过 vi 在 /etc/rc.d/init.d 路径下新建一个名为 memcached 的脚本文件,命令如下:

vi /etc/rc.d/init.d/memcached

然后,向其中写入 Shell 脚本如下:

#!/bin/sh  
#  
# chkconfig: 2345 90 50
# description: Memcached Service Daemon
#
# processname: Memcached
#
# Source function library.
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
#[ ${NETWORKING} = "no" ] && exit 0
#[ -r /etc/sysconfig/dund ] || exit 0
#. /etc/sysconfig/dund
#[ -z "$DUNDARGS" ] && exit 0

MEMCACHED="/usr/local/memcached/bin/memcached"

start()
{
    echo -n $"Starting Memcached: "
    daemon $MEMCACHED -u daemon -d -m 32 -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
    echo
}
stop()
{
    echo -n $"Shutting down Memcached: "
    killproc memcached
    echo
}

[ -f $MEMCACHED ] || exit 1
# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 3
        start
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac
exit 0

保存退出 vi 后,执行下面的命令来安装这个脚本

chmod 777 /etc/rc.d/init.d/memcached
chkconfig --add memcached
chkconfig --level 235 memcached on

然后可以通过下面的命令来检查是否安装成功

chkconfig --list | grep memcached
service memcached start
service memcached stop
service memcached restart

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

Memcached连接超时故障排除

在一次例行检查日志的时候,发现Nginx日志中出现了大量的PHP连接Memcached超时的报错信息,如下:

PHP Warning: Memcache::connect(): Can’t connect to 127.0.0.1:11211, Connection timed out (110) in …

连上服务器检查Memcached进程运行正常,然后我用一段测试代码检查Memcached是否能够正常连接,结果也很正常。

于是又仔细分析日志,发现那段报错信息是间隔出现的,说明是有一定几率的。这时我回想起上周因为架构问题刚刚把PHP的Session存储路径指向到了Memcached里,可能是因为这个配置增加了Memcached的负载,从而导致在并发量较高时,Memcached出现连接超时的现象。

找到原因就容易解决了。重新调整Memcached的启动参数,增加-c参数来提高连接数量。默认为1024,可以逐步增加以找到最佳数值。我设置为2048。

启动命令为:
memcached -d -m 256 -c 2048 -l 127.0.0.1 -p 11211 -u root

如果服务器充裕,可以考虑分布式的memcached集群,以降低单个节点上的压力。

转载请注明:阳光部落原创,更多内容请访问http://www.sunbloger.com/

PHP搭建百万级网站架构揭秘

今天我们来了解一个百万级PHP站点的网站架构:Poppen.de。Poppen.de是德国的一个社交网站,相对Facebook、Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,如 Nginx、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung。

阅读更多