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

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

坚持这种真诚,那么总归能遇到良人。
原文地址:https://www.cnblogs.com/jiaxiaozia/p/12160246.html