本文收集整理自:
Amoeba搞定mysql主从读写分离 http://blog.chinaunix.net/uid-20639775-id-154600.html
Amoeba非常好用的mysql集群软件 http://blog.sina.com.cn/s/blog_5f66526e0100xaez.html
centos安装配置JDK http://www.cnblogs.com/zhoulf/archive/2013/02/04/2891608.html
一、Amoeba 是什么
Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。
主要解决:
• 降低 数据切分带来的复杂多数据库结构
• 提供切分规则并降低 数据切分规则 给应用带来的影响
• 降低db 与客户端的连接数
• 读写分离
三、快速架设amoeba,实现mysql主从读写分离
假设amoeba的前提条件:
n Java SE 1.5 或以上 Amoeba 框架是基于JDK1.5开发的,采用了JDK1.5的特性。
n 支持Mysql 协议版本10(mysql 4.1以后的版本)。
n 您的网络环境至少运行有一个mysql 4.1以上的服务
1.首先配置主从库:这里不做介绍,《Amoeba搞定mysql主从读写分离》有介绍。
2.amoeba安装:
首先安装java环境(详细可参考:http://www.cnblogs.com/leezhxing/p/3614262.html)
需要Java SE 1.5 或以上:地址 http://java.sun.com/javase/downloads/index.jsp
我下载的:jdk-8-linux-x64.rpm
rpm -ivh jdk-8-linux-x64.rpm 默认安装到了/usr/java下
查看是否安装成功:java -version 会看到版本信息
配置环境变量:vi /etc/profile
在文件中追加:
JAVA_HOME=/usr/java/jdk1.7.0
JRE_HOME=/usr/java/jdk1.7.0/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
使修改生效:source /etc/profile
查看系统环境状态:
[root@admin ~]# echo $PATH
/usr/local/cmake/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.7.0/bin:/usr/java/jdk1.7.0/jre/bin:/root/bin
接下来就是安装amoeba-mysql
这个地址是amoeba使用指南:http://docs.hexnova.com/amoeba/
这里用 《Amoeba搞定mysql主从读写分离》给的链接下载下来的conf文件好像有修改,可以直接从Amoeba在SourceForge的主页下载Amoeba,http://sourceforge.net/projects/amoeba/files/。
我第一下下载了3.X版本,总是报错。后来下载了2.x.tar.gz的版本,直接解压就OK!
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
解决:
配置文件位于conf目录下,执行文件位于bin目录下,解压后发现bin目录下的启动文件没有可执行权限,请执行:chmod -R +x /usr/local/amoeba/bin/
Amoeba For MySQL 的使用非常简单,所有的配置文件都是标准的XML 文件,总共有四个配置文件。分别为:
◆ amoeba.xml:主配置文件,配置所有数据源以及Amoeba 自身的参数设置;实现主从的话配置这个文件就可以了;
◆ rule.xml:配置所有Query 路由规则的信息;
◆ functionMap.xml:配置用于解析Query 中的函数所对应的Java 实现类;
◆ rullFunctionMap.xml:配置路由规则中需要使用到的特定函数的实现类;
<dbServer name="server2" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.2.13</property>
</factoryConfig>
</dbServer>
有几个从server增加几个,然后在 <dbServer name="multiPool" virtual="true">中添加从的server名<property name="poolNames">server2,server3,server4,server5</property>
配置方式在dbServers.xml注释中有提到:
<!--
Each dbServer needs to be configured into a Pool,
If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:
add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig
such as 'multiPool' dbServer
-->
<!--
一台mysqlServer 需要配置一个pool,
如果多台 平等的mysql需要进行loadBalance,
简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig
例如 'multiPool' dbServer
-->
*******************************************
**********************************************