网站建设知识
mysql实现读写分离中间件Amoeba
2025-07-22 10:01  点击:0

Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多 企业的生产线上面使用。

amoeba主要解决以下问题:

a). 降低数据切分带来的复杂多数据库结构

b). 提供数据切分规则并降低数据切分规则给数据库带来的影响

c). 降低数据库与客户端连接

d). 读写分离路由

e).制定一种规则可支持DB线性扩容

暂不支持:

目前还不支持事务 暂时不支持存储过程(近期会支持) 不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合) 暂时不支持分库分表,amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致

官方地址:wiki.hexnova/display/amoeba/Home

使用指南:docs.hexnova/amoeba/

下载地址:https://sourceforge.net/projects/amoeba/files/

一、环境

master 192.168.0.109

slave 192.168.0.110

slave 192.168.0.112

已经配置好主从复制,基于gtid 事务的复制。mysql版本5.7.12

数据库统一访问用户:root 密码:abc123 并授权其他机器访问

grant all privileges on test_db.* to 'root'@'%' identified by 'abc123'; flush privileges; 创建了数据库test_db,和表temp。

二、amoeba安装

由于amoeba需要java环境,安装前提配置好java环境

下载amoeba-mysql-binary-2.2.0.tar.gz,并解压

tar -zxvf amoeba-mysql-binary-2.2.0.tar.gz -C amoeba

由于我安装的是jdk1.7,启动报如下错误:

The stack size specified is too small, Specify at least 228k Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. JDK7启动对xss参数有最小值要求,必须大于228才能启动JVM。需要将-Xss调整为256k,

三、修改amoeba配置

配置文件在conf下:

access_list.conf 访问机器列表设置 amoeba.xml 主配置文件,配置所有数据源以及Amoeba 自身的参数设置;实现主从的话配置这个文件就可以了 dbServers.xml mysql主从实例配置 log4j.xml 日志配置 functionMap.xml 配置用于解析Query 中的函数所对应的Java 实现类; rullFunctionMap.xml 配置路由规则中需要使用到的特定函数的实现类; rule.xml 配置所有Query 路由规则的信息

1.修改amoeba.xml,设置登陆amoeba的帐号密码

root 123456 ${amoeba.home}/conf/access_list.conf 2.修改dbServers.xml,设置主从数据库、访问的用户和密码 、端口 ${defaultManager} 64 128 3306 test_db root abc123 3.修改dbServers.xml,设置数据库服务器的IP地址和服务器别名。 192.168.0.109 192.168.0.110 192.168.0.112 4.修改dbServers.xml,设置ROUNDROBIN(轮询策略) 1 Master,Slave1,Slave2 5.修改amoeba.xml,设置读写分离 ${amoeba.home}/conf/rule.xml ${amoeba.home}/conf/ruleFunctionMap.xml ${amoeba.home}/conf/functionMap.xml 1500 Master Master multiPool true 四、启动测试 1.启动amoeba nohup bin/amoeba start|stop & 2.测试 使用mysql客户端连接amoeba mysql -u root -p123456 -h 192.168.0.112 -P 8066 更改数据主从可以正常同步。 手动将2个从数据库删除一条不同的数据,验证读的轮询策略 五、表分片配置说明 修改rule.xml,设置分片规则,设置需要分片的表、数据库名、分片的服务器、分片规则:对ID mod 2,分别分片到master1、master2。 ID 六,注意事项 1.修改log4j.xml 取消日志文件生成(太大了,磁盘很容易满),改成:/dev/null]]>"/> 2.性能优化,打开bin/amoeba,DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"改成:DEFAULT_OPTS="-server -Xms512m -Xmx512m -Xmn100m -Xss1204k" 3.loadbalance元素设置了loadbalance策略的选项,这里选择第一个“ROUNDROBIN”轮询策略,该配置提供负载均衡、failOver、故障恢复功能。poolNames定义了其中的数据库节点配置(当然也可以是虚拟的节点)。此外对于轮询策略,poolNames还定义了其轮询规则,比如设置成“Slave1,Slave1,Slave2”那么Amoeba将会以两次Slave1,一次Slave2的顺序循环对这些数据库节点转发请求。