• memcached_高可用


    memcached高可用

    一、magent

    1、安装

    cd /usr/local/
    mkdir ./magent
    cd ./magent
    wget -c http://memagent.googlecode.com/files/magent-0.6.tar.gz
    tar xzvf ./magent-0.6.tar.gz
    /sbin/ldconfig
    sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
    make
    cp ./magent /usr/bin/magent

    编译过程中可能遇到的各种问题

    执行make的时候

    报错1

    gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c
    magent.c: In function 'writev_list':
    magent.c:729: error: 'SSIZE_MAX' undeclared (first use in this function)
    magent.c:729: error: (Each undeclared identifier is reported only once
    magent.c:729: error: for each function it appears in.)
    make: *** [magent.o] Error 1

    解决方案

    vim ./ketama.h 
    #在开头加入
    #ifndef SSIZE_MAX
    #define SSIZE_MAX     32767
    #endif

    报错2:

    gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c
    gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o ketama.o ketama.c
    gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/lib64/libevent.a /usr/lib64/libm.a
    gcc: /usr/lib64/libevent.a: No such file or directory
    gcc: /usr/lib64/libm.a: No such file or directory

    解决方案

    ln -s /usr/lib/libevent*  /usr/lib64/

    报错3:

    gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/lib64/libevent.a /usr/lib64/libm.a 
    gcc: /usr/lib64/libm.a: No such file or directory
    make: *** [magent] Error 1

    解决方案

    yum install -y glibc glibc-devel 
    cp /usr/lib64/libm.so /usr/lib64/libm.a

    报错4:

    gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/lib64/libevent.a /usr/lib64/libm.a 
    /usr/lib64/libevent.a(event.o): In function `detect_monotonic':
    event.c:(.text+0xc79): undefined reference to `clock_gettime'
    /usr/lib64/libevent.a(event.o): In function `gettime':
    event.c:(.text+0xd60): undefined reference to `clock_gettime'
    collect2: ld returned 1 exit status
    make: *** [magent] Error 1

    解决方案

    vim ./Makefile

    CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64)
    改为:    
    CFLAGS = -lrt -Wall -g -O2 -I/usr/local/include $(M64)

    2、整理后的安装顺序

    1、在ketama.h中加入

    vim ./ketama.h 
    #ifndef SSIZE_MAX
    #define SSIZE_MAX 32767
    #endif

    2、安装依赖库

    yum install -y glibc-devel 
    cp /usr/lib64/libm.so /usr/lib64/libm.a
    ln -s /usr/lib/libevent* /usr/lib64/

    3、编辑Makefile

    CFLAGS = -Wall -g -O2 -I/usr/local/include (M64) 
    修改为
    CFLAGS = -lrt -Wall -g -O2 -I/usr/local/include (M64)

    4、重新编译

    /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" argument

    memcached agent v0.6 Build-Date: Aug 28 2018 23:43:35
    Usage:
     -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

    4、测试使用

    分别启动多个memcached 11211 11212 11213

    /usr/local/memcached/bin/memcached -uroot -d -p11211
    /usr/local/memcached/bin/memcached -uroot -d -p11212
    /usr/local/memcached/bin/memcached -uroot -d -p11213

    启动magent

    ./magent -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213

    二、repcached

    1、安装

    先安装libevent,什么方式都可以,如果是源码编译方式,之后编译参数加上--with-libevent的路径即可

    tar xvf memcached-1.2.8-repcached-2.2.1.tar.gz
    cd memcached-1.2.8-repcached-2.2.1
    ./configure --prefix=/usr/local/repcached --enable-replication --with-libevent=/usr/local/libevent
    make && make install

    编译中遇到错误解决

    memcached.c: 在函数‘add_iov’中:
    memcached.c:697: 错误:‘IOV_MAX’未声明(在此函数内第一次使用)
    memcached.c:697: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
    memcached.c:697: 错误:所在的函数内也只报告一次。)
    make[2]: *** [memcached-memcached.o] 错误 1
    make[2]: Leaving directory `/root/soft/memcached-1.2.8-repcached-2.2.1'
    make[1]: *** [all-recursive] 错误 1
    make[1]: Leaving directory `/root/soft/memcached-1.2.8-repcached-2.2.1'
    make: *** [all] 错误 2

    解决方案

    修改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
    
    改成:
    
    /* FreeBSD 4.x doesn't have IOV_MAX exposed. */
    #ifndef IOV_MAX
    # define IOV_MAX 1024
    #endif
    

    2、启动参数

    启动中遇到错误

    ./memcached -h
    ./memcached: error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory
    

    查找依赖库及其路径

    ldd ./memcached
    LD_DEBUG=libs ./memcached
    

    解决方案

    ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.
    

    查看启动参数

    ./memcached -h
    memcached 1.2.8
    repcached 2.2.1
    -p <num>      TCP port number to listen on (default: 11211)
    -U <num>      UDP port number to listen on (default: 11211, 0 is off)
    -s <file>     unix socket path to listen on (disables network support)
    -a <mask>     access mask for unix socket, in octal (default 0700)
    -l <ip_addr>  interface to listen on, default is INDRR_ANY
    -d            run as a daemon
    -r            maximize core file limit
    -u <username> assume identity of <username> (only when run as root)
    -m <num>      max memory to use for items in megabytes, default is 64 MB
    -M            return error on memory exhausted (rather than removing items)
    -c <num>      max simultaneous connections, default is 1024
    -k            lock down all paged memory.  Note that there is a
                  limit on how much memory you may lock.  Trying to
                  allocate more than that would fail, so be sure you
                  set the limit correctly for the user you started
                  the daemon with (not for -u <username> user;
                  under sh this is done with 'ulimit -S -l NUM_KB').
    -v            verbose (print errors/warnings while in event loop)
    -vv           very verbose (also print client commands/reponses)
    -h            print this help and exit
    -i            print memcached and libevent license
    -P <file>     save PID in <file>, only used with -d option
    -f <factor>   chunk size growth factor, default 1.25
    -n <bytes>    minimum space allocated for key+value+flags, default 48
    -R            Maximum number of requests per event
                  limits the number of requests process for a given con nection
                  to prevent starvation.  default 20
    -b            Set the backlog queue limit (default 1024)
    -x <ip_addr>  hostname or IP address of peer repcached
    -X <num:num>  TCP port number for replication. <listen:connect> (default: 11212)
    

    3、测试使用

    启动一台11211端口

    ./memcached -uroot -d
    

    启动另一台11211端口

    ./memcached -p 11212 -x 127.0.0.1 -d -uroot
    

    分别连接进行添加和删除测试,如果测试成功即可互相复制数据

    坚持这种真诚,那么总归能遇到良人。
  • 相关阅读:
    Java精通并发-自旋对于synchronized关键字的底层意义与价值分析以及互斥锁属性详解与Monitor对象特性解说【纯理论】
    线性表的链式存储结构
    Java精通并发-同步方法访问标志与synchronized关键字之间的关系
    Java精通并发-透过字节码理解synchronized关键字
    解决com.fasterxml.jackson.databind.JsonMappingException: No suitable
    mybatis绑定错误-- Invalid bound statement (not found)
    java.sql.SQLException: **** [SQLServer]对象名 "XXXX"无效
    Missing URI template variable 'XXXX' for method parameter of type String
    Unrecognized token 'XXXX': was expecting ('true', 'false' or 'null')
    ajax的data传参的两种方式
  • 原文地址:https://www.cnblogs.com/jiaxiaozia/p/12160246.html
Copyright © 2020-2023  润新知