当前位置: 首页 > 工具软件 > Amoeba > 使用案例 >

php amoeba,Amoeba

冯育
2023-12-01

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-x  8 root root 4096 Apr 27 17:50 j2sdk1.4.2_15

lrwxrwxrwx  1 root root   13 Apr 27 17:52 jdk -> j2sdk1.4.2_15

drwxr-xr-x  9 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-x  8 root root 4096 May 13 09:20 j2sdk1.4.2_15

lrwxrwxrwx  1 root root   12 May 13 09:21 jdk -> jdk1.5.0_15/

drwxr-xr-x  9 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 INFO  net.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。

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

....

....

....

....

1

slave1,slave2,slave3

1500

master

master

multiPool

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

引用

在可用性测试已经完成的情况下,建议将log4j.xml 中关于日志输出level为debug的全部设置成warn或者error 级别。

日志是非常消耗系统性能的,在没有必要的情况下可以不使用debug。

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

不算复杂的处理就完成了amoeba的配置和使用了,更加复杂的应用请参考官网介绍资料:

amoeba 中文文档下载地址:http://amoeba.meidusa.com/amoeba.pdf

 类似资料:

相关阅读

相关文章

相关问答