Mysql基于Amoeba_读写分离搭架
一、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_读写分离搭架相关推荐
- Ubuntu10下MySQL搭建Amoeba_读写分离
一.背景知识 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离.可路由相关 ...
- 50、mysql基于mysql-proxy读写分离实战
一.主从配置 192.168.130.61 master 192.168.130.62 slave 192.168.130.63 proxy master配置 [mysqld] socket=/tmp ...
- 【MySQL】Spring Boot项目基于Sharding-JDBC和MySQL主从复制实现读写分离(8千字详细教程)
目录 前言 一. 介绍 二. 主从复制 1. 原理 2. 克隆从机 3. 克隆从机大坑 4. 远程登陆 5. 主机配置 6. 从机配置 7. 主机:建立账户并授权 8. 从机:配置需要复制的主机 9. ...
- 使用mysql-proxy 快速实现mysql 集群 读写分离
使用mysql-proxy 快速实现mysql 集群 读写分离 2011-12-29 17:03 目前较为常见的mysql读写分离分为两种: 1. 基于程序代码内部实现:在代码中对select操作分发 ...
- MySQL + Atlas 部署读写分离
原文地址MySQL + Atlas --- 部署读写分离 序章 Atlas是360团队弄出来的一套基于MySQL-Proxy基础之上的代理,修改了MySQL-Proxy的一些BUG,并且优化了很多东西 ...
- MySQL主从复制与读写分离配置及实操
MySQL主从复制与读写分离 一.MySQL主从复制 1.复制类型 2.工作过程 二.MySQL读写分离 1.定义 2.存在意义 3.作用时间 4.原理 5.类型 基于程序代码内部实现 基于中间代理层 ...
- 徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离?
徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离? 完成:第一遍 1.理想的主从架构实现的效果是怎样的? 主库负责所有读写操作,从库只实现对主库备份功能,这样的主从架构性价比是很低的 ...
- 如何进行MySQL主从复制与读写分离的配置
MySQL主从复制与读写分离 什么是读写分离? 为什么要读写分离呢? 什么时候要读写分离? 主从复制与读写分离 mysq支持的复制类型 主从复制的工作过程 MySQL主从复制延迟 MySQL主从复制实 ...
- MySQL 集群(三):MySQL + Mycat 实现读写分离,主备切换集群
MySQL 集群(三):MySQL + Mycat 实现读写分离,主从切换集群 下载 Mycat Mycat 主要文件 端口 Mycat 命令 配置文件 server.xml schema.xml 配 ...
最新文章
- 每秒1w+分布式事务--dtm的Redis存储性能测试分析
- MyCollection 程序 F&Q
- webpack基础概念
- 【MM模块】Cycle Counting 周期盘点
- 顶级程序员的心得–Coders at Work
- springboot热部署失效解决
- 酷客多小程序实现小程序之间跳转功能,让小程序玩出新花样
- 彻底理解MapReduce shuffle过程原理
- 5分钟快速部署PESCMS TEAM 团队任务管理系统开发版
- 云计算学习路线图课件:云计算中的常见的云配置错误
- mysql_fetch_array()/ mysql_fetch_assoc()/ mysql_fetch_row()/ mysql_num_rows等…期望参数1为资源或结果
- AI进入制造业 节省人工成本也能提高产品性能
- 进展-Silverlight5、 windows phone 7、pc 三栖引擎,2D核心已完成
- linux shell编程文本处理命令grep
- java面向对象传播智客,传智播客java培训 java基础之javabean
- 三极管电路限流电阻如何选择
- 基于ricequant神经网络量化交易
- javascript new对象的过程
- 离职原因该怎么回答?
- ROS——在Ubuntu18.04下基于ROS Melodic编译python3的cv_bridge
热门文章
- Redis数据丢失讨论及规避和解决的几点总结
- OGRE 所有版本(从0.1到1.7) (SDK 及 源码 及 扩展库) 下载地址
- 【PS/AI】2021新年祝福海报牛年模板素材
- 天刀服务器的位置2018,天涯明月刀2018新春大促_天涯明月刀2018新春大促活动地址_游戏堡...
- 怎样做好活动的复盘?
- 网络搜索热词排行接口
- 计算机组成原理赖晓铮课后答案,计算机组成原理实验 2.5 运算器 赖晓铮.ppt
- 计算机桌面上为什么出现乱码,Windows8电脑桌面快捷方式出现乱码的解决方法
- 设计模式之工厂模式详解(附应用举例实现)
- 计算机软件摊销会计分录,请问老师:自行研发的无形资产摊销的会计分录怎么做(1)借:管理费? 爱问知识人...