用amoeba实现Mysql读写分离
Amoeba 是什么:
Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。
主要解决:
• 降低 数据切分带来的复杂多数据库结构
• 提供切分规则并降低 数据切分规则 给应用带来的影响
• 降低db 与客户端的连接数
• 读写分离
这里我们主要利用amoeba实现数据库的读写分离功能
实验环境:rhel 6.5 mysql 5.7
Master mysql 172.25.64.1
Slave mysql 172.25.64.2
Amoeba 172.25.64.3
准备条件:首先我们要实现mysql的主动复制,然后因为amoeba框架是居于jdk开发的,所以我们需要安装jdk环境。
1.实现数据库的主从复制,因为上次我们实现了数据库的主从复制,所以这次我们直接在上次的基础上面去做就行
2.dk的安装
在amoeba主机上面:
安装jdk
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/ ##解压到/usr/local目录下面
cd /usr/local/
ln -s jdk1.7.0_79/ java ##为了方便,做一个软连接
Vim /etc/profile ##系统路径设置
79 export JAVA_HOME=/usr/local/java
80 export CLASSPATH=.:JAVA_HOME/lib:JAVA_HOME/jre/lib
81 export PATH=PATH:JAVA_HOME/bin
source /etc/profile ##加载路径
java -version ##查看是否安装成功
3.安装amoeba中间件。
unzip amoeba-mysql-3.0.5-RC-distribution.zip
cd amoeba-mysql-3.0.5-RC
4.配置amoeba
Amoeba的配置文件在本环境下位于/usr/local/amoeba/conf目录下。配置文件比较多,但是仅仅使用读写分离功能,只需配置两个文件即可,分别是dbServers.xml和amoeba.xml
cd conf/ ##配置文件存放位置
vim dbServers.xml
1 <?xml version="1.0" encoding="gbk"?>
2
3 <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
4 <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">
5
6 <!--
7 Each dbServer needs to be configured into a Pool,
8 If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:
9 add attribute with name virtual = "true" in dbServe r, but the configuration does not allow the element with name factoryConfig
10 such as 'multiPool' dbServer
11 -->
12
13 <dbServer name="abstractServer" abstractive="true">
14 <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServ erConnectionFactory">
15 <property name="connectionManager">${defaultManager} </property>
16 <property name="sendBufferSize">64</property>
17 <property name="receiveBufferSize">128</property>
18
19 <!-- mysql port -->
20 <property name="port">3306</property> ##设置amoeba要连接数据库的端口,默认是3306
21
22 <!-- mysql schema -->
23 <property name="schema">testdb</property> ###设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式,不支持 use dbname指定缺省库,因为操作会调度到各个后端dbserver
24
25 <!-- mysql user -->
26 <property name="user">test1</property> ###设置amoeba连接后端数据库服务器的账号和密码,因此需要在所有后端数据库上创建该用户,并授权amoeba服务器可连接
27
28 <property name="password">YIYI+bushe24</property> ##amoeba连接后端数据库服务器的密码,因为5.7对数据库的密码的健壮性有要求,所以我们设置密码的时候需要考虑密码的健壮性。
29 </factoryConfig>
30
31 <poolConfig class="com.meidusa.toolkit.common.poolable.Poola bleObj