一、Amoeba简介

Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求,

Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。需要结合使用MySQL的 Replication等机制来实现副本同步等功能

二、Amoeba搭建过程

在搭建amoeba过程中,我们首先需要准备环境,这里我们提供了三台Linux服务器,分别是:

Amoeba for MySQL:centos-node5(主机名)

master:centos-node6

slave:centos-node7

Amoeba 服务器,master 主服务器,slave 从服务器,服务上分别都安装了,Jdk1.7以上版本,相关jdk安装参考

http://blog.csdn.net/liulihui1988/article/details/51985517;

并且已经安装了相关的主从数据库,相关安装参考:

http://blog.csdn.net/liulihui1988/article/details/79066755

  • Linux 命令下载地址:

wget http://nchc.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz

  • Amoeba 安装

命令创建amoeba文件夹,在/usr/local/amoeba目录下 执行下载以上地址

mkdir /usr/local/amoeba

执行以下命令解压在当前文件夹下

# tar xvf amoeba-mysql-binary-2.1.0-RC5.tar.gz 

  • 验证Amoeba是否安装成功的命令在 /usr/local/amoeba/bin/ 目录下执行,
# ./amoeba

如上图,表示安装成功

  • 修改配置文件 dbServer.xml

dbServer.xml 文件在 /usr/local/amoeba/conf/目录下 命令编辑

# vim dbServer.xml

需要修改的 代码部分

 <!-- 数据库连接配置的公共部分 --><dbServer name="abstractServer" abstractive="true"><factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"><property name="manager">${defaultManager}</property><property name="sendBufferSize">64</property><property name="receiveBufferSize">128</property><!-- mysql port 端口号 --><property name="port">3306</property><!-- mysql schema amoeba 访问主从数据库真实库--><property name="schema">test</property><!-- mysql user 主从数据库分配给Amoeba访问数据的用户名 --><property name="user">proxyuser</property><!--  mysql password 主从数据库分配给Amoeba访问数据的密码--><property name="password">123456</property></factoryConfig><poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool"><property name="maxActive">500</property><property name="maxIdle">500</property><property name="minIdle">10</property><property name="minEvictableIdleTimeMillis">600000</property><property name="timeBetweenEvictionRunsMillis">600000</property><property name="testOnBorrow">true</property><property name="testWhileIdle">true</property></poolConfig></dbServer><!-- Master 的独立部分,也就只有 IP 了这里 写了主机名 --><dbServer name="master"  parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">centos-node6</property></factoryConfig></dbServer><!-- Slave 的独立部分,也就只有 IP 了这里 写了主机名 ,如果有多个Slave服务器,可以配置多个dbServer --><dbServer name="slave"  parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">centos-node7</property></factoryConfig></dbServer><!-- 数据库池,虚拟服务器,实现读取的负载均衡,如果有多个Slave,则<property name="poolNames">slave1,slave2</property>用逗号隔开 --><dbServer name="slaves" virtual="true"><poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"><!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--><property name="loadbalance">1</property><!-- Separated by commas,such as: server1,server2,server1 --><property name="poolNames">slave</property></poolConfig></dbServer>
  • 修改amoeba.xml文件,设置读写分离
 <proxy><!-- service class must implements com.meidusa.amoeba.service.Service --><service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager"><!-- Amoeba 端口号 ,客户端client 链接amoeba端口号,不能和主从数据库 冲突--><property name="port">8066</property><!-- bind ipAddress --><!--<property name="ipAddress">127.0.0.1</property>--><property name="manager">${clientConnectioneManager}</property><property name="connectionFactory"><bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory"><property name="sendBufferSize">128</property><property name="receiveBufferSize">64</property></bean></property><property name="authenticator"><bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"><!-- Amoeba 账号 ,客户端client 链接amoeba端 账号--><property name="user">root</property><!-- Amoeba 账号 ,客户端client 链接amoeba端 密码--><property name="password">root</property><property name="filter"><bean class="com.meidusa.amoeba.server.IPAccessController"><property name="ipFile">${amoeba.home}/conf/access_list.conf</property></bean></property></bean></property></service><!-- server class must implements com.meidusa.amoeba.service.Service --><service name="Amoeba Monitor Server" class="com.meidusa.amoeba.monitor.MonitorServer"><!-- port --><!--  default value: random number<property name="port">9066</property>--><!-- bind ipAddress --><property name="ipAddress">127.0.0.1</property><property name="daemon">true</property><property name="manager">${clientConnectioneManager}</property><property name="connectionFactory"><bean class="com.meidusa.amoeba.monitor.net.MonitorClientConnectionFactory"></bean></property></service><runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext"><!-- proxy server net IO Read thread size --><property name="readThreadPoolSize">20</property><!-- proxy server client process thread size --><property name="clientSideThreadPoolSize">30</property><!-- mysql server data packet process thread size --><property name="serverSideThreadPoolSize">30</property><!-- per connection cache prepared statement size  --><property name="statementCacheSize">500</property><!-- query timeout( default: 60 second , TimeUnit:second) --><property name="queryTimeout">60</property></runtime></proxy><!--Each ConnectionManager will start as threadmanager responsible for the Connection IO read , Death Detection--><connectionManagerList><connectionManager name="clientConnectioneManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper"><property name="subManagerClassName">com.meidusa.amoeba.net.ConnectionManager</property><!--default value is avaliable Processors<property name="processors">5</property>--></connectionManager><connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper"><property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property><!--default value is avaliable Processors<property name="processors">5</property>--></connectionManager></connectionManagerList><!-- default using file loader --><dbServerLoader class="com.meidusa.amoeba.context.DBServerConfigFileLoader"><property name="configFile">${amoeba.home}/conf/dbServers.xml</property></dbServerLoader><queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter"><property name="ruleLoader"><bean class="com.meidusa.amoeba.route.TableRuleFileLoader"><property name="ruleFile">${amoeba.home}/conf/rule.xml</property><property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property></bean></property><property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property><property name="LRUMapSize">1500</property><!-- 默认数据库,主数据库 --><property name="defaultPool">master</property><!-- 写数据库 --><property name="writePool">master</property><!-- 读数据库,dbServer.xml 中配置的 虚拟数据库,数据库池 --><property name="readPool">slaves</property><property name="needParse">true</property></queryRouter>

Amoeba 相关配置文件结束;

三 Amoeba 读写分离 测试

  • 启动amoeba服务,命令进入amoeba/bin目录执行
# ./amoeba start 

启动失败了,原因 Amoeba 启动 指定的堆栈大小太小,指定至少228k;解决办法 :

打开bin/amoeba,DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss128k”改成:DEFAULT_OPTS=”-server -Xms512m -Xmx512m -Xmn100m -Xss1204k”

启动成功如下:

测试 读写分离结果,我们在主数据库 写入5条数据,在链接amoeba链接的客户端查看,结果是查询5条数据,管理 slave stop 服务,在从数据库,写入一条数据,再次查询 结果多了一条数据,说明读写分离完成;

相关的参考文档:http://blog.csdn.net/liulihui1988/article/details/51985517;

http://blog.csdn.net/liulihui1988/article/details/79066755

http://www.iteye.com/topic/1113437

Mysql基于Amoeba_读写分离搭架相关推荐

  1. Ubuntu10下MySQL搭建Amoeba_读写分离

    一.背景知识 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离.可路由相关 ...

  2. 50、mysql基于mysql-proxy读写分离实战

    一.主从配置 192.168.130.61 master 192.168.130.62 slave 192.168.130.63 proxy master配置 [mysqld] socket=/tmp ...

  3. 【MySQL】Spring Boot项目基于Sharding-JDBC和MySQL主从复制实现读写分离(8千字详细教程)

    目录 前言 一. 介绍 二. 主从复制 1. 原理 2. 克隆从机 3. 克隆从机大坑 4. 远程登陆 5. 主机配置 6. 从机配置 7. 主机:建立账户并授权 8. 从机:配置需要复制的主机 9. ...

  4. 使用mysql-proxy 快速实现mysql 集群 读写分离

    使用mysql-proxy 快速实现mysql 集群 读写分离 2011-12-29 17:03 目前较为常见的mysql读写分离分为两种: 1. 基于程序代码内部实现:在代码中对select操作分发 ...

  5. MySQL + Atlas 部署读写分离

    原文地址MySQL + Atlas --- 部署读写分离 序章 Atlas是360团队弄出来的一套基于MySQL-Proxy基础之上的代理,修改了MySQL-Proxy的一些BUG,并且优化了很多东西 ...

  6. MySQL主从复制与读写分离配置及实操

    MySQL主从复制与读写分离 一.MySQL主从复制 1.复制类型 2.工作过程 二.MySQL读写分离 1.定义 2.存在意义 3.作用时间 4.原理 5.类型 基于程序代码内部实现 基于中间代理层 ...

  7. 徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离?

    徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离? 完成:第一遍 1.理想的主从架构实现的效果是怎样的? 主库负责所有读写操作,从库只实现对主库备份功能,这样的主从架构性价比是很低的 ...

  8. 如何进行MySQL主从复制与读写分离的配置

    MySQL主从复制与读写分离 什么是读写分离? 为什么要读写分离呢? 什么时候要读写分离? 主从复制与读写分离 mysq支持的复制类型 主从复制的工作过程 MySQL主从复制延迟 MySQL主从复制实 ...

  9. MySQL 集群(三):MySQL + Mycat 实现读写分离,主备切换集群

    MySQL 集群(三):MySQL + Mycat 实现读写分离,主从切换集群 下载 Mycat Mycat 主要文件 端口 Mycat 命令 配置文件 server.xml schema.xml 配 ...

最新文章

  1. Kernel i2c gpio spi pinctrl platform 分析讲解 (未完待续)
  2. Wince 隐藏TASKBAR的方法
  3. 分布式ID生成器(来源:架构师之路,2017-06-25 58沈剑 架构师之路)
  4. xhprof windows下安装和使用(windows版本)
  5. 数据库显示日期时仅仅显示“年-月-日”的问题
  6. android studio怎么回退,如何回滚已经commit的代码(Android Studio)
  7. 如何在java对象里访问Spring中已加载的property内容
  8. 【Windows 10】误删监视器?恢复方法
  9. SQL获取数据表最新一条记录
  10. 单片机毕业设计不用愁!!30篇单片机毕业设计参考案例
  11. 苹果应用商店审核_苹果应用商店AppStore审核规则指南
  12. 常犇_武汉大学管理学院2019年工商管理硕士(MBA)第三批复试通知
  13. 无线产品的‘接收灵敏度’、‘无线协商速率’、‘发射功率’、‘无线干扰’
  14. 扑克牌游戏——C语言
  15. 连接重置Connection reset异常
  16. 【细胞分割】基于阙值+边缘+形态学+种子点图像分割matlab源码含 GUI
  17. 推导:从傅里叶级数展开到傅里叶变换
  18. 「硬见小百科」 常见电子元器件等效电路汇总
  19. 在jsp引入bootstrap
  20. 配置流复制应用(10g+from linux to aix)

热门文章

  1. java和python的SHA-1形式RSA加密方式代码互通
  2. 健康中国 实力引领 奥运冠军林跃亲力宣传“医护人员健身18法”
  3. 计算机一级考试Office2007,计算机一级辅导:Office2007的两个技巧
  4. 在 Visual Basic .NET 中使用存储过程
  5. 微软云计算操作系统Windows Azure 平台——云+端全面攻略
  6. 博客园写博客时如何插入超链接
  7. java计算机毕业设计律师事务管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  8. 【渝粤题库】广东开放大学 跨境电商实务英语 形成性考核
  9. 安卓手机迁移到ios设备(音乐,视频,联系人,短信,图片,备忘录等)
  10. 从Z世代消费需求洞察文旅新业态