amoeba简介:
Amodea for mysql 是mysql的前端代理,主要作用是应用层访问mysql 数据库时做请求转发的功能,具有负载均衡,高可用性,query过滤,读写分离,可以将相关的query到目标数据库,可并发请求到多台数据库合并结果。
1.环境准备
3台mysql 数据库服务器:
1台主服务器
2台从服务器
我的配置如下
192.168.213.132(部署amoeba,mysql数据库 master)
192.168.213.131(mysql数据库 slave)
192.168.213.130(mysql数据库slave)
2.数据库的主从复制环境搭建
此次测试主从复制,读写分离,所以首先配置mysql的主从复制
分别在三台创建可以有权限的用户
执行如下语句
grant all privileges
on test
to rw
@'192.168.213.%'
identified by 'rw123456'
3.读写分离
3.1安装 amoeba
下载 amoeba for mysql 二进制文件
http://sourceforge.net/projects/amoeba/files/?source=navbar
本篇环境使用的版本为amoeba-mysql-binary-2.1.0-RC5.tar.gz
amoeba 是java语言开发,运行时需要java环境变量的支持
3.1.1配置jdk 环境
chmod +x jdk-6u45-linux-i586.bin #添加可执行权限
./jdk-6u45-linux-i586.bin #执行安装
cp -r jdk1.6.0_45/ /usr/local/jdk1.6/#将jdk复制到/usr/local 下
将jdk环境变量添加到/root/.bashrc文件中
vi /root/.bashrc
文件末尾添加
export JAVA_HOME=/usr/local/jdk1.6 #jdk的文件目录位置
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=.:$JAVA_HOME/bin:$PATH:$JMETER_HOME/bin
保存 退出
执行 source /root/.bashrc #加载环境变量
输入 java -version 有输出java版本号 即jdk环境配置成功
将
amoeba-mysql-binary-2.1.0-RC5.tar.gz解压至 /usr/local/amoeba 文件夹下
cd /usr/local/amoeb/bin
![]()
amoeba 出现如下界面即可
3.2 配置amoeba
首先说下amoeba 的文件目录
conf:主要配置文件
conf/dbServers.xml:数据库保持通信的配置文件。比如主机ip,端口号,Amoeba使用的用户名和密码。
conf/rule.xml:数据切分规则配置文件。
conf/functionMap.xml:函数库,mysql操作数据库的时候所使用的库函数。
conf/ruleFunctionMap.xml:自定义函数,我们进行数据切分是定义的自定义函数
conf/accescc_list.conf:配置可以访问和拒绝访问的主机ip地址
conf/log4j.xml:用户输入日志级别
bin:命令行目录
lib:运行时所需要的jar文件
benchmark:提供的amoeba性能测试相关文件
benchmark/query.xml:定义数据查询语句
benchmark/context.xml:对应query语句的上下文文件
修改 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 连接数据库-->
<property name="schema">test</property>
<!-- mysql user 用户名-->
<property name="user">rw</property>
<!-- mysql password 密码-->
<property name="password">rw123456</property>
</factoryConfig>
修改dbServer 相关内容 配置数据库的相关ip信息
<dbServer name="master" parent="abstractServer">
<factoryConfig>
<!-- mysql ip 数据库master ip -->
<property name="ipAddress">192.168.213.132</property>
</factoryConfig>
</dbServer>
<dbServer name="slave01" parent="abstractServer">
<factoryConfig>
<!-- mysql ip 服务器 slave ip -->
<property name="ipAddress">192.168.213.130</property>
</factoryConfig>
</dbServer>
<dbServer name="slave02" parent="abstractServer">
<factoryConfig>
<!-- mysql ip 数据库 slave -->
<property name="ipAddress">192.168.213.131</property>
</factoryConfig>
</dbServer>
修改配置 从数据库的 负载均衡
ROUNDOBIN 轮询模式
WEIGHTBASED 权重
<dbServer name="multiPool" 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">slave01,slave02</property>
</poolConfig>
</dbServer>
修改amoeba.xml文件
<service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">
<!-- port 开启的端口号 -->
<property name="port">8066</property>
<!-- bind ipAddress 绑定的ip地址master 所在机器ip 地址 -->
<property name="ipAddress">192.168.213.132</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>
配置 amoeba 登陆数据用户名 密码
<property name="authenticator">
<bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
<property name="user">root</property>
<property name="password"></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>
配置 读写分离 defaultPool 为默认的使用的数据库
master 为dbServer.xml中 dbServer 标签中的值name值
writePool 为写数据的数据库
readPool为读数据的数据库 因为配了两台读的数据库,我们在dbServer.xml 中设置了读数据的负载均衡。所以此处使用我们配置的
multiPool
<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>
<property name="readPool">multiPool</property>
<property name="needParse">true</property>
</queryRouter>
配置访问权限
vi conf/access_list.conf
添加可访问的ip
#配置IP访问控制
#
# 优先级别从上往下,前面的优先级别高,每条一行
#192.*.1.236-239:yes
#比如192.34.1.238则可以访问,否则将不能访问。
#218.85.*.*:no
#127.0.0.1:yes
192.168.213.*:yes
4.测试验证
slave 数据库开启slave 服务
start slave;
开启amoeba 服务
/usr/local/amoeba/bin/amoeba start
出现下面信息即可
使用amoeba 登陆
mysql -u root -p -h192.168.213.183 -P8066
-P 为amoeba的端口号
出现此界面为成功
验证写数据
将两台从服务器 从机服务关闭
stop slave
在amoeba 建数据
先数据表里加数据
分别查看主数据库,从数据库里面的数据
主数据库数据
从数据库数据