Amobe介绍

Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。

这个软件基于Java致力于MySQL的分布式数据库前端代理层,处于在应用和数据库之间,对客户端透明,它主要在应用层访问MySQL的时候充当SQL路由功能,解析应用传递过来的SQL语句,专注于分布式数据库代理层(Database Proxy)开发。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多企业的生产线上面使用。

优点:Amoeba已经具有Query路由,Query过滤,读写分离,负载均衡以及HA机制等相关内容。

缺点:Amoeba暂不支持事务;amoeba不支持跨库join和排序;amoeba不支持分库分表等;

Amoeba 主要解决的以下几个问题:

数据切分后复杂数据源整合;

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

降低数据库与客户端的连接数;

读写分离路由;

Amobe实现读写分离配置

安装环境如下

master 192.168.1.5 rac1-node.tp-link.net

slave 192.168.1.6 rac2-node.tp-link.net

amobe 192.168.1.2 poprodbak.tp-link.net

安装amoeba前要安装jdk,因为amoeba是由java开发的。同时设置JAVA_HOME

下载ameba软件

使用amoeba稳定版

# mkdir amoeba

# cd amoeba

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

配置amobe

解压完以后,下面进行配置。在conf目录下可以看到很多.xml后缀的文件。其中

amoeba.xml是对amoeba代理的配置,定义读写分离的节点管理信息;

dbServers.xml是对后端service的配置,定义数据库的信息;

rule.xml可以定义高级设置比如数据的水平、垂直切分等;

log4j.xml定义日志等。

配置dbServers.xml

${defaultManager}

64

128

3306

\\这个是后端数据的端口

test

\\这个是后端默认的数据库

root

\\下面的配置是定义一个主节点和一个从节点。

\\定义一个主节点

192.168.1.5

root \\连接数据库的用户名

root \\连接数据库的密码,此处如果写库跟读库密码一致,可以写在上面公共段,这里会继承上面的设置

\\定义一个从节点

192.168.1.6

root

root

\\定义池,把master和slave加入

\\server1是要把master节点加入

< ! -- 负载均衡参数1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

1

master

1

slave,slave,slave,master

配置amobe.xml

8066

\\定义amoeba读写分离proxy对外代理的端口

${clientConnectioneManager}

root

\\定义通过amoeba登录的用户名

root

\\相应的这个就是密码了。定义proxy的管理帐号密码,客户端和程序只需要连接proxy的帐号密码即可,相当于中间件封装

1500

master

\\定义默认的池,一些除了SELECT\UPDATE\INSERT\DELETE的语句都会在defaultPool执行

master

\\定义写的池,这里的master就是在dbServer.xml中的master

readPool

\\定义读的池,这里的readPool就是在dbserver.xml中的readPool

true

启动amobe

# ./amoeba start &

[1] 2381

# netstat -tlnp | grep 8066

tcp 0 0 :::8066 :::* LISTEN 2381/java

以上说明amoeb已经正常启动了。

# mysql -h 192.168.1.2 -ulibai --port 8066 –p

连接报错

java.util.NoSuchElementException: Could not create a validated object, cause: ValidateObject failed

修改dbServers.xml配置,factoryConfig中 password默认是被注释掉的,取消注释

还是报错,后来发现原来是schema设置不对,这个是要设置为数据库名。修改后通过amoeba连接数据库正常。

至此,amoeba正常启动,客户端可以通过amoeba正常连接MySQL数据库。

验证测试

使用tcpdump抓包工具分析,读写是否分离到master和slave上。

在master和slave上分别执行

# tcpdump -i eth2 -s 0 -A -n -p port 3306 and src 192.168.1.2 | grep -i 'SELECT\|INSERT'

其中192.168.1.2是amoeba服务器

在amoeba服务器上执行select操作

slave上可以抓取到如下信息,查询三次以后,可以从master抓取到查询信息(因为此时master和slave节点数据刚好不一致,可以非常清晰地确实是在master上执行的)。因此可以大概验证amoeba设置的读操作slave和master 3比1的比例。

...p(Y.......select * from t

13:59:36.355619 IP 192.168.1.2.24489 > 192.168.1.6.mysql: Flags [.], ack 869, win 96, options [nop,nop,TS val 85451120 ecr 676978448], length 0

在amoeba服务器上执行insert操作

master抓包如下信息,slave上没有任何变化。因此可以验证写操作完全在master节点上完成。

14:06:47.578469 IP 192.168.1.2.58575 > 192.168.1.5.mysql: Flags [P.], seq 68:90, ack 94, win 46, options [nop,nop,TS val 85882307 ecr 677373872], length 22

E..JF.@.@.p|............>K....AM...........

..u.(_.......set names latin1.

14:06:47.578830 IP 192.168.1.2.58575 > 192.168.1.5.mysql: Flags [.], ack 105, win 46, options [nop,nop,TS val 85882308 ecr 677413229], length 0

E..4F.@.@.p.............>K.+..AX.....d.....

..u.(`.m

14:06:47.579712 IP 192.168.1.2.58575 > 192.168.1.5.mysql: Flags [P.], seq 90:135, ack 105, win 46, options [nop,nop,TS val 85882309 ecr 677413229], length 45

E..aF.@.@.pc............>K.+..AX...........

..u.(`.m)....insert into t values(5,'this_is_amoeba')

14:06:47.622539 IP 192.168.1.2.58575 > 192.168.1.5.mysql: Flags [.], ack 116, win 46, options [nop,nop,TS val 85882352 ecr 677413233], length 0

E..4F.@.@.p.............>K.X..Ac...........

..u.(`.q

性能对比

针对MySQL Proxy和Amoeba进行了简单的性能对比测试

分别查询14W条数据,proxy和amoeba表现几无差别。

第一次(s) 第二次 3 4 5 平均(s)

Mysql-proxy 0.27 0.27 0.28 0.29 0.26 0.274

Amoeba 0.23 0.26 0.33 0.25 0.34 0.282

分别插入14W条数据,proxy平均为1.8S,amoeba平均为1.95S。

可以看出mysqlproxy和amobe几无差别,可能是因为数据量比较小。

mysql be_Amobe实现MySQL读写分离相关推荐

  1. 【纯干货】Amoeba实现MySQL主从同步与读写分离

    [纯干货]Amoeba实现MySQL主从同步与读写分离 一.简介 amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件.这个软件致力于 ...

  2. mysql sharding 读取_MySQL读写分离(一)——sharding-jdbc

    sharding-sphere是强大的读写分离.分表分库中间件,sharding-jdbc是sharding-sphere的核心模块.官方网站 springboot项目中集成sharding-jdbc ...

  3. mysql主从复制中间件_linux下mysql主从复制(第二篇读写分离) mycat 中间件

    linux下mysql主从复制(第二篇读写分离) mycat 中间件 接着上篇文档补全,mysql 读写分离,在上篇文章案例下准备好Mycat-server-1.4-release-201510192 ...

  4. MySQL的主从复制与读写分离技术实例(一)主从复制

    系统版本:CentOS 6.5   MySQL版本:mysql-5.5.38 生产环境下,如果对同一个数据库服务器即做写服务又做读服务,无论是从安全性.高可用性还是高并发等各个角度都不能满足实际需求, ...

  5. 数据库应用——Atlas代理MySQL集群实现读写分离

    Atlas代理MySQL集群实现读写分离 一.Atlas简介和架构 1.1 环境准备 1.2 配置时间服务器 二.主服务器配置 2.1 master节点1的配置 2.2 master节点2的配置 2. ...

  6. MySQL之——MSS主从复制(读写分离)实现

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52746393 前面,在博文<MySQL之--MS主从复制(读写分离)实现&g ...

  7. (含PPT)MySQL托管服务架构及读写分离的优化

    关注我们获得更多内容 内容来源:2017 年 08 月 24 日,微软中国首席产品经理宋青见在"ODF 2017开源数据库论坛(北京)"进行<云原生的MySQL托管服务架构及 ...

  8. mysql主从和mycat读写分离的安装及验证

    目录 一.背景介绍 二.安装mysql数据库(主从机器都需要先这样安装) 三.主从机配置 1.主服务器进行如下操作 2.从服务器进行如下操作 四.代理服务器安装和配置mycat读写分离 五.主从复制. ...

  9. MySQL高可用和读写分离

    MySQL 高可用和读写分离 文章目录 MySQL 高可用和读写分离 一.从单机到集群 1.1 单机MySQL数据库到几个问题 1.2 单机MySQL到技术演进 二.MySQL的主从复制 2.1 核心 ...

  10. MySQL 案例实战--MySQL 基于Mycat实现读写分离

    MySQL 基于Mycat实现读写分离 前言 一.什么是读写分离? 二.MySQL 读写分离解决方案 三.MySQL 基于Mycat实现读写分离 四.Mycat-web 管理部署 前言 本环境是基于 ...

最新文章

  1. 计算机视觉的前沿应用,学术报告:计算机视觉应用前沿
  2. 从前端程序员的视角看小程序的稳定性保障
  3. C# 连接SQLServer数据库及登录验证知识
  4. 第六章、epub文件处理 -- 解析container文件与.opf文件
  5. 图像处理理论(八)——Meanshift, Camshift, Optical flow
  6. SAP Cloud for Customer的公有云和私有云部署方式 - Public Cloud vs Private Cloud
  7. java 根据类路径获取类_Java类加载器
  8. Squid服务日志分析
  9. 浏览器和驱动版本对应关系
  10. 帆软finereport决策系统自定义登录界面
  11. pyinstaller 32位 64位的问题
  12. sql怎么实现2个表连接_多表上SQL连接:概述和实现
  13. 白帽子讲web安全笔记
  14. 微信小程序跳转美团饿了么指定商家
  15. PUN ☀️六、机器人基础设置:运动、相机、攻击与生命值
  16. 咻咻验证码,见证百合网发展壮大!
  17. 正则表达式驼峰转中(下)划线
  18. 小写金额转为中文大写
  19. 短信验证码和发送短信按钮没有反应
  20. 移动硬盘USB经常无法安全弹出

热门文章

  1. 1. crontab 简介
  2. 108.PHP输出CSV和EXCEL两种简单的方法
  3. 71. MVC 改进
  4. 【转载】 C#使用Newtonsoft.Json组件来反序列化字符串为对象
  5. CF369E Valera and Queries
  6. java编程思想学习笔记——第2章 一切都是对象
  7. Python+Selenium自动化学习笔记
  8. SaltStack之state.sls
  9. 数据库连接失败could not find driver 解决方法
  10. VUE依赖ol版本问题:geotiff.js Unexpected token