Memcached安装踩坑记
本文发布于 370 天前,其中的部分信息可能已经失效或过时。

众所周知,Wordpress以其臃肿丰富的功能而著称,但是这也导致了访问页面时需要大量读取数据库,拖慢加载进度,所以作为祖传缓存工具的Memcached就不得不装了。

但是! 网上一众教程要么早就过时,要么互相抄袭,害得我整整折腾了一天才装上。

这篇文章用来记录一下安装时踩到的坑,顺便写一个完整能用的教程。

首先明确一下安装的顺序:

  1. 安装lib-event
  2. 编译安装Memcached
  3. 配置启动Memcached
  4. 编译安装libmemcached依赖库
  5. 编译安装memcached-php扩展
  6. 修改php.ini配置文件
  7. 在Wordpress中启用

如果在安装时遇到任何问题可以跳到最后的问题排查部分查看,如果没有请上网检索。

  • 安装Lib-event
#查看系统是否已经安装libevent
rpm -qa|grep libevent

#如果有,先删除再编译安装

yum -y remove libevent

#编译安装libevent
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
tar -zxvf libevent-2.1.12-stable.tar.gz
cd libevent-2.1.12
./configure --prefix=/usr/local/libevent
make -j4 && make test && make install

#安装libevent-devel
yum install -y libevent-devel
  • 编译安装Memcached
wget http://www.memcached.org/files/memcached-1.6.10.tar.gz
tar -zxvf memcached-1.6.10.tar.gz
cd memcached-1.6.10
./configure --prefix=/usr/local/memcached/
make -j4 && make install
#"-j4"请调整为你的服务器CPU核心数
  • 配置memcached

前往/etc/sysconfig目录中,新建一个文件,命名为memcached,编辑其内容,填入以下参数

PORT="11211"

#memcached监听的端口

USER="root"

#运行memcached的用户

MAXCONN="1024"

#最大连接数

CACHESIZE="128"

#最大内存,不推荐小于64

OPTIONS=""
#其他参数,请参考官方文档

随后前往之前下载的Memcached源码文件夹,找到scripts文件夹中的 memcached.sysv 文件,将其重命名为memcached 并复制到 /etc/init.d 文件夹中。

随后编辑此文件,在其中找到下列代码(大约在第33行的位置)并对其进行更改。

#原来是这样的
chown $USER /var/run/memcached
daemon memcached -d -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS

#请改成这样
chown $USER /usr/local/memcached/bin/memcached 
daemon /usr/local/memcached/bin/memcached -d -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS 

随后使用以下命令启动Memcached并设置开机自启动

#重载systemd服务,我忘了命令是啥了所以直接重启服务器
reboot

#启动
systemctl start memcached
systemctl enable memcached

#查看状态
systemctl status memcached

请注意,如果担心遭遇DDOS攻击或者出于某种原因关闭了防火墙,可以在配置文件的 OPTIONS 字段里加入以下代码

OPTIONS="-l 127.0.0.1 -U 0" 
#仅允许本地连接
  • 编译安装libmemcached依赖库

这是坑最多的一部分,请务必按照以下教程进行,如有问题请在评论区提出。

首先请明确自己的编译环境,GCC版本推荐升级到最新,以下是我的环境

GCC版本:10.2.0
GCC编译配置为:/root/gcc-10.2.0/configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
服务器系统:Centos7,内核为5.10.2-BBR

确认环境后我们来编译安装,依次执行以下命令

cd /root
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/libmemcached --with-memcached=/usr/local/memcached/bin/memcached
make -j4 && make test &&  make install

此时如果你发现提示了这样一个错误

...
CXX memflush.o 不能比较指针与整数的值
...
make[1]: *** [clients/memflush.o] Error 1

这是libmemcached一个bug,原因是GCC的新版本调整了语法,最简单解决方法如下:

将 clients/memflush.cc 中 42和52 行的 opt_servers == false 改为 opt_servers == NULL

或者你也可以自己改写一下他的 temp 指针的声明,不过很容易改坏掉所以不推荐。

然后重新编译,不出意外的话虽然会一片一片的弹warning出来,但是可以完成编译了。

  • 编译安装Memcached-PHP扩展
cd /root
wget https://pecl.php.net/get/memcached-3.1.5.tgz
tar -zxvf memcached-3.1.5.tgz
cd memcached-3.0.3

/usr/bin/phpize 
#用 phpize 命令生成 configure 配置文件

./configure --with-php-config=/usr/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
#请将php-config和libmemcached的目录换为你自己的安装目录

make -j4 && make test && make install

需要注意的是,根据每个人PHP的安装方式的不同,phpize 文件的位置也不同,如果你不知道 phpize 文件到底在哪,可以使用以下命令来查找,上面的 php-config 文件也是同理。

whereis phpize

#示例输出:phpize:/usr/bin/phpize /usr/share/man/man1/phpize.1.gz
#加粗部分即为phpize的路径

编译全部结束后会输出 memcached.so 这个文件安装的位置,请检查这个路径,如果你发现这个目录并不是php扩展的正确目录,请将memcached.so文件复制到你的php扩展文件夹。

  • 修改PHP.ini文件

php.ini 文件通常位于 /etc 目录下,在你完成以上所有步骤后请在这个文件末尾加上这样一句:

extension=memcached.so

随后请重启你的php服务和nginx服务

systemctl reload php-fpm
systemctl restart php-fpm
systemctl restart ngnix

接下来就需要在Wordpress中启用服务了

  • 在Wordpress中启用memcached

wordpress其实原生已经支持一个名为 wp_object() 的函数,所以不需要安装任何插件,只需要将一个 object-cache.php的文件放入wp-content 目录里就可以了,我这里提供一个自己修改过的版本,当然你也可以去网上下载其他人编写的版本。

如果你需要检查一下memcached是否已经安装并启用成功,可以安装一个名为 WPJAM-Basic 的插件,转到”系统信息”选项卡,如果看到有一个 Memcached 标签,则说明已经启动成功。

以下是一张启动成功后的Memcached状态截图

  • 问题排查

如果我在WPJAM-Basic里看不到Memcached怎么办?

  1. 检查你的Memcached服务是否已经正常运行
  2. 检查你的PHP扩展是否已经正确安装(可通过php_info查看)
  3. 检查你下载的object_cache.php是否适配,文件是否上传到了正确的目录。
  4. 如果修改了Memcached的运行端口,需要手动修改object_cache.php中的配置

在编译时遇到报错,提示缺少某个依赖库(如zlib等)

yum install https://centos7.iuscommunity.org/ius-release.rpm -y
#安装一个公认不错的yum源

yum update
#升级现有软件包

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel \
libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel \
bzip2 bzip2-devel ncurses ncurses-devel \
curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel \
openssl openssl-devel openldap openldap-devel \
nss_ldap openldap-clients openldap-servers gd gd2 \
gd-devel gd2-devel perl-CPAN pcre-devel
#一股脑把所有可能用到的依赖包全部装上

如果还有问题,欢迎在评论区提出(虽然我也可能解决不了,说实话这玩意挺玄学的)

若没有特殊说明,这篇文章 《Memcached安装踩坑记》最先发表在NanNan's Blog。本文采用BY-CC-SA 4.0协议授权,禁止用于商业用途,如需转载,请注明本文链接 https://blog.nannan.cool/archives/10/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇