CentOS 5.6下Memcached和PHP的Memcache扩展安装配置

作者:袖梨 2022-06-30

我的配置环境为:

Linux版本:CentOS 5.6
PHP版本:PHP 5.2.17
Memcached版本:1.4.9
Memcache版本:2.2.6

Memcached需要libevent支持,所以需要先检查libevent是否已经安装。

下面是Memcached的安装过程:

# tar zvxf memcached-1.4.9.tar.gz
# cd memcached-1.4.9
# ./configure --prefix=/usr/local/memcached
# make
# make install

启动Memcached:

# /usr/local/memcached/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u root

参数128指定了内存使用量

接下来是为PHP安装memcache扩展:

# gzip -d memcache-2.2.6.tgz
# tar xvf memcache-2.2.6.tar
# cd memcache-2.2.6
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
# make
# make install

最后将如下配置信息添加到php.ini文件中:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension=memcache.so

备注:/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/这个路径可能会有不同,以您机器中的为准。


管理Memcached的Service脚本


如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

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

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

 

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集群,以降低单个节点上的压力

相关文章

精彩推荐