一、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. 每秒1w+分布式事务--dtm的Redis存储性能测试分析
  2. MyCollection 程序 F&Q
  3. webpack基础概念
  4. 【MM模块】Cycle Counting 周期盘点
  5. 顶级程序员的心得–Coders at Work
  6. springboot热部署失效解决
  7. 酷客多小程序实现小程序之间跳转功能,让小程序玩出新花样
  8. 彻底理解MapReduce shuffle过程原理
  9. 5分钟快速部署PESCMS TEAM 团队任务管理系统开发版
  10. 云计算学习路线图课件:云计算中的常见的云配置错误
  11. mysql_fetch_array()/ mysql_fetch_assoc()/ mysql_fetch_row()/ mysql_num_rows等…期望参数1为资源或结果
  12. AI进入制造业 节省人工成本也能提高产品性能
  13. 进展-Silverlight5、 windows phone 7、pc 三栖引擎,2D核心已完成
  14. linux shell编程文本处理命令grep
  15. java面向对象传播智客,传智播客java培训 java基础之javabean
  16. 三极管电路限流电阻如何选择
  17. 基于ricequant神经网络量化交易
  18. javascript new对象的过程
  19. 离职原因该怎么回答?
  20. ROS——在Ubuntu18.04下基于ROS Melodic编译python3的cv_bridge

热门文章

  1. Redis数据丢失讨论及规避和解决的几点总结
  2. OGRE 所有版本(从0.1到1.7) (SDK 及 源码 及 扩展库) 下载地址
  3. 【PS/AI】2021新年祝福海报牛年模板素材
  4. 天刀服务器的位置2018,天涯明月刀2018新春大促_天涯明月刀2018新春大促活动地址_游戏堡...
  5. 怎样做好活动的复盘?
  6. 网络搜索热词排行接口
  7. 计算机组成原理赖晓铮课后答案,计算机组成原理实验 2.5 运算器 赖晓铮.ppt
  8. 计算机桌面上为什么出现乱码,Windows8电脑桌面快捷方式出现乱码的解决方法
  9. 设计模式之工厂模式详解(附应用举例实现)
  10. 计算机软件摊销会计分录,请问老师:自行研发的无形资产摊销的会计分录怎么做(1)借:管理费? 爱问知识人...