memcached+magent的集群部署详细过程
问题描述
Memcached在实现分布集群部署时, Memcached服务端的之间是没有通讯的,服务端是伪分布式,实现分布式是由客户端实现的,客户端实现了分布式算法把数据保存到不同的Memcached服务端。
memcached对容错不做处理的,也就是说当 Memcached服务端挂掉或者Memcached重启复活后是无数据的,这对高并发的大型系统是没办法接受的。我们在集群的情况下,要做到负载均衡和容错,而memcached服务器端挂掉,负载就不均衡,缓存数据也会丢失,重新对数据库进行操作,加大系统性能消耗,数据丢失容错也做得不好。
解决方案
Magent是一款开源的Memcached代理服务器软件,使用它可以搭建高可用性的集群应用的Memcached服务,备份Memcached数据,尽管Memcached服务挂掉,前端也能获取到数据。
客户端先连到Magent代理服务器,然后Magent代理服务器再连接多台Memcached服务器,然后可以进行数据的保存和备份。这样数据就不会丢失,保存了数据完整性。
memcached+magent集群部署
安装libevent(Memcached用到了libevent这个库,所以先安装libevent)
虽然阿里云上已经安装了高版本的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文件就有了

安装magent
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 能正常显示帮助信息,就说明安装正确,如图所示:

安装memcached
- yum安装
yum install memcached
- 编译安装
#tar zxvf memcached-1.4.21.tar.gz
#cd memcached-1.4.21
# ./configure --prefix=/usr --with-libevent=/usr/local 指定libevent的安装位置
# make && make install
- 启动memcached服务
/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:最大可使用的内存。
查看Memcahce的运行状态
echo stats | nc localhost 11211

Memcache简单使用
用telnet连接memcached:
telnet xxx.xxx.xxx.xxx 11211
memcached 命令的参数和语法:
command <key> <flags> <expiration time> <bytes>
<value>

- set:无论如何都存储(数据不存在时进行添加:add 只有数据存在时进行替换:replace)
这个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
启动magent
到此,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
参数说明:
测试magent
在magent代理端(12000)保存数据,看下服务memcached(11211)和备份memcached(11211)是否都有这个数据



上述证明:通过magent的连接池放的值会分别存在magent代理的所有memcached上去
还有两个结论,通过类似的方式测试,这里不验证了:
如果有一个memcached宕机,通过magent代理方式还能取到值。
如果memcached修复重启后通过magent代理方式取到的值就会为Null,这是由于memcache重启后里边的值随着memcache服务的停止就消失了(因为在内存中),但是magent是通过key进行哈希计算分配到某台机器上的,memcache重启后会还从这台机器上取值,所以取到的值就为空。
解决办法:
在每次memcache宕机修复后可以写一个程序把集群中的其他memcache的所有信息全给拷贝到当前宕机修复后的memcache中。
- 自己写代理,当从一个memcached服务上取到的值为Null时再去其他memcached上取值。
magent的调用方式同memcached一样,所以magent与memcached 是可以混搭的,甚至我们可以视为等价,如下图的架构

memcached+magent的集群部署详细过程的更多相关文章
- Linux下使用Magent+Memcached缓存服务器集群部署
1.编译安装libevent cd /root/soft_hhf/ wget http://cloud.github.com/downloads/libevent/libevent/libeven ...
- centos7 memcached+magent+keepalived集群
111,222均部署keepalived,magent,memcached keepalived 111为主机,222为备机 其中,111上magent以本地memcache为主,222为备用 222 ...
- Redis集群搭建详细过程整理备忘
三.安装配置 1.环境 使用2台centos服务器,每台机器上部署3个实例,集群为三个主节点与三个从节点: 192.168.5.144:6380 192.168.5.144:6381 192.168. ...
- centos下hadoop2.6.0集群搭建详细过程
一 .centos集群环境配置 1.创建一个namenode节点,5个datanode节点 主机名 IP namenodezsw 192.168.129.158 datanode1zsw 192.16 ...
- 超详细从零记录Hadoop2.7.3完全分布式集群部署过程
超详细从零记录Ubuntu16.04.1 3台服务器上Hadoop2.7.3完全分布式集群部署过程.包含,Ubuntu服务器创建.远程工具连接配置.Ubuntu服务器配置.Hadoop文件配置.Had ...
- HBase 1.2.6 完全分布式集群安装部署详细过程
Apache HBase 是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,是NoSQL数据库,基于Google Bigtable思想的开源实现,可在廉价的PC Server上搭建大规模结构化存 ...
- redis3.0.5集群部署安装详细步骤
Redis集群部署文档(centos6系统) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) ...
- centos6下redis cluster集群部署过程
一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...
- Nginx+Tomcat+Memcached 实现集群部署时Session共享
Nginx+Tomcat+Memcached 实现集群部署时Session共享 一.简介 我们系统经常要保存用户登录信息,有Cookie和Session机制,Cookie客户端保存用户信息,Sessi ...
随机推荐
- 【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
问题描述 在Azure上创建虚拟机(VM)后,在门户上可以查看监控指标(Metrics),如CPU Usage,Memory,Disk I/O等.那如何通过Java 代码获取到这些指标呢? 关于VM ...
- JavaSE03-运算符&分支语句
1.运算符 1.1 算术运算符 1.1.1 运算符和表达式 运算符:对常量或者变量进行操作的符号 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式. 不同运算符连接的表达式 ...
- PHP代码审计学习-PHP-Audit-Labs-day2
filter_var()函数 filter_var() 函数通过指定的过滤器过滤一个变量.如果成功,则返回被过滤的数据.如果失败,则返回 FALSE. filter_var(variable, fil ...
- Spring自带的定时任务框架Schedule的优缺点及使用
spring自带的定时任务框架的有点:简单,拆箱即用 spring自带的定时任务框架的缺点: 不支持集群:为避免重复执行的问题 不支持生命周期统一管理:不重启服务情况下关闭,启动任务 不支持分片任务: ...
- springmvc中ModelAttribute注解应用在参数中
可以用@ModelAttribute来注解方法参数或方法.带@ModelAttribute创建的参数对象会被添加到Model对象中.注解在参数上时,可以从Form表单或URL参数中获取参数并绑定到mo ...
- 第一章: 初始JVM
跟很多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看.所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试. 因为装逼 但我经过了几年的学习和实战,我发现其实 ...
- LightningChart -XY 2D图表特性
LightningChart -XY 2D图表--2D图表 系列类型:抽样数据(离散数据).点线.任意形式的点线.面积.高低.多边形.股票系列(蜡烛图).条.带.恒定线.强度网格和强度网强度系列能够渲 ...
- 5、Mycat安全
1.权限配置 [1].user标签 目前 Mycat 对于中间件的连接控制并没有做太复杂的控制,目前只做了中间件逻辑库级别的读写权限控制.是通过 server.xml 的 user 标签进行配置. # ...
- 常用Appium API
以最右App为例 .apk文件网盘地址: 链接:https://pan.baidu.com/s/1L4MYkhpb5ECe8XeaneTx_Q 提取码:0jqm 操作类API # -*- coding ...
- ASP.NET Core 3.1使用JWT认证Token授权 以及刷新Token
传统Session所暴露的问题 Session: 用户每次在计算机身份认证之后,在服务器内存中会存放一个session,在客户端会保存一个cookie,以便在下次用户请求时进行身份核验.但是这样就暴露 ...