Memcached服务器简介
Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。它的API支持目前大部分流行的编程语言,Memcached的官方网站:http://memcached.org/。
PHP的Memcached扩展简介
PHP有两个Memcached扩展:“Memcache”和“Memcached”。
Memcache扩展:
Memcache扩展提供了方便的面向对象的memcached接口,Memcache扩展用PHP实现的,2004年就实现了,是老的扩展,而且功能少。
- PHP官网Memcache扩展介绍:http://php.net/manual/zh/book.memcache.php
- 下载的Memcache扩展:http://pecl.php.net/package/memcache
Memcached扩展:
Memcached扩展基于libmemcached开发的,使用libmemcached库提供的API与Memcached服务器进行交互,只支持面向对象的接口,2009年才实现,Memcached扩展功能更加完善,支持的函数更多,比如支持批量操作,现在一般建议使用Memcached扩展。
- PHP官网Memcached扩展介绍:http://php.net/manual/zh/book.memcached.php
- 下载的Memcached扩展:http://pecl.php.net/package/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
...
- Memcached使用教程访问菜鸟教程 - Memcached 教程。
安装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
配置WordPress支持Memcached
Memcached服务器和PHP的Memcached扩展配置完成之后,最后一步配置WordPress使其使用Memcached。
可以安装Memcached Object Cache插件,该插件为WordPress对象缓存提供了一个后端支持,但是这个插件多年没有更新。这里使用支持更多缓存设置的W3 Total Cache插件,该插件包含Memcached Object Cache插件的所有功能,缓存方法选择“Memcached”即可使用Memcached内存缓存。网上关于该插件的介绍很多,这里就不再赘述了。
这是搭建LNMP网站平台的第八篇文章,博客基本部署完毕,最近在忙于学习Ansible自动化运维和Zabbix监控系统,这个专题暂时就写这么多吧,以后有时间再琢磨优化Nginx、MySQL和PHP。
嗯~o( ̄▽ ̄)o最后祝大家圣诞快乐~~~