搭建基于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. 【转载】GET和POST两种基本请求方法的区别

    原文地址:http://www.cnblogs.com/logsharing/p/8448446.html GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一 ...

  2. windows 安装nvm步骤(shi'yongnvm-windows管理node版本):

    瞎几把前言:mac上可以用n来管理node版本,私以为n很好用.家里的win7台式机一直没有安装过任何管理工具,今天来给家里电脑安装一下nvw-windows,一个用于windows系统的node版本 ...

  3. 2. Net、ASP.Net、C#、VisualStudio之间的关系

    .Net一般指的是.NetFramework 是一个开发和运行环境,是框架, 提供了基础的.Net类.这些类可以被任何一种.Net编程语言调用,.NetFramework还提供了CLR,JIT,GC等 ...

  4. Problem B: 类的初体验(II)

    Description 定义一个类Data,只有一个double类型的属性和如下3个方法: 1.   带1个参数的构造函数——初始化属性值为参数值. 2.   double getValue()——获 ...

  5. CSS旋转缩放

    <style type="text/css"> figure{ float: left;}.test1{ border-radius: 0px; height: 200 ...

  6. activity select problem(greedy algorithms)

    many activities will use the same place, every activity ai has its'  start time si and finish time f ...

  7. Windows10 64位安装TensorFlow-GPU

    TensorFlow有GPU版和CPU版. GPU版需要CUDA和cuDNN支持,到链接:https://developer.nvidia.com/cuda-gpus 确认自己的显卡是否支持CUDA. ...

  8. linux (centOS)安装jdk+tomcat+nginx

    一..安装jdk, 下载jdk有两种方式: 1.直接去官网找相应版本下载:http://www.oracle.com/technetwork/java/javase/downloads/index.h ...

  9. html走马灯效果

    实现跑马灯的方法很多,其中最简单的是采用一句Html代码来实现,我们在需要出现跑马灯效果的地方插入“<marquee>滚动的文字</marquee>”语句,它的效果如下所示: ...

  10. mac下pycharm快捷键

    [转载]https://www.cnblogs.com/leolichao/p/9329685.html Mac键盘符号和修饰键说明 ⌘ Command ⇧ Shift ⌥ Option ⌃ Cont ...