使用amoeba实现mysql读写分离
使用amoeba实现mysql读写分离
1.什么是amoeba?
Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。
优点:
• 降低数据切分带来的复杂多数据库结构
• 提供切分规则并降低 数据切分规则 给应用带来的影响
• 降低db与客户端的连接数
• 读写分离
2.amoeba的部署安装
准备:
主机 | IP地址 |
---|---|
master(主数据库):负责写入操作 | 10.0.0.201 |
slave(从数据库):负责读取操作 | 10.0.0.202 |
amoeba | 10.0.0.41 |
client(客户端) | 10.0.0.31 |
系统:CentOS7
JDK:版本1.5以上,实验用的是jdk1.8
MySQL:版本5.7
Amoeba:amoeba-mysql-3.0.5-RC
(1)安装JDK(amoeba主机)
#下载jdk包
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
#安装jdk并配置环境变量
rpm -ivh jdk-8u131-linux-x64.rpm
#vim /etc/profile
#底部添加:
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export PATH="$JAVA_HOME/bin:$PATH"
source /etc/profile #(使环境变量立即生效)
(2)安装amoeba
#下载软件包
wget https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
#安装
yum install unzip zip -y #已安装请忽略
unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/amoeba #解压软件包到/usr/local下
#配置环境变量
#vim /etc/profile
#底部添加:
export AMOEBA_HOME=/usr/local/amoeba/amoeba-mysql-3.0.5-RC
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile #立即生效
#给amoeba授权mysql远程账户
#实验中使用的是root用户,实际工作中根据需要配置
4.配置文件
(1)conf/dbServers.xml
#设置amoeba要连接mysql数据库的端口,默认3306
<property name="port">3306</property>
#设置缺省的数据库
<property name="schema">test_1</property>
#设置amoeba连接后端数据库服务器的账户密码
<property name="user">root</property>
<property name="password">123456</property>
#设置后端可写的数据库
<dbServer name="writedb" parent="abstractServer">
factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">10.0.0.201</property>
</factoryConfig>
</dbServer>
#设置后端可读的数据库
<dbServer name="slave" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">10.0.0.202</property>
</factoryConfig>
</dbServer>
#定义一个虚拟的dbserver,相当于一个dbserver组,将可读的数据库ip统一放到一个组内
<dbServer name="myslave" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<property name="loadbalance">1</property> #选择调度算法,1表示复制均衡,2表示权重,3表示HA
<property name="poolNames">slave</property> #myslave组成员
</poolConfig>
</dbServer>
(2)conf/amoeba.xml
#设置amoeba监听的端口,默认8066
<property name="port">8066</property>
#配置客户端连接amoeba时的账号,与后端服务器密码无关
<property name="user">root</property>
<property name="password">123456</property>
#设置amoeba默认的池
<property name="defaultPool">writedb</property>
#取消注释,这里用来指定前面定义好的两个读写池
<property name="writePool">writedb</property>
<property name="readPool">myslave</property>
(3)./jvm.properties
#占用内存配置文件,Xss必须大于228才能启动JVM
JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
5.启动amoeba
/bin/launcher
6.测试amoeba(client)
#在客户端登录amoeba
mysql -h10.0.0.41 -uroot -p123456 -P8066
use test_1;
select * from dept;
#在amoeba上插入数据
insert into dept values(2,2);
#在master和slave上分别查看表中的数据
select * from dept;
#将master上的mysql服务停止,继续插入数据会发现插入不成功,但是能够查询
#将master上的msyql服务开启,停止slave上的mysql,发现插入成功,但是不能够查询
作者:ccku
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。