CentOS Linux 4.x 编译安装 memcached 1.4.33

安装:

1、CentOS Linux 4.x 非常旧,自带的 gcc 没法编译 memcached 1.4.33 的源代码,需要对 memcached 的源代码进行相应的修改(如强制类型转换、声明某些数据结构等),本文将会提供修改好的 memcached 源代码。

为什么要安装 memcached 1.4.33 ?

memcached 之前的版本存在整数溢出漏洞。memcached 是美国软件开发者布莱德-菲兹派翠克(Brad Fitzpatrick)所研发的一套高性能的分布式内存对象缓存系统。该系统通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度。memcached 1.4.31 版本中的 process_bin_append_prepend 函数存在整数溢出漏洞。攻击者可利用该漏洞造成堆溢出,导致远程代码执行。目前厂商已经发布了升级补丁以修复此安全问题,补丁链接:https://github.com/memcached/memcached/wiki/ReleaseNotes1433

2、进入你的 CentOS ,先使用以下命令查看 CentOS Linux 的版本号是否为 4.x :

[root@host ~]# cat /etc/redhat-release 
CentOS release 4.6 (Final)

3、进入你的 CentOS ,先使用 yum 安装 wget(如果已经安装过,可忽略这步):

[root@host ~]# yum -y install wget

4、卸载 CentOS Linux 自带的 libevent(如果有的话):

[root@host ~]# yum -y remove libevent libevent-devel

5、再编译安装一个新版本的 libevent( libevent 是 memcached 的依赖包):

去官网下载最新版的 libevent :

http://libevent.org/

如下图所示,复制 libevent 的下载链接(推荐安装 libevent-2.0.22-stable.tar.gz ):

下载最新版的 libevent
下载最新版的 libevent

Ricky 个人是喜欢把一些临时文件放到 /tmp 目录下,所以进入 /tmp 目录,使用 wget 命令把 libevent 的 tar.gz 包下载到这里,然后解压(或者下载到 PC 后,再通过 FTP 上传至 CentOS Linux ):

[root@host ~]# cd /tmp
[root@host tmp]# wget --no-check-certificate https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
[root@host tmp]# tar -xzvf libevent-2.0.22-stable.tar.gz
[root@host tmp]# cd libevent-2.0.22-stable
[root@host libevent-2.0.22-stable]# ./configure && make && make install

注意:如果不卸载 yum 里的 libevent ,那么当 memcached 编译安装完成跑起来以后你会发现 memcached 是没法正常工作的,所以需要卸载 yum 里的 libevent 并重新编译安装。

这里最好把这个 /usr/local/lib 路径添加到动态链接库,再刷新一下(如果已经配置过,可忽略这步):

[root@host libevent-2.0.22-stable]# echo "/usr/local/lib" >> /etc/ld.so.conf
[root@host libevent-2.0.22-stable]# ldconfig

6、使用 wget 命令把 memcached 的 zip 包下载到 /tmp ,然后解压(或者下载到 PC 后,再通过 FTP 上传至 CentOS Linux ):

[root@host libevent-2.0.22-stable]# cd ..
[root@host tmp]# wget --no-check-certificate https://ccie.lol/wp-content/uploads/2018/01/memcached-1.4.33-centos-linux-4.6.zip
[root@host tmp]# unzip memcached-1.4.33-linux-4.6.zip -d .

7、在安装新版本前请先关闭原来的 memcached ,memcached 关闭命令如下:

[root@host tmp]# ps aux|grep memcached|grep -v grep|awk '{print $2}'|xargs kill -9

或

[root@host tmp]# killall memcached

如果 CentOS Linux 提示没有 killall 命令,请使用 yum 安装 psmisc :

[root@host tmp]# yum -y install psmisc

8、进入解压出来的文件夹,在这里执行编译安装操作:

[root@host tmp]# cd memcached-1.4.33/
[root@host memcached-1.4.33]# ./configure  --prefix=/usr/local/memcached
[root@host memcached-1.4.33]# make && make install

9、把 memcached 的启动脚本添加到开机自启动(还要给 rc.local 文件添加可执行权限,如果已添加可忽略),并执行 memcached 的启动脚本即可:

(1)给 rc.local 文件添加可执行权限:
[root@host memcached-1.4.33]# chmod +x /etc/rc.d/rc.local
[root@host memcached-1.4.33]# chmod +x /etc/rc.local

(2)把 memcached 的启动脚本添加到开机自启动:
[root@host memcached-1.4.33]# echo "/usr/local/memcached/bin/memcached -d -m 2048 -u root -l x.x.x.x -p 11211 -c 10240 -P /var/run/memcached.pid" >> /etc/rc.local

(3)执行 memcached 的启动脚本:
[root@host memcached-1.4.33]# /usr/local/memcached/bin/memcached -d -m 2048 -u root -l x.x.x.x -p 11211 -c 10240 -P /var/run/memcached.pid

参数解释如下:

  • -d 选项是启动一个守护进程;
  • -m 是分配给 memcached 使用的内存数量,单位是 MB ,这里是 2048 MB ,默认是 64 MB ;
  • -u 是运行 memcached 的用户,这里是 root ;
  • -l 是监听的服务器 IP 地址,默认应该是本机的 IP 地址( x.x.x.x 为当前服务器的 IP 地址);
  • -p 是设置 memcached 监听的端口,默认是 11211 ,最好是 1024 以上的端口;
  • -c 选项是最大运行的并发连接数,默认是 1024 ,这里设置了 10240 ,按照你服务器的负载量来设定;
  • -P 是设置保存 memcached 的 pid 文件位置;
  • -h 打印帮助信息;
  • -v 输出警告和错误信息;
  • -vv 打印客户端的请求和返回信息。

10、删除文件夹:

[root@host memcached-1.4.33]# cd ..
[root@host tmp]# rm -rf libevent-2.0.22-stable
[root@host tmp]# rm -rf memcached-1.4.33

至此,安装完成。

查询 memcached 的版本号及其运行状态:

[root@host ~]# /usr/local/memcached/bin/memcached -V
memcached 1.4.33

或

[root@host ~]# telnet x.x.x.x 11211
Trying x.x.x.x...
Connected to host (x.x.x.x).
Escape character is '^]'.
stats                             # 输入命令 stats 查看运行状态
STAT pid 29974                    # 进程 ID
STAT uptime 7904734               # 服务器运行秒数
STAT time 1515676037              # 服务器当前 unix 时间戳
STAT version 1.4.33               # memcached 版本
STAT libevent 1.4.6-stable        # 依赖包 libevent 的版本
STAT pointer_size 64              # 操作系统字大小(这台服务器是 64 位的)
STAT rusage_user 19157.051685     # 进程累计用户时间
STAT rusage_system 49552.069940   # 进程累计系统时间
STAT curr_connections 425         # 当前打开连接数
STAT total_connections 13927256   # 曾打开的连接总数
STAT connection_structures 499    # 服务器分配的连接结构数
STAT reserved_fds 20
STAT cmd_get 5869050401           # 执行 get 命令总数
STAT cmd_set 354447496            # 执行 set 命令总数
STAT cmd_flush 0                  # 执行 flush_all 命令总数
STAT cmd_touch 0
STAT get_hits 5454345866          # get 命中次数
STAT get_misses 414704535         # get 未命中次数
STAT get_expired 110653625
STAT get_flushed 0
STAT delete_misses 149430883      # delete 未命中次数
STAT delete_hits 15005580         # delete 命中次数
STAT incr_misses 0                # incr 未命中次数
STAT incr_hits 0                  # incr 命中次数
STAT decr_misses 0                # decr 未命中次数
STAT decr_hits 0                  # decr 命中次数
STAT cas_misses 0                 # cas 未命中次数
STAT cas_hits 0                   # cas 命中次数
STAT cas_badval 0                 # 使用擦拭次数
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 280959007108      # 读取字节总数
STAT bytes_written 1766157532151  # 写入字节总数
STAT limit_maxbytes 31457280000   # 分配的内存数(字节)
STAT accepting_conns 1            # 目前接受的连接数
STAT listen_disabled_num 0
STAT time_in_listen_disabled_us 0
STAT threads 4                    # 线程数
STAT conn_yields 109
STAT hash_power_level 26
STAT hash_bytes 536870912
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT log_worker_dropped 0
STAT log_worker_written 0
STAT log_watcher_skipped 0
STAT log_watcher_sent 0
STAT bytes 22275653653            # 存储 item 字节数
STAT curr_items 95817036          # 当前 item 个数
STAT total_items 354447496        # item 总数
STAT expired_unfetched 634
STAT evicted_unfetched 0
STAT evictions 0                  # 为获取空间删除 item 的总数
STAT reclaimed 863
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END
quit                              # 输入命令 quit 退出
Connection closed by foreign host.
[root@host ~]#
打赏作者
这里是 “ CCIE 工程师社区 ” 官方的捐款通道,您是否可以考虑请我们喝杯咖啡呢?

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

Article Attachments

Was this article helpful?

Related Articles

Leave A Comment?

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据