`
csrcom
  • 浏览: 13445 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Amoeba for mysql 0.31发布(读写分离、负载均衡、Failover、数据切分)

阅读更多
Amoeba 座落与Client、Database Server(s)之间。 具有负载均衡、高可用性、sql过滤、可承受高并发、读写分离、Query Route(解析sql query语句,并且根据条件与预先设定的规则,请求到指定的目标数据库。可并发请求多台数据库合并结果)、对客户端透明。 

主要降低 数据切分带来的复杂多数据库结构、数据切分规则 给应用带来的影响。



能够轻易实现读写分离
Failover
负载均衡。 
能够帮助解决数据切分问题 

目前amoeba 实现了 mysql 数据库的相关技术。


适用:
mysql 4.1或者以上版本(mysql 协议版本:10)
暂时不支持事务、DDL语句目前只会分配给默认的数据库执行

运行环境:

至少需要运行 mysql 4.1以上 服务一个;
Java 1.5或 以上版本



中文文档地址: http://amoeba.sourceforge.net/amoeba.pdf
amoeba 未来发展方向: http://amoeba.sourceforge.net/amoeba-big-picture.pdf

文件下载: http://www.sourceforge.net/projects/amoeba
amoeba 开发者博客: http://amoeba.meidusa.com
分享到:
评论
73 楼 sdh5724 2008-10-22  
Amoeba是为了解决大规模的数据水平与垂直切分用的。 数据的可靠性还是由数据库本身保证。 假设有一亿条数据, 并且每天所有数据都可能被读写。 那么即使使用ORC RAC, 并且架设在IBM小型机上, 这样的架构, 还是对于数据库的压力非常的大的。 几乎可能高峰时间会压垮数据库。  因此, 在这个规模下, 数据绝对可靠性都难以得到保证的, 性能更是难以保证。  Amoeba在这样的场合下, 解决的问题是非常有效的。 等我在生产环境部署后, 再来开贴详细分析。
72 楼 csrcom 2008-10-19  
0.31 发布 :

1、主要是性能提升将近20%。 总体性能目前在高并发、多核/多cpu 的情况下性能比mysql-proxy高30~50%左右
2、修复 解析“for update”sql bug
3、增加了虚拟数据库 HA 机制,<property name="loadbalance">3</property>
71 楼 csrcom 2008-09-18  
让人挺郁闷得。 sourceforge 最近扩容了database,一些开源项目依赖的数据库主机名变了,没有通知出来,现在连shell主机也无法登陆,没办法修改wordpress的数据库配置了。
70 楼 fff 2008-09-18  
http://amoeba.meidusa.com/ 挂了
Error establishing a database connection
69 楼 csrcom 2008-09-16  
amoeba for mysql 0.29 released

1、主要bug修复:当服务器端要求客户端密码加密采用老的方式的时候,导致amoeba向mysql server验证出现timeout问题。

非常感谢 网友 刘雅猛 多次抽出宝贵的时间测试amoeba。

项目URL:
http://www.sf.net/projects/amoeba
68 楼 csrcom 2008-09-04  
数据同步还是得交给 mysql得复制。
一般目前包括oracle、mysql、postgresql 都有自身得master-slave结构。
他们之间数据同步都采用相应内部复制技术。

这一点amoeba就不需要考虑这方面了
67 楼 ziyoujiedao 2008-09-03  
那么遇到update/insert/delete 将 query语句发送到 wirtePool,将 select发送到 readPool机器中执行。

那我入库的时候记录都到了wirtePool中,读取的时候走的readPool,那数据同步如何做到呢?
66 楼 csrcom 2008-08-27  
Amoeba for mysql 0.27 发布

这次发布主要是在性能上面有很大提升, 今天在4核 2cpu,8G内存下进行 100个线程并发请求amoeba,总共请求25000次, 每次sql返回的数据将近1500条.

在相同机器上面对mysql-proxy进行测试,在性能上比mysql-proxy有优势.具体数据这儿不方便说.

总的来说Amoeba系统设计为多核/多cpu更优越一点,如果单cpu上面 mysql-proxy可能会比amoeba在性能会好.

另外 Amoeba manager 将是 Amoeba 的下一个成员,负责管理amoeba,以及每个amoeba内部所有的DBServer.
65 楼 csrcom 2008-08-17  
amoeba 开发者博客开通: http://amoeba.meidusa.com
amoeba将以更好的方式来提供服务。描述每一个版本升级的情况、解决使用者以及开发者问题。

另外Amoeba for Mysql 0.25 released。 这个版本已经包含了源代码。
64 楼 csrcom 2008-08-12  
amoeba for mysql 0.24 released

重构了一下 connectionFactory 以及packetBuffer 以适应 amoeba for oracle

下载地址:

http://www.sf.net/projects/amoeba


由于sourceforge 速度太慢,源代码目前正在移至 googlecode
63 楼 dingyuan 2008-08-11  
支持作者的辛勤劳动
62 楼 csrcom 2008-08-11  
经过一系列代码上面的性能调优,大前天下午专门对amoeba进行高并发的测试.

环境:

amoeba环境:

Linux core5 2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:32:02 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux



cpu: 2颗 4核的AMD

vendor_id       : AuthenticAMD
cpu family      : 16
model           : 2
model name      : Quad-Core AMD Opteron(tm) Processor 2354
stepping        : 2
cpu MHz         : 2200.031
cache size         512 KB


8G内存



2台jdbc客户端, 机器跟amoeba所在的机器配置一致



amoeba配置:

                <property name="readThreadPoolSize">132</property>

                <!-- proxy server client process thread size -->
                <property name="clientSideThreadPoolSize">116</property>

                <!-- mysql server data packet process thread size -->
                <property name="serverSideThreadPoolSize">116</property>

                <!-- socket Send and receive BufferSize(unit:K)  -->
                <property name="netBufferSize">32</property>

                <!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->
                <property name="tcpNoDelay">true</property>





pool配置:

           <poolConfig><className>com.meidusa.amoeba.net.poolable.PoolableObjectPool</className>
                                <property name="maxActive">100</property>
                                <property name="maxIdle">100</property>
                                <property name="minIdle">10</property>
                                <property name="whenExhaustedAction">1</property>
                                <property name="minEvictableIdleTimeMillis">600000</property>
                                <property name="timeBetweenEvictionRunsMillis">600000</property>
                                <property name="testOnBorrow">true</property>
                                <property name="testWhileIdle">true</property>
</poolConfig>



2台客户端对amoeba 进行100个线程并发发起connection,总共发起500次请求,每个connection请求 100次 sql查询,每个sql查询返回2条数据.

每台客户端间隔10来秒启动几个这样的进程,总共启动40个进程.



经过10分钟在amoeba这一端看到客户端连接总共 (4288-1) 并发的jdbc客户端,server端有134个连接

2008-08-08 17:56:44,221 INFO  report -  State of server report:
- Uptime: 10m 783ms
- Report period: 10m 783ms
- Memory: 53474k used, 72584k total, 506816k max
* Server pool=multiPool
- pool active Size=134, pool Idle size=0
* Server pool=server1
- pool active Size=134, pool Idle size=0
* defaultManager
- Registed Connection size: 137
- packet out: 0
- bytesOut out: 0
* Mysql proxy Server
- Registed Connection size: 4288
- packet out: 0
- bytesOut out: 0





在这种高并发的情况下amoeba对每个连接的响应速度有所缓慢,但丝毫不影响其正常的运作.主要是server端不敢开太多的连接,mysql这端基本上面超过500个并发连接基本就不能正常对外提供服务了,这个跟mysql机器配置以及mysql配置有很大关系.

以后版本packet out/bytesOut out等都不作统计了.因此上面的log均为0.

上面的reporter每间隔1分钟汇报一次, 这种情形 4288绝对不是当时的最高值,目前amoeba的承受高并发能力还没有达到最高值,以后将会为多CPU做一个更优化的NIO框架设计,提升在高连接/高并发的优化设计.

目前版本0.24 暂时还未作 release ,预计明天下午就可以发布了

61 楼 csrcom 2008-08-05  
amoeba 0.22 版本发布:
bug fix:

1、解决在debug日志开启下,日志reporter线程访问selector.keys()、跟ConnectionManager线程访问selector.select(long),产生多线程并发问题。(selector.select、selector.keys 非线程安全)

http://www.sf.net/projects/amoeba
60 楼 csrcom 2008-08-05  
你好,

amoeba是解析mysql 网络协议的,其实你可以将其看作是mysql 服务器。

这个跟mysql官方开发的mysql-proxy一样。

在amoeba上面需要配置至少一个mysql server。

amoeba在其中充当数据包中转(路由)功能。

你根据amoeba.pdf文档可以轻易地配置 你的amoeba

配置文件: conf/amoeba.xml  --里面已经有相应的配置。只要做一些修改即可完成
启动脚本: bin/amoeba 或者 bin/amoeba.bat

启动以后,你就可以用java、php 直接连接amoeba,就象你用java、php 连接mysql server一样,没有任何区别。

注意amoeba.xml 中server配置属性的 user/password是连接amoeba的用户名 跟密码
客户端在连接amoeba的时候需要用amoeba.xml中server所配置的user/password来连接
59 楼 yueximing 2008-07-31  
老大,有没有使用例子? 我装上了amoeba,用php 怎么链接啊?
58 楼 csrcom 2008-07-30  
amoeba 0.20 版本发布

感谢同行们的测试以及反馈

这个版本修复了 在断开数据包异常的connection而导致 amoeba死锁问题
修复了 2个sql parser问题

57 楼 csrcom 2008-07-29  
amoeba for mysql 0.19 版本发布

1、主要是解决各种客户端的编码问题



sourceforge 终于可以访问了

下载地址 http://www.sourceforge.net/projects/amoeba
56 楼 csrcom 2008-07-28  
0.18 bug fix list:

         1、解决 使用非线程安全的 LRUMAP

         2、解决初始化与mysql server 连接timeout,而后多次出现Disconnecting non-communicative server 问题。

         3、Connection Manager进行优化,从Connection Manager中增加Connection、删除Connection 都将采取异步处理。

         4、IPAccessControl bug fix

GZ 版本:http://amoeba.meidusa.com/amoeba-mysql-0.18.tar.gz

ZIP 版本:http://amoeba.meidusa.com/amoeba-mysql-0.18.zip
55 楼 csrcom 2008-07-25  
amoeba for mysql 0.17 发布

1、解决了不能parse:  insert into set column=value [("," column=value) *] 语法
2、增加了IP 访问控制,默认IP 控制文件在 amoeba 安装目录下面conf/access_list.conf
#配置IP访问控制
#
# 优先级别从上往下,前面的优先级别高,每条一行

#192.*.1.236-239:yes 
#比如192.34.1.238则可以访问,否则将不能访问。

#218.85.*.*:no
#127.0.0.1:yes

3、增加了用户自定义规则函数。
 <?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:function SYSTEM "function.dtd">
<amoeba:function xmlns:amoeba="http://amoeba.meidusa.com/">
	
	<!--
		规则函数列表
		系统默认保持一份,这儿如果function name 名字跟系统内部一样,将覆盖系统内部的规则函数
		规则函数的编写:必须继承com.meidusa.amoeba.sqljep.function.PostfixCommand 类
	-->
	<function name="hash">
		<className>com.meidusa.amoeba.sqljep.function.Hash</className>
	</function>

</amoeba:function>

原先的amoeba.xml种的 queryRouter 增加一行配置:
<queryRouter>
	<className>com.meidusa.amoeba.mysql.parser.MysqlQueryRouter</className>
	<property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>
	<property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>
	<property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>
	<property name="LRUMapSize">1500</property>
	<property name="defaultPool">server1</property>
	
	<!--
	<property name="writePool">server1</property>
	<property name="readPool">server1</property>
	-->
	<property name="needParse">true</property>
</queryRouter>

4、classloader装载从2个地方
一个是amoeba/lib/*.jar 
一个是amoeba/lib/classes这2种路径将在程序启动的时候加载,

用户可以将自己编写的类库打成jar包放入lib目录下面,或者将class放入lib/classes文件夹下面

下载地址:
http://amoeba.meidusa.com/amoeba-mysql-0.17.zip
54 楼 csrcom 2008-07-18  
非常感谢冯大辉啊

最新的bug fix

linux上面 schema、table name 大小写敏感问题已经解决。

http://amoeba.sf.net/amoeba-mysql-0.16.1.zip

相关推荐

    windows平台用amoeba+mysql实现读写分离

    在Windows平台上实现MySQL的读写分离,一般会用到Amoeba这个中间件,它能够代理MySQL的读写请求,将写操作转发到主数据库,将读操作分发到多个从数据库上,从而提高系统的读取性能,并保证数据的一致性。下面详细...

    MySQL搭建Amoeba_读写分离.docx

    Amoeba 是一个基于 MySQL 的 proxy,能够集中地响应应用的请求,并根据用户事先设置的规则,将 SQL 请求发送到特定的数据库上执行,从而实现负载均衡、读写分离、高可用性等需求。 一、Amoeba 简介 Amoeba 是一个...

    Amoeba搞定mysql主从读写分离

    Amoeba是一款开源的MySQL中间件,专为实现主从读写分离而设计。在Java开发环境中,Amoeba的使用能够帮助开发者构建出高效、稳定的分布式数据库系统。 首先,了解Amoeba的工作原理至关重要。Amoeba作为透明的数据分...

    Amoeba+mysql 读写分离 Keepalived+mysql

    在构建高可用和高性能的数据库系统中,读写分离和负载均衡是常用的技术手段。这里我们主要探讨的是如何使用Amoeba与MySQL实现读写分离,以及如何利用Keepalived来构建MySQL的高可用集群。这两部分内容对于保障数据库...

    Amoeba for mysql

    Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性...

    amoeba_mysql读写分离部署说明.docx

    Amoeba 是一款专为 MySQL 设计的中间件,用于实现数据库的读写分离和负载均衡。它的主要功能是接收应用程序的 SQL 请求,根据预设规则将这些请求转发到合适的 MySQL 实例上执行,从而提高系统的可扩展性和可用性。...

    amoeba同时做读写分离和水平切分

    这是针对amoeba for mysql的一个具体案例,实现水平切分和读写分离

    Amoeba搞定mysql主从读写分离.pdf

    Amoeba搞定mysql主从读写分离.pdf

    linux下mysql amoeba读写分离配置

    在Linux环境下,MySQL数据库的读写分离和数据同步是提高数据库性能和可用性的关键策略。MySQL的主从复制(Master-Slave Replication)和读写分离(Read-Write Separation)是实现这一目标的常用方法。这里我们将探讨...

    amoeba-mysql-binary-2.2.0.tar.gz

    amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gzamoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gz ...

    mysql读写分离amoeba配置文件

    mysql读写分离 中间件amoeba配置文件配置号的改几个参数就可以直接用https://blog.csdn.net/z13615480737/article/details/79951505 参考这个改2个文件就可直接用

    amoeba-mysql-binary-2.2.0.tar

    Amoeba是一个分布式数据库中间件,它能够将一个MySQL实例透明地扩展到多个节点,实现数据的高可用性和负载均衡。这个tar文件可能包含了Amoeba运行所需的全部文件,如配置文件、库文件和可执行文件等。 描述中提到了...

    使用amoeba实现mysql读写分离.md

    使用amoeba实现mysql读写分离.md

    Amoeba(amoeba-mysql-3.0.5-RC-distribution.zip)

    可以实现数据库负载均衡、读写分离、高可用性等功能。 amoeba-mysql.zip压缩包内容: amoeba-mysql-3.0.5-RC-distribution.zip amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.1.0-RC5.tar.gz amoeba-...

    使用mysql-proxy实现mysql读写分离

    ### 使用mysql-proxy实现MySQL读写分离 随着业务规模的不断扩大,数据库系统往往成为整个系统中的瓶颈之一。为了提高系统的响应速度以及数据处理能力,一种常用的技术手段就是采用**读写分离**的方式。读写分离的...

    使用amoeba搭建mysql读写分离

    配合docker_mn.sh 主从复制和jdk1.8.sh jdk安装脚本 可以搭建mysql数据库的读写分离

    windows平台用amoeba实现读写分离

    具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多企业的生产线上面...

    MySQL主从同步与读写分离配置图文详解

    ### MySQL主从同步与读写分离配置详解 #### 一、实验目的 在现代的生产环境中,单一的MySQL服务器往往无法满足对数据处理的安全性、高可用性和高并发的需求。因此,采用**主从同步(Master-Slave Replication)**...

Global site tag (gtag.js) - Google Analytics