zoukankan      html  css  js  c++  java
  • 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
    

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

    坚持这种真诚,那么总归能遇到良人。
  • 相关阅读:
    hdu1003 最大子串和
    cf339d Xenia and Bit Operations
    A + B Problem II
    中国近代史纲要----王洪兵--2016年春季学期----中国海洋大学
    CodeForces 35D Animals
    CodeForces 558D
    Vanya and Brackets
    spfa
    hdu 1217 Arbitrage
    CodeForces 1A Theatre Square
  • 原文地址:https://www.cnblogs.com/jiaxiaozia/p/12160246.html
Copyright © 2011-2022 走看看