zoukankan      html  css  js  c++  java
  • memcached复制-repcached

    1.前言

    由于memcached把数据都放到内存里,因此性能是极高的,正因为如此,不可避免会造成数据丢失,repcached就派上用场了,它可以实现memcached的主从复制

    2.安装repcached

    下面采用memcached和repcached一起安装的方式

    $ cd usr/local/src
    $ wget https://downloads.sourceforge.net/project/repcached/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz
    $ tar -zxvf memcached-1.2.8-repcached-2.2.1.tar.gz
    $ cd memcached-1.2.8-repcached-2.2.1
    $ ./configure --enable-replication --program-transform-name=s/memcached/repcached/
    error: 'IOV_MAX' undeclared (first use in this function) #centos编译会报这个错,需要修改代码
    $ vi memcached.c
    /* FreeBSD 4.x doesn't have IOV_MAX exposed. */
    #ifndef IOV_MAX
    #if defined(__FreeBSD__) || defined(__APPLE__) 
    #define IOV_MAX 1024
    #endif
    #endif
    $ make && make install

    3.测试复制

    为了方便,下面的测试是在同一台机器上开启两个端口来进行主从复制的

    $ memcached -p 11211 -d -v #-d表示守护进程 -v是打印日志
    replication: listen
    replication: accept
    
    #按下Ctrl+c,在本机添加从服务器,-x是主cache的ip
    $ memcached -p 11212 -d -x 192.168.56.10 -v
    replication: connect (peer=192.168.56.10:11212)
    replication: marugoto copying
    replication: start
    
    #分别连接测试主从同步
    $ telnet localhost 11211
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    set myname 0 0 6
    pigfly
    STORED
    quit
    Connection closed by foreign host.
    $ telnet localhost 11212
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    get myname
    VALUE myname 0 6
    pigfly #从cache已经能获取到主cache的数据了,说明主复制到从没有问题
    END
    set age 0 0 2
    23
    STORED
    quit
    Connection closed by foreign host.
    $ telnet localhost 11211
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    get age
    VALUE age 0 2
    23 #这里主cache也拿到了从cache的数据,说明从复制到主也没问题
    END
    quit
    Connection closed by foreign host.
    $ telnet localhost 11212
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    delete age
    DELETED
    quit
    Connection closed by foreign host.
    $ telnet localhost 11211
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    get age #删除也是同步的
    END

    4.总结

    简单配置几下就可以实现memcached的备份,是不是很开森?!考虑下面的一些情况:

    • repcached只支持memcached1.2.x,好几年没更新过了
    • 当有一台memcache宕机,repcached不会自动帮你切换到另外一台,要手动切换,考虑用缓存代理+主从复制
  • 相关阅读:
    一个iOS程序员眼中的跨域问题
    web 大规模并发访问的解决方案
    修改Capfile,在正式环境不再使用migration修改数据库
    关于 CAS 不能登录的问题
    老项目占地比较大的原因是release文件夹里有.git 目录
    capistrano3.4.0部署不能自动登录
    capistrano/blob/v3.4.0部署
    私有方法的查找方式
    开启关闭功能没有生效的原因
    找不到Settings
  • 原文地址:https://www.cnblogs.com/justlikeheaven/p/7778259.html
Copyright © 2011-2022 走看看