一个专注于IT互联网运维的技术博客

LNMP之Memcached服务器的安装部署

2018.12.25

Memcached服务器简介

Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。它的API支持目前大部分流行的编程语言,Memcached的官方网站:http://memcached.org/。

PHP的Memcached扩展简介

PHP有两个Memcached扩展:“Memcache”和“Memcached”。

Memcache扩展:

Memcache扩展提供了方便的面向对象的memcached接口,Memcache扩展用PHP实现的,2004年就实现了,是老的扩展,而且功能少。

Memcached扩展:

Memcached扩展基于libmemcached开发的,使用libmemcached库提供的API与Memcached服务器进行交互,只支持面向对象的接口,2009年才实现,Memcached扩展功能更加完善,支持的函数更多,比如支持批量操作,现在一般建议使用Memcached扩展。

下面是安装memcached服务器和启用PHP的Memcached扩展的具体操作步骤:

部署Memcached服务器

安装Memcached服务器

Memcached官网版本比Yum源的版本高,这里下载源代码编译安装Memcached服务器:

//安装依赖包libevent-devel
[admin@ityoudao ~]$ sudo yum install libevent-devel
//官网下载memcached源代码
[admin@ityoudao ~]$ cd /u01/src && wget http://www.memcached.org/files/memcached-1.5.12.tar.gz
[admin@ityoudao src]$ tar -zxf memcached-1.5.12.tar.gz && cd memcached-1.5.12
//编译安装
[admin@ityoudao memcached-1.5.12]$ ./configure --prefix /u01/app/memcached-1.5.12
[admin@ityoudao memcached-1.5.12]$ make && make install
[admin@ityoudao memcached-1.5.12]$ cd /u01/app/ && ln -s memcached-1.5.12 memcached

创建Memcached配置文件

这里将配置文件放在Memcached安装目录的config目录下:

[admin@ityoudao ~]$ mkdir /u01/app/memcached/config && vi /u01/app/memcached/config/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="256"
OPTIONS=""
  • PORT为监听的端口号,默认11211;
  • USER为运行Memcached的用户,仅当使用root用户运行Memcached时生效;
  • MAXCONN为最大连接数,默认1024;
  • CACHESIZE为缓存数据最大大小,单位为兆(M),默认64MB;
  • OPTIONS为可选参数配置,如“-1 127.0.0.1”,-1代表数据不过期,永不失效,当然服务器关闭除外,因为memcached使用内存缓存数据;后面IP表示只允许127.0.0.1访问Memc+ ached服务器,如果是192.168.0.101,192.168.0.102表示只允许这两个IP访问。

创建运行Memcached的用户

使用Memcached专用的用户memcached运行Memcached服务器:

[admin@ityoudao ~]$ sudo useradd memcached -s /sbin/nologin
[admin@ityoudao ~]$ id memcached
uid=1002(memcached) gid=1003(memcached) groups=1003(memcached)

添加启动项并启动Memcached服务器

添加自定义的systemd启动项:

[admin@ityoudao ~]$ sudo vi /usr/lib/systemd/system/memcached.service
[Unit]
Description=Memcached
Before=nginx.service php-fpm.service
After=syslog.target network.target
[Service]
Type=simple
EnvironmentFile=-/u01/app/memcached/config/memcached
ExecStart=/u01/app/memcached/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS
[Install]
WantedBy=multi-user.target

设置Memcached开机自动启动并启动Memcached服务器:

[admin@ityoudao ~]$ sudo systemctl enable memcached.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
[admin@ityoudao ~]$ sudo systemctl start memcached.service 
[admin@ityoudao ~]$ sudo systemctl status memcached.service 
● memcached.service - Memcached
   Loaded: loaded (/usr/lib/systemd/system/memcached.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2018-12-25 11:11:23 CST; 5s ago
 Main PID: 25897 (memcached)
   CGroup: /system.slice/memcached.service
           └─25897 /u01/app/memcached/bin/memcached -u memcached -p 11211 -m 256 -c 512
Dec 25 11:11:23 ityoudao systemd[1]: Started Memcached.

测试连接Memcached服务器

Memcached服务器监听tcp/11211端口,可以使用nc命令发送“stats setting”命令给Memcached服务器:

[admin@ityoudao ~]$ netstat -lnptu|grep 11211
(No info could be read for "-p": geteuid()=1000 but you should be root.)
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::11211                :::*                    LISTEN      - 
[admin@ityoudao ~]$ echo "stats settings" | nc localhost 11211
STAT maxbytes 268435456
STAT maxconns 512
STAT tcpport 11211
STAT udpport 0
...

也可以直接使用telnet连接Memcached服务器:

[admin@ityoudao ~]$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 25897
STAT uptime 593
STAT time 1545708074
...

安装PHP的Memcached扩展

PHP的Memcached扩展使用libmemcached客户端库(版本大于等于1.0.0)。如果链接Memcached服务器时使用SASL认证,则需要libmemcached必须开启SASL选项。

如果libmemcached被安装在一个非标准路径,使用--with-libmemcached-dir=DIR来指定路径,DIR是libmemcached安装时的--prefix参数。这个路径需要包含文件include/libmemcached/memcached.h。

如果要支持压缩就需要zlib。对于非标准安装的zlib库,使用--with-zlib-dir=DIR来指定zlib安装路径,DIR就是zib安装时的--prefix参数。

安装依赖的软件包libmemcached

Yum软件源的libMemcached版本比较低,这里同样使用源码编译。libMemcached官方网站:https://libmemcached.org/libMemcached.html。

[admin@ityoudao ~]$ cd /u01/src && wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
[admin@ityoudao src]$ tar -zxf libmemcached-1.0.18.tar.gz && cd libmemcached-1.0.18
[admin@ityoudao libmemcached-1.0.18]$ ./configure --prefix=/u01/app/libmemcached-1.0.18 --with-memcached=/u01/app/memcached/bin
[admin@ityoudao libmemcached-1.0.18]$ make && make install
[admin@ityoudao libmemcached-1.0.18]$ cd /u01/app && ln -s libmemcached-1.0.18 libmemcached

安装PHP的Memcached扩展

使用phpize安装PHP的Memcached扩展:

[admin@ityoudao ~]$ cd /u01/src && wget http://pecl.php.net/get/memcached-3.1.3.tgz
[admin@ityoudao src]$ tar -zxf memcached-3.1.3.tgz && cd memcached-3.1.3/
[admin@ityoudao memcached-3.1.3]$ phpize
Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731
[admin@ityoudao memcached-3.1.3]$ ./configure --enable-memcached --enable-memcached-session --disable-memcached-sasl --with-php-config=/u01/app/php/bin/php-config --with-libmemcached-dir=/u01/app/libmemcached --with-zlib-dir
[admin@ityoudao memcached-3.1.3]$ make && make install
[admin@ityoudao memcached-3.1.3]$ ll /u01/app/php-7.3.0/lib/php/extensions/no-debug-non-zts-20180731/
total 7556
-rwxr-xr-x 1 admin admin  510944 Dec 25 12:56 memcached.so
-rwxr-xr-x 1 admin admin 4207266 Dec 15 17:19 opcache.a
-rwxr-xr-x 1 admin admin 2275328 Dec 15 17:19 opcache.so
-rwxr-xr-x 1 admin admin  599976 Dec 17 13:36 openssl.so
-rwxr-xr-x 1 admin admin  134920 Dec 16 19:10 xsl.so

遇到的问题:

1)configure: error: memcached support requires libmemcached.

问题详情:

checking for libmemcached location... configure: error: memcached support requires libmemcached. Use --with-libmemcached-dir=<DIR> to specify the prefix where libmemcached headers and library are located

问题原因:

PHP的Memcached扩展依赖libmemcached,configure时必须加--with-libmemcached-dir参数;如果libmemcached安装在非标准路径,需要使用--with-libmemcached-dir=DIR参数指定libmemcached的安装路径。

2)configure: error: no, libmemcached built with sasl disabled.

问题详情:

configure: error: no, libmemcached built with sasl disabled. Run configure with --disable-memcached-sasl or update libmemcached with sasl support

问题原因:

配置libmemcached时没有开启SASL认证,所以报错。由于这里只有本机使用Memcached,不需要开启认证,可以使用--disable-memcached-sasl参数禁用SASL认证。否则必须安装cyrus-sasl-devel软件包然后重新编译libmemcached。

修改PHP配置文件添加Memcached扩展

修改php.ini文件添加Memcached扩展:

//查看php.ini文件位置
[admin@ityoudao ~]$ php --ini
Configuration File (php.ini) Path: /u01/app/php-7.3.0/lib
Loaded Configuration File:         /u01/app/php-7.3.0/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)
//在文件末尾添加“extension=memcached.so”
[admin@ityoudao ~]$ vi /u01/app/php/lib/php.ini 
...
extension=memcached.so
[admin@ityoudao ~]$ sudo systemctl restart php-fpm.service
//查看Memcached扩展地信息
[admin@ityoudao ~]$ php --ri memcached

php memcached

配置WordPress支持Memcached

Memcached服务器和PHP的Memcached扩展配置完成之后,最后一步配置WordPress使其使用Memcached。

可以安装Memcached Object Cache插件,该插件为WordPress对象缓存提供了一个后端支持,但是这个插件多年没有更新。这里使用支持更多缓存设置的W3 Total Cache插件,该插件包含Memcached Object Cache插件的所有功能,缓存方法选择“Memcached”即可使用Memcached内存缓存。网上关于该插件的介绍很多,这里就不再赘述了。

Config W3 Total Cache 和 Memcached 配置

这是搭建LNMP网站平台的第八篇文章,博客基本部署完毕,最近在忙于学习Ansible自动化运维和Zabbix监控系统,这个专题暂时就写这么多吧,以后有时间再琢磨优化Nginx、MySQL和PHP。

嗯~o( ̄▽ ̄)o最后祝大家圣诞快乐~~~

发表评论