安装:
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 :
如下图所示,复制 libevent 的下载链接(推荐安装 libevent-2.0.22-stable.tar.gz ):

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 ~]#
发表评论?