memcache配置、基本使用与集群配置

来源:互联网 发布:java 字符串数组排序 编辑:程序博客网 时间:2024/06/06 09:57

memcache安装过程

  1. 编译安装libevent:Libevent是一个异步事件处理软件函式库,以BSD许可证释出。Memcached依赖Libevent,因此必须先编译安装Libevent。

    1. 先到官网http://libevent.org/下载最新版本压缩包并解压
    2. 进入解压目录,执行:

      ./configure –prefix=/usr 
      sudo make && make install

    3. 检测libevent 安装是否成功, 输入:ls -al /usr/lib | grep libevent,若看到类似一下的信息,说明已安装成功:

    zenghao@zenghao-Lenovo-G510:~/下载/libevent-1.4.9-stable$ ls -al /usr/lib |grep libevent 
    lrwxrwxrwx 1 root root 21 3月 9 10:14 libevent-1.4.so.2 -> libevent-1.4.so.2.1.2 
    -rwxr-xr-x 1 root root 455075 3月 9 10:14 libevent-1.4.so.2.1.2 
    -rw-r–r– 1 root root 831386 3月 9 10:14 libevent.a 
    lrwxrwxrwx 1 root root 26 3月 9 10:14 libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.2 
    -rwxr-xr-x 1 root root 168643 3月 9 10:14 libevent_core-1.4.so.2.1.2 
    -rw-r–r– 1 root root 275182 3月 9 10:14 libevent_core.a 
    -rwxr-xr-x 1 root root 1009 3月 9 10:14 libevent_core.la 
    lrwxrwxrwx 1 root root 26 3月 9 10:14 libevent_core.so -> libevent_core-1.4.so.2.1.2 
    lrwxrwxrwx 1 root root 27 3月 9 10:14 libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.2 
    -rwxr-xr-x 1 root root 365013 3月 9 10:14 libevent_extra-1.4.so.2.1.2 
    -rw-r–r– 1 root root 672970 3月 9 10:14 libevent_extra.a 
    -rwxr-xr-x 1 root root 1016 3月 9 10:14 libevent_extra.la 
    lrwxrwxrwx 1 root root 27 3月 9 10:14 libevent_extra.so -> libevent_extra-1.4.so.2.1.2 
    -rwxr-xr-x 1 root root 974 3月 9 10:14 libevent.la 
    lrwxrwxrwx 1 root root 21 3月 9 10:14 libevent.so -> libevent-1.4.so.2.1.2

  2. 编译安装Memcached: 

    1. 到官网http://memcached.org/downloads下载最新版本压缩包解压
    2. 进入解压目录,执行: 

    ./configure –with-libevent=/usr 
    sudo make && make install

  3. 测试Memcached是否安装成功

启动服务器: memcached -d -m 128 -p 11111 -u zenghao 
测试连接: telnet 127.0.0.1 11111 
结果: 
Trying 127.0.0.1… 
Connected to 127.0.0.1. 
Escape character is ‘^]’. 
输入:stats,显示部分信息罗列如下: 
STAT pid 11812 
STAT uptime 148 
STAT time 1457491358 
STAT version 1.4.25 
STAT libevent 2.0.21-stable 
STAT pointer_size 64 当前操作系统的指针大小(64位系统一般是64bit) 
STAT total_connections 11 从服务器启动以后曾经打开过的连接数 
STAT connection_structures 11 服务器分配的连接构造数 
STAT cmd_get 0 get命令(获取)总请求次数 
STAT cmd_set 0 set命令(保存)总请求次数 
STAT cmd_flush 0 
STAT cmd_touch 0 
STAT get_hits 0 总命中次数 
STAT get_misses 0 总未命中次数 
STAT bytes_read 16 总读取字节数(请求字节数) 
STAT bytes_written 16 
STAT time_in_listen_disabled_us 0 
STAT threads 4 当前线程数 
STAT bytes 0 
STAT curr_items 0 服务器当前存储的items数量 
STAT total_items 0 
STAT evictions 0 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要 
END

  1. 编译安装magent:

    1. 到官网https://code.google.com/archive/p/memagent/downloads下载最新版本压缩包解压
    2. 进入解压目录,执行:

      /sbin/ldconfig 
      sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
      make 
      cp magent /usr/bin/magent

    3. 测试是否安装成功: 
      在任意目录下执行命令:magent, 若看到一下,说明已安装成功:

please provide -s "ip:port" argumentmemcached agent v0.6 Build-Date: Mar  9 2016 10:09:09Usage:  -h this message  -u uid  -g gid  -p port, default is 11211. (0 to disable tcp support)  -s ip:port, set memcached server ip and port  -b ip:port, set backup memcached server ip and port  -l ip, local bind ip address, default is 0.0.0.0  -n number, set max connections, default is 4096  -D don't go to background  -k use ketama key allocation algorithm  -f file, unix socket path to listen on. default is off  -i number, set max keep alive connections for one memcached server, default is 20  -v verbose
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

memcache 基本使用与集群

  1. memcache 服务端启动: 
    先进入memcached的安装目录,执行: 
    ./memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /tmp/memcached.pid

    -d 选项是启动一个守护进程, 
    -m 是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,默认64M 
    -u 是运行Memcache的用户 
    -l 是监听的服务器IP地址,我这里指定了服务器的IP地址127.0.0.1,默认是本机 
    -p 是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口, 
    -c 是最大运行的并发连接数,默认1024,这里设置了256,按照服务器的负载量来设定, 
    -P 是设置保存Memcache的pid文件,我这里是保存在/tmp/memcached.pid, 
    -h 查看帮助

  2. 结束一个Memcache进程 
    kill cat /tmp/memcached.pid 注意,上面命令中的符号是 `,不是单引号’

  3. 启动Magent代理 
    magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213

    命令参数: 
    -h help 
    -u uid 
    -g gid 
    -p port, default is 11211. (0 to disable tcp support) 
    -s ip:port, set memcached server ip and port 
    -b ip:port, set backup memcached server ip and port 
    -l ip, local bind ip address, default is 0.0.0.0 
    -n number, set max connections, default is 4096 
    -D don’t go to background 
    -k use ketama key allocation algorithm 
    -f file, unix socket path to listen on. default is off 
    -i number, set max keep alive connections for one memcached server, default is 20 
    -v verbose

  4. 利用magent搭建memcached集群

    1. magent的工作原理:一致性散列 
      如果固定服务器台数,可以简单地用键的散列值对服务器台数取模,得余数来决定服务器与数据的对应处理关系,但如果服务器台数发生变化,键值不变,则变化前后数据与服务器的对应关系就会发生变化,比如,本来数据A对应键值4443,对应4台服务器,4443 % 4 = 3,则交给编号③服务器处理,但现在新增一台服务器,则4443 % 5 != 3。而处理数据的服务器发生变化,因为缓存的原因,数据可能就无法正常读取,使用一致性散列的分散算法可以解决这个问题。 
      它的实现原理是先对各个服务器对应的散列值进行计算,把它们分配到一个圆周上。同时对各个数据对应的键的散列值进行计算,从键的散列值出发沿圆周向右,由距离改散列值最近的服务器来处理这条数据(数据的保存、读取都由这台服务器来执行。如下图所示 
      一致性散列算法分配示意图
      而在增加了服务器后,如下图中的服务器5,则服务器1,2,3处理的数据范围不变,仅将服务器4的一部分数据交给服务器5处理,这样可以大大降低缓存错误带来的影响。 

      由于memcache的数据都保存在内存中,当memcache由于故障等原因重启时,所有的数据都会丢失,因此memcache最好存储原始数据的备份或通过原始数据计算得到的结果
    2. 基本操作 

      1. 保存数据

            set <key> <flag> <expires> <byte> [换行] <value>

      参数: 
      flag->是否压缩数据,0:不压缩,1:压缩 
      expires->指定数据以秒为单位的保存时间(0表示有效期无限) 
      byte->指定作为值保存的数据的字节数。当用户希望存储空数据时,可以为0 
      实例: 
      set test 0 0 3 
      qqq 
      STORED

    3. 读取数据

            get <key>
    4. 删除KeyValue: 
            delete <key> <time> <br>

      a) 需要被删除数据的key 
      b) 客户端希望服务器将该数据删除的时间(unix时间或者从现在开始的秒数)

    5. 结果响应:reply 
      当以上数据发送结束之后,服务器将返回一个应答。可能有如下的情况: 
      a) “STORED\r\n”:表示存储成功 
      b) “NOT_STORED\r\n” : 表示存储失败,但是该失败不是由于错误。
    6. 其它命令: 
      • incr 数值加法
      • append/prepend [换行] 在数据尾/头添加内容 
        - tats reset 清空统计数据
      • stats malloc 显示内存分配数据
      • stats detail [on|off|dump] 设置或者显示详细操作记录 
        • 参数为on,打开详细操作记录
        • 参数为off,关闭详细操作记录
        • 参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)
      • flush_all 清空所有键值 
        注:flush并不会将items删除,只是将所有的items标记为expired,因此这时memcache依旧占用所有内存。
      • quit\r\n 退出
  5. 操作示例: 
    这里以二机集群测试为例:

    1. 启动Memcached及代理 
      1. 启动两个memcached进程,端口分别为11211和11212: 
        memcached -d -u zenghao -p 11211 
        memcached -d -u zenghao -p 11212 
      2. 再启动两个magent进程,端口分别为10000和11000: 
        magent -u zenghao -n 5120 -l 127.0.0.1 -p 10000 -s 127.0.0.1:11211 -b 127.0.0.1:11212
        magent -u zenghao -n 5120 -l 127.0.0.1 -p 11000 -s 127.0.0.1:11212 -b 127.0.0.1:11211
        -s 为要写入的memcached, -b 为备份用的memcached。 
        说明:测试环境用magent和memached的不同端口来实现,在生产环境中可以将magent和memached作为一组放到两台服务器上。也就是说通过magent能够写入两个memcached。
      3. 数据读写测试

      telnet 127.0.0.1 10000 
      Trying 127.0.0.1… 
      Connected to 127.0.0.1. 
      Escape character is ‘^]’. 
      set key 0 0 3 <—在10000端口设置key的值 
      qqq 
      STORED 
      quit 
      Connection closed by foreign host.

      telnet 127.0.0.1 11211 
      trying 127.0.0.1… 
      Connected to 127.0.0.1. 
      Escape character is ‘^]’. 
      get key 
      VALUE key 0 3 
      qqq <—在11211端口获取key的值成功 
      END 
      quit 
      Connection closed by foreign host.

      telnet 127.0.0.1 11212 
      Trying 127.0.0.1… 
      Connected to localhost.localdomain (127.0.0.1). 
      Escape character is ‘^]’. 
      get key <—在11212端口获取key的值成功 
      VALUE key 0 3 
      qqq 
      END 
      quit 
      Connection closed by foreign host.

    从以上测试,我们可以看到,两个memcache都在端口(模拟两台服务器)实现了缓存交互。

原创粉丝点击