`
gaofen100
  • 浏览: 1213454 次
文章分类
社区版块
存档分类
最新评论

amoeba-mysql的安装使用和读写分离(转)

 
阅读更多

转载 自己留着看 地址http://www.aslibra.com/blog/post/amoeba_mysql_proxy_rw_split.php




amoeba真的是不错的稳定而灵活的数据库解决方案,阿里巴巴的技术陈思儒开始的一个开源项目,它是分布式数据库Proxy解决方案。

About Amoeba

引用
Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户
端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请
求多台数据库合并结果。
主要解决:
* 降低 数据切分带来的复杂多数据库结构
* 提供切分规则并降低 数据切分规则 给应用带来的影响
* 降低db 与客户端的连接数
* 读写分离
* 制定一种规则可支持DB线性扩容

目前在amoeba 框架上面已经实现了 amoeba for mysql.


找寻到amoeba是出于想要做读写分离,目前可以有三种解决方式:

1 程序修改mysql操作类
可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求。
优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配
缺点:自己维护更新,增减服务器在代码处理

2 amoeba
参考官网:http://amoeba.meidusa.com/
优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案
缺点:自己分配账户,和后端数据库权限管理独立,权限处理不够灵活

3 mysql-proxy
参考 mysql-proxy
优点:直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号
缺点:字符集问题,lua语言编程,还只是alpha版本,时间消耗有点高

如果你不能安装软件来解决读写分离,那可以尝试阿权的项目解决思路。
如果你可以安装软件,那amoeba是不错的,mysql-proxy不太建议,目前只有alpha版本,效率还不太理想,amoeba目前在阿里巴巴是内部项目,正在生产环境使用的。

amoeba的安装使用

1 安装java环境,需要Java SE 1.5 或以上
2 配置xml文件

下载地址: http://www.sf.net/projects/amoeba
解压就可以使用的,顺便说一下,打包的习惯似乎不是太好,最好解压后是自己的文件夹

运行很简单 bin/amoeba 即可,后台运行 bin/amoeba &
如果没有配置JAVA_HOME,则会有如下提示:

[root@aslibra amoeba-mysql]# bin/amoeba
Error: JAVA_HOME environment variable is not set.


如果你是比1.5低,比如1.4的,运行会有错误提示:

[root@aslibra amoeba-mysql]# bin/amoeba
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/meidusa/amoeba/mysql/server/MysqlProxyServer (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
.....


安装配置java环境对于不玩java的人不太熟悉,我也不是行家,把自己的配置过程作一下分享:

首先根据你的操作系统下载相应的文件,比如jdk-1.5.0,文件下载地址:
http://java.sun.com/javase/downloads/index.jsp

下载回来的是bin文件,加执行属性,然后执行后就能有一个rpm文件,然后安装即可:

[root@aslibra amoeba-mysql]# rpm -ivh jdk-1_5_0_15-linux-i586.rpm
Preparing...########################################### [100%]
package jdk-1.5.0_15-fcs is already installed


配置JAVA_HOME变量:

[root@aslibra amoeba-mysql]# cd /usr/java/
[root@aslibra java]# ll
total 16
drwxr-xr-x8 root root 4096 Apr 27 17:50 j2sdk1.4.2_15
lrwxrwxrwx1 root root 13 Apr 27 17:52 jdk -> j2sdk1.4.2_15
drwxr-xr-x9 root root 4096 May 13 09:14 jdk1.5.0_15
[root@aslibra java]# rm jdk
rm: remove symbolic link `jdk'? y
[root@aslibra java]# ln -s jdk1.5.0_15/ jdk
[root@aslibra java]# ll
total 16
drwxr-xr-x8 root root 4096 May 13 09:20 j2sdk1.4.2_15
lrwxrwxrwx1 root root 12 May 13 09:21 jdk -> jdk1.5.0_15/
drwxr-xr-x9 root root 4096 May 13 09:14 jdk1.5.0_15


可以编辑 /etc/profile以便启动时变量生效,末尾加上

##############java###########

JAVA_HOME=/usr/java/jdk
PATH=$PATH:JAVA_HOME/bin
export JAVA_HOME PATH


依次运行此三句,配置好xml后,即可立刻使用amoeba:

[root@aslibra amoeba-mysql]# bin/amoeba
log4j:WARN log4j config load completed from file:/Data/apps/amoeba-mysql/conf/log4j.xml
log4j:WARN ip access config load completed from file:/Data/apps/amoeba-mysql/conf/access_list.conf
2009-05-13 09:22:04,306 INFOnet.ServerableConnectionManager - Server listening on /192.168.1.5:9306.


配置amoeba:

conf/amoeba.xml 配置mysql数据库,简单说明一下:

1 server节点定义amoeba为接受client访问的数据库,可以当作是mysql看待的,用户名和密码是访问时使用的,这个似乎不能定义多个用户名密码,也就是只有一个权限控制,这个对于多应用似乎不大方便。
2 dbServerList里面可以定义很多实际的mysql数据库,增加dbServer节点即可,这里的用户名密码是作为amoeba操作数据库使用的,要有足够权限。dbServer可以是虚拟的,比如要做负载均衡时可用定义多个数据库归属到此虚拟数据库。
3 queryRouter节点定义读写的分配情况,也就是读写该发往那个dbServer。

读写分离的配置示例片段:

<dbServerList>
<dbServer name="master">
....
</dbServer>
<dbServer name="slave1">
....
</dbServer>
<dbServer name="slave2">
....
</dbServer>
<dbServer name="slave3">
....
</dbServer>
<dbServer name="multiPool" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<property name="loadbalance">1</property>
<property name="poolNames">slave1,slave2,slave3</property>
</poolConfig>
</dbServer>
</dbServerList>
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<property name="LRUMapSize">1500</property>
<property name="defaultPool">master</property>
<property name="writePool">master</property>
<property name="readPool">multiPool</property>
</queryRouter>


另外一个需要修改一下的是 conf/log4j.xml,定义日志内容:

引用
在可用性测试已经完成的情况下,建议将log4j.xml 中关于日志输出level为debug的全部设置成warn或者error 级别。
日志是非常消耗系统性能的,在没有必要的情况下可以不使用debug。

参考:关于amoeba 性能测试注意的几点

不算复杂的处理就完成了amoeba的配置和使用了,更加复杂的应用请参考官网介绍资料:
amoeba 中文文档下载地址:http://amoeba.meidusa.com/amoeba.pdf


分享到:
评论

相关推荐

    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-...

    amoeba-mysql-1.2.0-RC3.zip

    标题中的"amoeba-mysql-1.2.0-RC3.zip"是一个特定版本的MySQL读写分离中间件,名为Amoeba。Amoeba是一个开源项目,它旨在解决数据库扩展性问题,尤其是针对MySQL数据库的读写分离需求。1.2.0-RC3代表这是1.2.0版本的...

    MySQL搭建Amoeba_读写分离.docx

    在本文中,我们将详细介绍如何使用 Amoeba 实现 MySQL 读写分离的配置过程。Amoeba 是一个基于 MySQL 的 proxy,能够集中地响应应用的请求,并根据用户事先设置的规则,将 SQL 请求发送到特定的数据库上执行,从而...

    amoeba-mysql

    4. **读写分离**:支持主从复制环境下的读写分离,提高读取性能。 5. **故障恢复**:当某个分片出现故障时,Amoeba能自动切换到其他健康的分片,保证服务连续性。 6. **扩展性**:随着业务增长,可以轻松添加新的...

    amoeba-mysql-3.0.4-BETA.tar.gz 实现集群管理 读写分离

    Amoeba主要解决以下问题: a). 数据切分后复杂数据源整合 b). 提供数据切分规则并降低数据切分规则给数据库带来的影响 c). 降低数据库与客户端连接 d). 读写分离路由 通过Amoeba实现读写分离

    构建高性能web之路------mysql读写分离实战.pdf

    文档提到了使用代理中间件Amoeba来实现更为灵活的数据库读写分离。Amoeba是一个数据库中间件,主要功能包括读写分离、负载均衡和高可用等。Amoeba的工作原理是,应用程序连接到Amoeba代理服务器,而非直接连接到...

    amoeba-mysql-binary-2.2.0.tar.gz

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

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

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

    amoeba-mysql-3.0.5-RC.tar.gz

    Amoeba MySQL 3.0.5 RC 是一个...总之,Amoeba MySQL 3.0.5 RC 是一个针对Linux平台的数据库读写分离解决方案,旨在提升系统的并发处理能力和稳定性。正确地部署和使用Amoeba,可以显著改善高负载环境下的数据库性能。

    Amoeba+mysql 读写分离 Keepalived+mysql

    这里我们主要探讨的是如何使用Amoeba与MySQL实现读写分离,以及如何利用Keepalived来构建MySQL的高可用集群。这两部分内容对于保障数据库服务的稳定性和效率至关重要。 **Amoeba+MySQL 读写分离** Amoeba 是一个...

    linux下mysql amoeba读写分离配置

    这里我们将探讨如何配置MySQL主从复制,以及使用Amoeba或MySQL-Proxy进行读写分离。 首先,让我们了解主从复制的基本原理。主从复制是一种异步复制模式,其中一台MySQL服务器(主服务器)处理所有的写操作,而其他...

    amoeba_mysql读写分离部署说明.docx

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

    amoeba-n.zip

    安装JDK后,我们才能启动和配置Amoeba服务,使其能够与MySQL服务器通信并执行读写分离。 **MySQL集群的构建步骤:** 1. **安装MySQL服务器**:首先,需要在多台服务器上安装MySQL服务器,设置主从复制关系。 2. **...

    Amoeba搞定mysql主从读写分离

    总之,Amoeba作为一款Java环境下的MySQL读写分离解决方案,通过智能的分片策略和高可用性设计,能够有效提升系统的读取性能和容错能力。但在实际应用中,需要结合业务需求和技术限制,合理选择和配置,才能发挥其...

    数据库读写分离中间件amoeba-n.tar.gz

    总之,Amoeba中间件通过实现数据库的读写分离,提高了系统的读取性能和扩展性,是现代分布式系统中一个关键的组件。在部署和使用过程中,理解其工作原理和最佳实践,以及正确配置和监控,对于提升整体系统性能至关...

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

    ### MySQL主从同步与读写分离配置详解 #### 一、实验目的 ...以上步骤涵盖了MySQL主从同步和读写分离的详细配置过程,以及可能出现的问题和解决方法。通过这些步骤,可以有效地提高数据库系统的稳定性和性能。

    mysql读写分离amoeba配置文件

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

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

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

Global site tag (gtag.js) - Google Analytics