magent+Memcached集群介绍
由于Memcached服务器与服务器之间没有任何通讯,并且不进行任何数据复制备份,所以当任何服务器节点出现故障时,会出现单点故障,如果需要实现HA,则需要通过另外的方式来解决。
通过Magent缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存连接服务器,缓存代理服务器可以连接多台Memcached机器可以将每台Memcached机器进行数据同步。如果其中一台缓存服务器down机,系统依然可以继续工作,如果其中一台Memcached机器down掉,数据不会丢失并且可以保证数据的完整性。
memcache键值存储:这个存储过程需要程序员来实现。程序员生成key-value。一般memcache用来缓存静态内容。主节点服务停止,程序上要自动调整到备份节点上。主节点服务恢复后缓存需要重新生成。
magent是memcache的补充,magent下memcache分主备,主节点分散存储所有的键值数据 ,备节点存储一个完整的所有键值数据。magent解决了memcache的不能节点分布式问题。
安装libevent
[root@node2 ~]# ls
libevent-1.4.9-stable libevent-1.4.9-stable.tar.gz magent-0.6.tar.gz mariadb-5.5.46 mariadb-5.5.46.tar.gz memcached-1.4.13.tar.gz
[root@node2 ~]#
libevent-1.4.9-stable
./configure &&make -j 2 &&make install
安装memcache
./configure --prefix=/usr/local/memcached-1.4.13 &&make -j 2 &&make install
安装magent
tar -xvf magent-0.6.tar.gz
报错
[root@node2 ~]# make
gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c
magent.c: In function ?.ritev_list?.
magent.c:729: error: ?.SIZE_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
[root@node2 ~]#
解决:
[root@centos6 memcached]# vi ketama.h
#在开头加入
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
make
报错
[root@node2 ~]# make
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
make: *** [magent] Error 1
[root@node2 ~]#
解决
[root@node2 ~]# find / -name libevent.a
/usr/local/lib/libevent.a
/root/libevent-1.4.9-stable/.libs/libevent.a
yum install glibc glibc-devel
如果是64bit的系统则不会在/usr/lib64/libm.a 生成,如果是32bit即会有。
[root@centos6 memcached]# cp /usr/lib64/libm.so /usr/lib64/libm.a
Vim Makefile
ifeq ($(ARCH), $(X64))
M64 = -m64
LIBS = /usr/local/lib/libevent.a /usr/lib64/libm.a
继续make
报错
[root@node2 ~]# make
gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/local/lib/libevent.a /usr/lib64/libm.a
/usr/local/lib/libevent.a(event.o): In function `gettime':
/root/libevent-1.4.9-stable/event.c:150: undefined reference to `clock_gettime'
/usr/local/lib/libevent.a(event.o): In function `detect_monotonic':
/root/libevent-1.4.9-stable/event.c:133: undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
make: *** [magent] Error 1
[root@node2 ~]#
解决
解决办法:
[root@centos6 memcached]# vi Makefile
CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64)
改为:
CFLAGS = -lrt -Wall -g -O2 -I/usr/local/include $(M64)
[root@centos6 memcached]# make
gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o -lrt /usr/lib64/libevent.a /usr/lib64/libm.a
[root@centos6 memcached]# ls 成功
Makefile ketama.c ketama.h ketama.o magent magent-0.6.tar.gz magent.c magent.o
软件下载
http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
http://memagent.googlecode.com/files/magent-0.6.tar.gz
http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
安装libevent-1.4.9-stable.tar.gz
tar zxvf libevent-2.0.13-stable.tar.gz
cd libevent-2.0.13-stable
./configure --prefix=/usr/local/libevent-1.4.9-stable
make
make install
安装memcacd
tar zxvf memcached-1.4.13.tar.gz
cd memcached-1.4.13
./configure --prefix==/usr/local/memcached-1.4.13 --with-libevent=/usr/local/libevent-1.4.9-stable
make
make install
安装magent
mkdir /usr/local/magent-0.6 && mv magent-0.6.tar.gz /usr/local/magent-0.6
tar zxvf magent-0.6.tar.gz
make
memcache命令
memcached启动参数描述:
-d :启动一个守护进程,
-m:分配给Memcache使用的内存数量,单位是MB,默认是64MB,
-u :运行Memcache的用户
-l :监听的服务器IP地址
-p :设置Memcache监听的端口,默认是11211 注:-p(p为小写)
-c :设置最大并发连接数,默认是1024
-P :设置保存Memcache的pid文件 注:-P(P为大写)
如果要结束Memcache进程,执行:kill cat pid文件路径
/usr/local/bin/memcached -d -m 256 -u memcached -l 172.16.11.20 -p 11211 -c 1024 -P /var/run/memcached/memcached.pid /usr/local/bin/memcached -d -m 256 -u memcached -l 192.168.11.30 -p 11211 -c 1024 -P /var/run/memcached/memcached.pid /usr/local/bin/memcached -d -m 256 -u memcached -l 192.168.11.40 -p 11211 -c 1024 -P /var/run/memcached/memcached.pid /usr/local/magent/magent -u root -n 4096 -l 172.16.11.10 -p 11200 -s 172.16.11.20:11211 -s 172.16.11.30:11211 -b 172.16.11.40:11211
报错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
解决办法:
[root@centos6 memcached]# vi ketama.h
#在开头加入
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
继续make
报错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
解决办法:
[root@centos6 memcached]# ln -s /usr/lib/libevent* /usr/lib64/
[root@centos6 memcached]# make
报错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 glibc glibc-devel
如果是64bit的系统则不会在/usr/lib64/libm.a 生成,如果是32bit即会有。
[root@centos6 memcached]# cp /usr/lib64/libm.so /usr/lib64/libm.a
继续make
报错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
解决办法:
[root@centos6 memcached]# vi Makefile
CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64)
改为:
CFLAGS = -lrt -Wall -g -O2 -I/usr/local/include $(M64)
[root@centos6 memcached]# make
gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o -lrt /usr/lib64/libevent.a /usr/lib64/libm.a
[root@centos6 memcached]# ls 成功
Makefile ketama.c ketama.h ketama.o magent magent-0.6.tar.gz magent.c magent.o