magent+Memcached集群介绍
由于Memcached服务器与服务器之间没有任何通讯,并且不进行任何数据复制备份,所以当任何服务器节点出现故障时,会出现单点故障,如果需要实现HA,则需要通过另外的方式来解决。
通过Magent缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存连接服务器,缓存代理服务器可以连接多台Memcached机器可以将每台Memcached机器进行数据同步。如果其中一台缓存服务器down机,系统依然可以继续工作,如果其中一台Memcached机器down掉,数据不会丢失并且可以保证数据的完整性。
memcache键值存储:这个存储过程需要程序员来实现。程序员生成key-value。一般memcache用来缓存静态内容。主节点服务停止,程序上要自动调整到备份节点上。主节点服务恢复后缓存需要重新生成。 magent是memcache的补充,magent下memcache分主备,主节点分散存储所有的键值数据 ,备节点存储一个完整的所有键值数据。magent解决了memcache的不能节点分布式问题。
软件下载
http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz http://memagent.googlecode.com/files/magent-0.6.tar.gzhttp://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文件路径
1
2
3
4
5
| /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
解决办法: [iyunv@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
解决办法: [iyunv@centos6 memcached]# ln -s /usr/lib/libevent* /usr/lib64/ [iyunv@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即会有。
[iyunv@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
解决办法: [iyunv@centos6 memcached]# vi Makefile CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64) 改为: CFLAGS = -lrt -Wall -g -O2 -I/usr/local/include $(M64)
[iyunv@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 [iyunv@centos6 memcached]# ls 成功 Makefile ketama.c ketama.h ketama.o magent magent-0.6.tar.gz magent.c magent.o
|