搭建基于MySQL的读写分离工具Amoeba:
Amoeba工具是实现MySQL数据库读写分离的一个工具,前提是基于MySQL主从复制来实现的;

实验环境(虚拟机):
主机 角色
10.10.10.20 多实例加主从复制
10.10.10.30 Amoeba服务器
10.10.10.40 客户端(最后测试使用)

1、首先搭建MySQL的主从复制(不在多提);
需要注意的是:在主从库上需要创建一个用户,在主库上创建的用户为amoeba,权限是create,update,insert,delete;
在从库上创建的用户也是amoeba,权限是select;

2、由于Amoeba是基于java的环境去实现的,所以要先安装jdk插件:(先通过windows主机去下载)
http://pan.baidu.com/share/link?shareid=2793927523&uk=1678158691&fid=117337971851932
下载完成后通过xshell自带的ftp软件传到服务器上,然后进行安装:

[root@localhost tools]# tar xf jdk-7u79-linux-x64.tar.gz
[root@localhost tools]# vim /etc/profile      ##编辑jdk需要的环境变量;
export JAVA_HOME=/root/tools/jdk1.7.0_79
export JRE_HOME=/root/tools/jdk1.7.0_79/jre
export PATH=/root/tools/jdk1.7.0_79/bin:$PATH
export CLASSAPTH=./:/root/tools/jdk1.7.0_79/lib:/root/tools/jdk1.7.0_79/lib
[root@localhost tools]# java -version        ##检测jdk是否安装成功,出现如下信息算安装成功;
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

3、下载并安装Amoeba软件:

[root@localhost tools]# mkdir /usr/local/amoeba       ##创建一个目录用来放amoeba的软件;

https://sourceforge.net/projects/amoeba/       ##windows主机登录网址到网页中部的地方下载 Released /OldFiles/amoeba-mysql-0.19.zip,通过xshell自带FTP工具放到服务器上;

[root@localhost amoeba]# cd /usr/local/amoeba/
[root@localhost amoeba]# unzip amoeba-mysql-0.19.zip [root@localhost amoeba]# ls
LICENSE.txt README.html amoeba-mysql-0.19.zip bin build.xml conf doc lib logs src ##主要用到的目录是conf这个配置目录; [root@localhost conf]# ls
access_list.conf amoeba.dtd amoeba.xml function.dtd functionMap.xml log4j.dtd log4j.xml rule.dtd rule.xml ruleFunctionMap.xml [root@localhost conf]# vim amoeba.xml <?xml version="1.0" encoding="gbk"?> <!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/"> <server>
<!-- proxy server°樵Ķ˿ؠ-->
<property name="port">3306</property> ##配置的是Amoeba的服务端口,这里用3306就可以,默认的是8806; <!-- proxy server°樵ÉP -->
<property name="ipAddress">10.10.10.30</property> ##配置的是Amoeba服务器的IP地址,默认的是127.0.0.1,改为物理网卡上的IP地址; <!-- proxy server net IO Read thread size -->
<property name="readThreadPoolSize">100</property> ##下面的四个数字可以调大一点; <!-- proxy server client process thread size -->
<property name="clientSideThreadPoolSize">100</property> <!-- mysql server data packet process thread size -->
<property name="serverSideThreadPoolSize">200</property> <!-- socket Send and receive BufferSize(unit:K) -->
<property name="netBufferSize">128</property> <!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->
<property name="tcpNoDelay">true</property> <!-- ¶Ս㒩֤µœû§Ļ -->
<property name="user">root</property> ##配置客户端通过Amoeba连接数据库的用户,默认的是root; <property name="password">xyp123123</property> ##配置的是客户端通过Amoeba连接数据库的密码,默认是被注释掉的; </server> <dbServer name="server1"> ##定义mysql池的名字; <!-- PoolableObjectFactoryʵЖ` -->
<factoryConfig>
<className>com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory</className>
<property name="manager">defaultManager</property> <!-- ֦ʵmysql˽¾ݿⷋ¿ؠ-->
<property name="port">3306</property> ##主库的端口号; <!-- ֦ʵmysql˽¾ݿሐ -->
<property name="ipAddress">10.10.10.20</property> ##主库的IP地址;
<property name="schema">xyp</property> ##需要进行操作的库; <!-- ԃԚµȂ½mysqlµœû§Ļ -->
<property name="user">amoeba</property> ##用于Amoeba连接数据库的用户; <!-- ԃԚµȂ½mysqlµŃ݂鞭-> <property name="password">123123</property> ##用于Amoeba连接数据库的密码; </factoryConfig> <!-- ObjectPoolʵЖ` -->
<poolConfig>
<className>com.meidusa.amoeba.net.poolable.PoolableObjectPool</className> ##这里的不用动;
<property name="maxActive">200</property>
<property name="maxIdle">200</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 name="server2"> ##定义从库的池; <!-- PoolableObjectFactoryʵЖ` -->
<factoryConfig>
<className>com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory</className>
<property name="manager">defaultManager</property> <!-- ֦ʵmysql˽¾ݿⷋ¿ؠ-->
<property name="port">3307</property> ##从库端口; <!-- ֦ʵmysql˽¾ݿሐ -->
<property name="ipAddress">10.10.10.20</property> ##从库ip地址;
<property name="schema">xyp</property> ##从库上需要进行操作的库; <!-- ԃԚµȂ½mysqlµœû§Ļ -->
<property name="user">amoeba</property> ##amoeba连接从库的用户; <!-- ԃԚµȂ½mysqlµŃ݂鞭-> <property name="password">123123</property> ##amoeba连接从库的密码; </factoryConfig> <!-- ObjectPoolʵЖ` -->
<poolConfig>
<className>com.meidusa.amoeba.net.poolable.PoolableObjectPool</className> ##下面的不用动;
<property name="maxActive">200</property>
<property name="maxIdle">200</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> <dbServer name="master" virtual="true"> ##定义操作的池,master为主库
<poolConfig>
<className>com.meidusa.amoeba.server.MultipleServerPool</className>
<!-- ¸º՘¾Ⳏ˽ 1=ROUNDROBIN , 2=WEIGHTBASED -->
<property name="loadbalance">1</property> <!-- ²ϓ빃pool¸º՘¾ⶄpoolName±¶ººŷָ잭->
<property name="poolNames">server1</property> ##调用上面主库的池;
</poolConfig>
</dbServer> <dbServer name="slave" virtual="true"> ##定义从库的池,名字为slave;
<poolConfig>
<className>com.meidusa.amoeba.server.MultipleServerPool</className>
<!-- ¸º՘¾Ⳏ˽ 1=ROUNDROBIN , 2=WEIGHTBASED -->
<property name="loadbalance">1</property> <!-- ²ϓ빃pool¸º՘¾ⶄpoolName±¶ººŷָ잭->
<property name="poolNames">server2</property> ##调用上面从库的池;
</poolConfig>
</dbServer> </dbServerList> <queryRouter>
<className>com.meidusa.amoeba.mysql.parser.MysqlQueryRouter</className>
<property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>
<property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>
<property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>
<property name="LRUMapSize">1500</property>
<property name="defaultPool">master</property> ##默认的池的名字; <property name="writePool">master</property> ##写的池的名字;
<property name="readPool">slave</property> ##读的池的名字; <property name="needParse">true</property>
</queryRouter>
[root@localhost conf]# chmod +x -R /usr/local/amoeba/bin/ ##给启动命令amoeba授权;

[root@localhost amoeba]# /usr/local/amoeba/bin/amoeba & ##后台启动;
log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml ##这条信息不是报错,属于正常现象; [root@localhost amoeba]# jobs ##查看后台启动的服务;
[1]- Running ../bin/amoeba & (wd: /usr/local/amoeba/conf)

4、测试:

[root@localhost~]# mysql -uroot -pxyp123123 -h 10.10.10.30     ##通过客户端去连接amoeba服务器来登录到mysql;

mysql> show databases;      ##查看数据库,已经存在需要配置的库xyp;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| xyp |
+--------------------+
5 rows in set (0.02 sec) 去从库上停掉slave,方便测试; mysql> use xyp
Database changed
mysql> create table student(id int(10) not null,name char(20) not null,age int(2) not null); ##在库里面创建一个表; mysql> insert into student values(1,'x',23); ##插入一条信息做测试; mysql> select * from xyp.student; ##先去主库上去查,有数据;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | x | 23 |
+----+------+-----+
1 row in set (0.02 sec) mysql> select * from xyp.student; ##在amoeba上通过select去查结果没东西,因为从库的状态是停掉的
Empty set (0.01 sec) mysql> start slave; ##在从库上把状态打开;
Query OK, 0 rows affected (0.00 sec) mysql> select * from xyp.student; ##在从amoeba上查看,数据已经被同步过来了;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | x | 23 |
+----+------+-----+
1 row in set (0.02 sec)

搭建基于MySQL的读写分离工具Amoeba的更多相关文章

  1. 搭建基于springboot轻量级读写分离开发框架

    何为读写分离 读写分离是指对资源的修改和读取进行分离,能解决很多数据库瓶颈,以及代码混乱难以维护等相关的问题,使系统有更好的扩展性,维护性和可用性. 一般会分三个步骤来实现: 一. 主从数据库搭建 信 ...

  2. Amoeba搞定mysql主从读写分离

    前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...

  3. Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践

    一.为什么要做Mysql的主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...

  4. Mycat搭建负载均衡,读写分离的Mysql集群

    Mycat搭建负载均衡,读写分离的Mysql集群 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.Mycat-server-1.6.7.4-te ...

  5. Amoeba实现mysql主从读写分离

    Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...

  6. MySQL读写分离之amoeba

    MySQL读写分离之amoeba主从复制的搭建环境参考:http://www.cnblogs.com/fansik/p/5270334.htmlamoeba依赖于jdk环境:jdk环境搭建参考:htt ...

  7. MySQL主从复制技术与读写分离技术amoeba应用

    MySQL主从复制技术与读写分离技术amoeba应用 前言:眼下在搭建一个人才站点,估计流量会非常大,须要用到分布式数据库技术,MySQL的主从复制+读写分离技术.读写分离技术有官方的MySQL-pr ...

  8. mysql主从复制-读写分离-原理

    Mysql主从复制和读写分离 在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是不能满足实际需求的.因此,一般通过主从复制 ...

  9. MySQL的读写分离的几种选择

    MySQL的读写分离的几种选择 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 原址如下: http://heylinux.com/archives/1004. ...

随机推荐

  1. 福大软工 · 第十一次作业 - Alpha 事后诸葛亮(团队)

    福大软工·第十一次作业-Alpha事后诸葛亮 组长博客链接 本次作业博客链接 项目Postmortem 模板 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...

  2. Backpack VI

    Given an integer array nums with all positive numbers and no duplicates, find the number of possible ...

  3. linux远程管理常用命令

    目标 关机/重启 shutdown 查看或配置网卡信息 ifconfig ping 远程登录和复制文件 ssh scp 01. 关机/重启 序号 命令 对应英文 作用 01 shutdown 选项 时 ...

  4. Java的课堂实验

    题目是:用Aplet创建一个小程序,使得当你的鼠标经过图片时,放歌~ 其中,补充知识:1.MouseMotionListener这个和MouseListener这两个监听器要了解以下 2.Aplet这 ...

  5. eureka 服务注册与发现

    1.创建父工程来管理依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...

  6. 使用map()的小陷阱:parseInt

    假设我们想要把一个字符串数组的每一项转换成整数,我们很自然就想到了把parseInt作为回调函数传给map()函数,但这样做可能会出现意想不到的结果: var strArr = ["1&qu ...

  7. 基于redis的延迟消息队列设计(转)

    需求背景 用户下订单成功之后隔20分钟给用户发送上门服务通知短信 订单完成一个小时之后通知用户对上门服务进行评价 业务执行失败之后隔10分钟重试一次 类似的场景比较多 简单的处理方式就是使用定时任务 ...

  8. 【转】@RequestBody注解出现的三点错误

    错误1 {     "timestamp": 1529747704259,     "status": 415,     "error": ...

  9. 【转】使用Mybatis时遇到的延迟加载造成返回异常的问题——HttpMessageConversionException: Type definition error

    在使用Mybatis的过程中,使用了resultMap延迟加载. 延迟加载:association联表查询的过程中,查询另外两个表的对象.而延迟加载是指只有在使用这两个对象的时候才会进行查询. 问题的 ...

  10. 微信小程序传值以及获取值方法

    http://www.51xuediannao.com/xiaochengxu/xiaochengxu-chuanzhi.html