阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 6.6下Memcached 源码安装配置

179次阅读
没有评论

共计 8500 个字符,预计需要花费 22 分钟才能阅读完成。

主机环境: CentOS 6.6 x86_64

一, 安装 Memcached

1, 由于 Memcached 依赖 libevent 库, 用它做 Socket 的处理, 因此, 我们需要安装 libevent 库, 我这里就用 yum 来安装了.

yum install libevent

2, 到官网下载 memcached 的源码包.  http://memcached.org

CentOS 6.6 下 Memcached 源码安装配置

最新版是 v1.4.24 

#wget

#tar xf  memcached-1.4.24.tar.gz

#cd memcached-1.4.24

编译安装

# yum install cyrus-sasl-devel.x86_64 

# ./configure  –prefix=/usr/local/memcached_1.4.24 –enable-sasl

但是有报错

CentOS 6.6 下 Memcached 源码安装配置

没有找到 libevent 库文件

 

# rpm -ql libevent

发现是安装到 /usr/lib64 目录下的.

3, 继续安装,,,,,  继续报错,, 算了, 我们直接编译安装最新版 libevent 吧

libevent 的官网是 http://libevent.org/

CentOS 6.6 下 Memcached 源码安装配置

直接下载最新的

# wget

# tar xf libevent-2.0.22-stable.tar.gz

# cd libevent-2.0.22-stable

# ./configure –prefix=/usr/local/libevent_2.0.22

# make && make install

4, 继续安装 memcached

# ./configure  –prefix=/usr/local/memcached_1.4.24 –enable-sasl –with-libevent=/usr/local/libevent_2.0.22/

# make && make install

5, 安装完成后  试运行下 memcached 看有无报错

CentOS 6.6 下 Memcached 源码安装配置

来看下安装后, 的目录树

CentOS 6.6 下 Memcached 源码安装配置

文件很少, 可执行程序只有 bin 目录下的 memcached 一个, 因此只能通过它来启动 memcached 服务. 我们来看下 memcached 命令的用法. 使用 memcached -h 查看.

6, memcached 参数详解

-p: 指定 tcp 协议的监听端口, 默认 11211

-U: 指定 UDP 协议的监听端口, 默认也是 11211

-s: 指定 unix 套接字路径, 使用 unix 套接字来监听.

-a: 设置套接字的掩码. 格式为八进制, 默认 0700

-l: 指定监听的网络地址. 默认为 0.0.0.0

-d: 将 memcached 作为守护进程, 在后台运行.

-r: 内核文件的最大值限制.

-u: 指定 memcached 的运行身份.

-m: 指定用于存储缓存条目的最大内存值, 单位为 MB (默认 64MB)

-M: 始终不删除过期的旧数据, 而是在内存耗尽过后直接报错.

-c: 限制同时的最大连接数.(默认 1024)

-k: 锁定所有分页内存.

注意: 这里是一个限制值, 限制了你可以锁定多少内存, 如果分配了超过限定值的操作, 将会失败. 因此要针对启动 memcached 的用户进程正确的限制, 而不是 - u 参数指定用户运行, 在 sh 下, 这个操作也可以使用 ulimit -S -l NUM_KB 来完成. 对于一个大的缓存来说, 这个有点危险, 因此查看 README 文档和 memcached 主页去查看有关他的配置建议.

-v: 详细模式

-vv: 更详细,,

-vvv: 最详细,,

-h: 帮助信息.

-i: 打印 memcached 和 libevent 许可.

-P: 保存 PID 文件的路径及文件名, 该参数只有在使用 - d 选项后才生效.

-f: 设置块 (chunk) 大小的增长因子, 默认 1.25

-n: 指定分配给 key value flags 的最小空间. 默认 48

-L: 尽量使用大内存页 (如果有效的前提下). 增加内存页的大小能够减少 TLB 失误数, 并且能提高性能. 为了能够从操作系统获取大的内存页,memcached 将会分配所有的缓存条目到一个大的快(chunk) 中. 这种机制与所使用的操作系统有关, 只有你的操作系统支持才有效.

-D: 使用 <char> 作为 key 前缀 和 ID 的分隔符, 用在状态报告中, 默认的 <char> 是冒号 : , 如果使用该参数指定了分隔符, 那么在状态收集中会自动打开, 如果没有设置, 那么需要向服务器发送 stats detail on 命令才会打开.

-t: 使用的线程数. 默认为 4

-R: 通过该参数来设定一个限制值, 定义每一个事件 (event) 请求的最大值, 以便保护能够处理完成一个单独的客户端请求, 一旦一个连接超过了这个值, 那么 memcached 将会试图通过其他的连接来处理 I /O. 它的默认值为 20

-C: 禁用 CAS

-b: 设置等待 (积压) 队列的限制, 默认 1024

-B: 设置绑定的协议 – 可选的有 ascii,binary 或 auto(默认).

-I: 设定每一个块 (slab) 页的大小, 默认的大小为 1MB, 最小为 1KB, 最大为 128MB, 调整这个值能够改变对缓存条目大小的限制. 当心这个操作同样会增加 slab 的数目(使用 - v 来查看), 并且会使用 memcached 的所有内存.

7, 启动 memcached

下面是启动 memcached 的两种方式.

第一种:

# ./memcached -u memcached -p 11211 -m 64m -vv

第二种方式:

# ./memcached -d -m 10 -u memcached -l 127.0.0.1 -p 11211 -c 50 -P /tmp/memcached.pid -vv

以下是输出内容:

slab class  1: chunk size        96 perslab  10922

slab class  2: chunk size      120 perslab    8738

slab class  3: chunk size      152 perslab    6898

…..

slab class  40: chunk size    616944 perslab      1

slab class  41: chunk size    771184 perslab      1

slab class  42: chunk size  1048576 perslab      1

<26 server listening (auto-negotiate)

<27 send buffer was 124928, now 268435456

<28 server listening (udp)

<30 server listening (udp)

<29 server listening (udp)

<27 server listening (udp)

分析如下:

CentOS 6.6 下 Memcached 源码安装配置

这里的 slab 就是相当于 memcached 提供的缓存,memcached 服务器堆内存的分配单位就是 slab, 一个 slab 大小在默认情况下是 1MB, 而每一个 slab 又被分为若干个 chunk, 就像对磁盘或内存的使用一样一层一层的分割直到最小单位, 而这里 chunk 就是最小的单位了, 然后在这些 chunk 中保持我们缓存的条目 item, 而 chunk 的大小也就完全一样了, 因此, 对于一个字节或者十个字节可能使用的 chunk 数目是一样多的, 也就是说最少也存在着浪费.

还有一点需要说明的是, 在每一个 chunk 中除了保存缓存条目的值 (value) 以外, 还有结构体, key .

图中 chunk 的增长大小就是因为有默认 -f 1.25 的增长因子作用.

添加 memcached 可执行程序的软连接到系统 PATH 目录下

ln -s /usr/local/memcached_1.4.24/bin/memcached /usr/bin/

8,memcached 的其他工具

在 memcached 的源码包中有一个 scripts 目录, 里面由一些自带的脚本和工具.

8.1, damemtop

  该工具使用 perl 模块, 如果以前没有安装过这些模块, 那么只有安装过后才可以使用.

8.1.1, 安装 perl 相关模块

  下面是 AnyEvent  YAML  TermReadKey 三个模块的安装.

# yum install perl perl-TermReadKey perl-YAML.noarch  -y

# ./damemtop

YAML Error: Couldn’t open /etc/damemtop.yaml for input:\n

  Code: YAML_LOAD_ERR_FILE_INPUT

at ./damemtop line 543

运行脚本报错,,  提示需要 /etc/damemtop.yaml 文件

那么可以吧 scripts 目录下的 damemtop.yaml 复制到 /etc/ 目录下

分析配置文件 damemtop.yaml

这个文件的格式采用了 YAML(是 YAML Ain’t a Markup Language 的缩写). 下面看一看配置文件内容:

CentOS 6.6 下 Memcached 源码安装配置

做好必要的配置后, 就可直接运行 damemtop 了

如图:

CentOS 6.6 下 Memcached 源码安装配置

8.2 memcached-sysv 服务脚本

顾名思义, 该文件是个系统服务脚本.

# cp memcached.sysv /etc/init.d/memcached

# chkconfig –add memcached

查看服务脚本, 由于我们的 memcached 是源码定制安装, 所以需要注意脚本中的黑色字体部分,

#! /bin/sh

#

# chkconfig: – 55 45

# description:  The memcached daemon is a network memory cache service.

# processname: memcached

# config: /etc/sysconfig/memcached

# Source function library.

. /etc/rc.d/init.d/functions

PORT=11211

USER=memcached

MAXCONN=1024

CACHESIZE=64

OPTIONS=””

if [-f /etc/sysconfig/memcached];then

  . /etc/sysconfig/memcached

fi

# Check that networking is up.

if [“$NETWORKING” = “no”]

then

  exit 0

fi

RETVAL=0

prog=”memcached”

start () {

  echo -n $”Starting $prog: “

  # insure that /var/run/memcached has proper permissions

  chown $USER /var/run/memcached

  daemon memcached -d -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS

  RETVAL=$?

  echo

  [$RETVAL -eq 0] && touch /var/lock/subsys/memcached

}

stop () {

  echo -n $”Stopping $prog: “

  killproc memcached

  RETVAL=$?

  echo

  if [$RETVAL -eq 0] ; then

      rm -f /var/lock/subsys/memcached

      rm -f /var/run/memcached.pid

  fi

}

restart () {

  stop

  start

}

# See how we were called.

case “$1” in

  start)

      start

      ;;

  stop)

  stop

  ;;

  status)

  status memcached

  ;;

  restart|reload)

  restart

  ;;

  condrestart)

  [-f /var/lock/subsys/memcached] && restart || :

  ;;

  *)

  echo $”Usage: $0 {start|stop|status|restart|reload|condrestart}”

  exit 1

esac

exit $?

———————————————

# mkdir /var/run/memcached

# chown memcached:memcached /var/run/memcached

# service memcached restart  // 看能否正常重启和启动服务.

当然如配置文件所示, 响应的参数可以单独写到 /etc/sysconfig/memcached 文件中, 这样 memcached 的配置文件结构更清晰.

8.3,  memcached-tool

memcached-tool 是基于 perl 的脚本, 使用前务必确认已经安装好 perl

# ./memcached-tool  // 直接运行工具查看效果

CentOS 6.6 下 Memcached 源码安装配置

执行没有参数的脚本后, 会给出使用示例.

六种格式: (1.4.5 版本之前只有四种格式, 新版新增了 settings 和 sizes , 而且提示信息也明确说明了 sizes 命令是一个开发人员选项, 实际生产环境并不推荐使用)

格式 1: memcached-tool ip:port display

CentOS 6.6 下 Memcached 源码安装配置

格式 2: memcached-tool ip:port

这种方式同 格式 1 是一种默认方式, 它的默认参数为 display

格式 3: memcached-tool ip:port stats

限制详细信息, 比如 memcached 版本号, 进程 pid 号,libevent 版本号, 线程数, 写入计数, 错误计数, 总连接数, 当前连接数,,,,,,

格式 4: memcached-tool ip:port dump

dump 参数会将内存中现有的缓存对象即 键 - 值 转存出来.

例如: memcached-tool 127.0.0.1:11211 dump > memcached.txt

9 查看 memcached 服务的运行情况

telnet 到 memcached 服务器后有很多的命令可以使用, 如 add get set incr decr replace delete 等,, 除此之外还有一系列的获取服务器信息的命令, 这部分命令都是以 stats 开头的.

memcached 提供了许多命令, 可以通过 telnet 工具来执行, 当然你也可以使用 PHP 提供的 Memcached::getStats($cmd) 来执行.

使用 telnet 命令

[root@_212 scripts]# telnet 127.0.0.1 11211

Trying 127.0.0.1…

Connected to 127.0.0.1.

Escape character is ‘^]’.

stats

STAT pid 23736                //Memcached 的进程 pid

STAT uptime 1495                    // 服务从启动到现在所经过的时间, 单位是秒

STAT time 1442132353                // 服务器所在主机当前系统的时间, 单位是秒

STAT version 1.4.24                  //Memcached 服务器的版本

STAT libevent 2.0.22-stable          //Memcached 服务器上 libevent 的版本

STAT pointer_size 64                // 所在主机操作系统的指针大小, 一般为 32 或 64  32 位系统 64 位系统

STAT rusage_user 0.018997            // 进程累积使用的用户时间

STAT rusage_system 0.030995          // 进程累积使用的系统时间

STAT curr_connections 10            // 当前打开的连接数

STAT total_connections 36            // 所有连接数

STAT connection_structures 11        // 服务器分配的连接结构数

STAT reserved_fds 20                //misc fds 使用数

STAT cmd_get 4                      // 执行 get 命令的总数

STAT cmd_set 2                      // 执行 set 命令的总数

STAT cmd_flush 0                    // 执行 flush 命令的总数

STAT cmd_touch 0                    // 执行 touch 次数,touch 可以刷新过期时间

STAT get_hits 3                      //get 命令的命中次数

STAT get_misses 1                    //get 命令的失败次数

STAT delete_misses 0                //delete 命令的失败次数

STAT delete_hits 0                  //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                    //touch 命令的命中次数

STAT touch_misses 0                  //touch 命令的失败次数

STAT auth_cmds 0                    //authentication 执行的次数

STAT auth_errors 0                  //authentication 执行失败的次数

STAT bytes_read 698                  // 服务器从网络上读取到的字节数 

STAT bytes_written 15636            // 服务器从网络上写入的字节数 

STAT limit_maxbytes 67108864        // 最大可用内存限制, 就是在命令行中的 -m 值

STAT accepting_conns 1              // 当前接受的连接数

STAT listen_disabled_num 0          //

STAT threads 4                      // 最大可用的线程数

STAT conn_yields 0                  //memcached 启动至今有多少次打开的连接因为内部请求数达到 -R 参数指定的限值而被动放弃的

STAT hash_power_level 16            //hashpower 的 level,可以在启动的时候设置 $ memcached -o hashpower=20

STAT hash_bytes 524288              // 内存使用总量单位为 byte

STAT hash_is_expanding 0            // 是否正在扩大 hash 表

STAT malloc_fails 0                  //

STAT bytes 72                        // 所有被存储条目的字节数

STAT curr_items 1                    // 当前缓存的条目数

STAT total_items 2                  // 缓存条目的总数

STAT expired_unfetched 0            //item 过期之前没有被 touch 过,也就是放进去之后就没更新过过期时间的数目

STAT evicted_unfetched 0            //item 替换覆盖之前没有被 touch 过,也就是放进去之后就没更新过过期时间的数目

STAT evictions 0                    // 为了给行的数据项目释放空间, 而从缓存移除的缓存对象数目

STAT reclaimed 0                    //memcached 启动至今有多少次在存储数据的时候使用了过期数据的空间

STAT crawler_reclaimed 0            // 被检索器回收的数目

STAT crawler_items_checked 0        //

STAT lrutail_reflocked 0            //

END

Memcached 安装及启动脚本 http://www.linuxidc.com/Linux/2013-07/87641.htm

PHP 中使用 Memcached 的性能问题 http://www.linuxidc.com/Linux/2013-06/85883.htm

Ubuntu 下安装 Memcached 及命令解释 http://www.linuxidc.com/Linux/2013-06/85832.htm

Memcached 的安装和应用 http://www.linuxidc.com/Linux/2013-08/89165.htm

使用 Nginx+Memcached 的小图片存储方案 http://www.linuxidc.com/Linux/2013-11/92390.htm

Memcached 使用入门 http://www.linuxidc.com/Linux/2011-12/49516p2.htm

Memcached 的详细介绍:请点这里
Memcached 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-09/123019.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8500字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中