Memcached在实现分布集群部署时, Memcached服务端的之间是没有通讯的,服务端是伪分布式,实现分布式是由客户端实现的,客户端实现了分布式算法把数据保存到不同的Memcached服务端。
memcached对容错不做处理的,也就是说当 Memcached服务端挂掉或者Memcached重启复活后是无数据的,这对高并发的大型系统是没办法接受的。我们在集群的情况下,要做到负载均衡和容错,而memcached服务器端挂掉,负载就不均衡,缓存数据也会丢失,重新对数据库进行操作,加大系统性能消耗,数据丢失容错也做得不好。
Magent是一款开源的Memcached代理服务器软件,使用它可以搭建高可用性的集群应用的Memcached服务,备份Memcached数据,尽管Memcached服务挂掉,前端也能获取到数据。
客户端先连到Magent代理服务器,然后Magent代理服务器再连接多台Memcached服务器,然后可以进行数据的保存和备份。这样数据就不会丢失,保存了数据完整性。
虽然阿里云上已经安装了高版本的libevent
但好像不是通过编译安装的,如果我们直接装magent,会提示:
我们find / -name event.h 发现该文件没有被包含在/usr/include或者/usr/local/include的头文件目录中,可能是跟rpm或yum方式安装有关系,故需要改用编译先安装libevent。
步骤如下:
tar xvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --with-libevent=/usr/local
Make
make install
检查安装成功:
再去查找event.h文件就有了
tar zxvf magent-0.6.tar.gz
make
报错1:
解决办法:vi ketama.h
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
继续make,报错2:
解决办法:ln -s 软连接
# ln -s /usr/local/lib/libevent* /usr/lib64/
继续make,报错3:
解决办法:
yum install glibc glibc-devel
如果是64bit的系统不会在/usr/lib64/libm.a 生成,如果是32bit即会有。
cp /usr/lib64/libm.so /usr/lib64/libm.a(我们是64位的,复制过去)
继续make,成功了!
最后创建magent的软连接
验证安装是否正确, #magent 能正常显示帮助信息,就说明安装正确,如图所示:
yum install memcached
#tar zxvf memcached-1.4.21.tar.gz
#cd memcached-1.4.21
/usr/bin/memcached -d -m 256 -p 11211 -u memcached
/usr/bin/memcached -d -m 256 -p 11212 -u memcached
-p:Memcached的监听端口号,不设置的话Memcached默认的的11211
-U:监听的upd端口,0的时候表示关闭,默认是11211
-l:监听的IP地址,不写的话所有的IP都能访问,写了的话只这这IP能访问,要是有多个IP用逗号分隔或者用多个-l就行了,实际应用中应当都是要配置的,不能让任何机器都能访问我们的memcached服务器,只有指定的机器可以访问。*有时候不配置想让只有固定的机器才能访问的话,可以配置电脑的防火墙只能固定的电脑IP访问。
-d:以后台的方式运行,不占用终端。
-m:最大可使用的内存。
echo stats | nc localhost 11211
用telnet连接memcached:
telnet xxx.xxx.xxx.xxx 11211
memcached 命令的参数和语法:
command
这个set的命令在memcached中的使用频率极高。set命令不但可以简单添加,如果set的key已经存在,该命令可以更新该key所对应的value。
图中字节数5一定要和value对应,不然得不到STORED 响应
get:可以通过“get 键名”的方式查看添加进去的记录
delete:通过delete命令删除掉,然后重新添加
ps:更多操作参考 http://www.cnblogs.com/jeffwongishandsome/archive/2011/11/06/2238265.html
到此,libevent、memcached、magent都安装好了,memcached也已启动,现在启动magent
magent -u root -n 51200 -l 0.0.0.0 -p 12000 -s 10.171.250.19:11211 -b 10.252.117.150:11211
参数说明:
-u 用户
-g gid
-p 启动端口, 默认11211
-s 服务memcached地址,ip:port, set memcached server ip and port
-b 备份memcached地址,ip:port, set backup memcached server ip and port
-l 启动IP地址,ip, local bind ip address, default is 0.0.0.0
-n 最大并发数number, set max connections, default is 4096
-D 非后台运行
在magent代理端(12000)保存数据,看下服务memcached(11211)和备份memcached(11211)是否都有这个数据
还有两个结论,通过类似的方式测试,这里不验证了:
自己写代理,当从一个memcached服务上取到的值为Null时再去其他memcached上取值。
magent的调用方式同memcached一样,所以magent与memcached 是可以混搭的,甚至我们可以视为等价,如下图的架构
手机扫一扫
移动阅读更方便
你可能感兴趣的文章