手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

用Amoeba构架MySQL分布式数据库环境

首页 > DataBase >

国内对于MYSQL PROXY的研究也越来越多了,最近在淘宝DBA上看到这个,贴上来与君共享:

Amoeba是一个类似MySQL Proxy的 分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项目。其主要功能包括读写分离,垂直分库,水平分库等,经过测试,发现其功能和稳定性都 非常的不错,如果需要构架分布式数据库环境,采用Amoeba是一个不错的方案。目前Amoeba一共包括For aladdin,For MySQL和For Oracle三个版本,本文主要关注For MySQL版本的一个读写分离实现。实际上垂直切分和水平切分的架构也相差不大,改动几个配置就可以轻松实现。

下图是一个采用Amoeba的读写分离技术结合MySQL的Master-Slave Replication的一个分布式系统的架构:

Amoeba处于在应用和数据库之间,扮演一个中介的角色,将应用传递过来的SQL语句经过分析后,将写的语句交给Master库执行,将读的语句 路由到Slave库执行(当然也可以到Master读,这个完全看配置)。Amoeba实现了简单的负载均衡(采用轮询算法)和Failover。如果配 置了多个读的库,则任何一个读的库出现宕机,不会导致整个系统故障,Amoeba能自动将读请求路由到其他可用的库上,当然,写还是单点的依赖于 Master数据库的,这个需要通过数据库的切换,或者水平分割等技术来提升Master库的可用性。

Amoeba可以在不同机器上启动多个,并且做同样的配置来进行水平扩展,以分担压力和提升可用性,可以将Amoeba和MySQL装在同一台机 器,也可以装在不同的机器上,Amoeba本身不做数据缓存,所以对于内存消耗很少,主要是CPU占用。对于应用来说,图中的三个Amoeba就是三台一 模一样的MySQL数据库,连接其中任何一台都是可以的,所以需要在应用端有一个Load balance和Failover的机制,需要连接数据库时从三台中随机挑选一台即可,如果其他任何一台出现故障,则可以自动Failover到剩余的可 用机器上。MySQL的JDBC驱动从connector-j 3.17版本起已经提供了这样的负载均衡和故障切换的功能,那么剩下的事情对于应用来说就很简单了,不需要做太多的改动就能搭建一套高可用的MySQL分 布式数据库环境,何乐而不为?




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: amoeba, mysql, 分布式

« 上一篇 | 下一篇 »

只显示10条记录相关文章

2条记录访客评论

你好,建议向淘宝DBA咨询此问题,原文地址为:http://rdc.taobao.com/blog/dba/html/248_amoeba_for_mysql_distribute_environment.html,意外了一下,我居然没有留下原文链接。抱歉。

我记录下来是因为我可能会用到这个工具,毕竟在未来,主从可能更多的用于备份数据库,但实际当中,我还没有用到这个技术。纯粹是一个备份。

Post by gouki on 2009, June 14, 9:41 AM 引用此文发表评论 #1

您好,我试验amoeba有一段时间,现有几个问题向您请教:
amoeba运行的时候必须有 命令提示符(cmd)界面吗?有没有可以设置的地方,设置成没有界面、开机即运行的服务?
另外,在命令提示行里 每隔一段时间(10分钟)就出现一些DEBUG信息(向数据库服务器发送、接收数据的信息),这些信息可不可以取消?
2004-07-29 01:06:31,030 DEBUG net.MysqlServerConnection - authing result packet from server:192.168.2.203:3306
2004-07-29 01:06:31,055 DEBUG net.MysqlServerConnection - receive HandshakePacket packet from server:192.168.2.203:3306
2004-07-29 01:06:31,056 DEBUG net.MysqlServerConnection - authing packet sent to server:192.168.2.203:3306
2004-07-29 01:06:31,057 DEBUG net.MysqlServerConnection - authing result packet from server:192.168.2.203:3306
2004-07-29 01:16:26,622 DEBUG net.MysqlServerConnection - receive HandshakePacket packet from server:192.168.2.211:3306

Post by 鲁江 on 2009, June 13, 3:34 PM 引用此文发表评论 #2


发表评论

评论内容 (必填):