数据库读写分离Amoeba
1.理解读写分离的原理
Amoeba(变形虫)项目,该开源框架于2008发布一款Amoeba for mysql软件,该软件致力于mysql的分布式数据库前端代理层,主要的作用是应用服务访问mysql服务器时充当SQL路由功能,并具有负载均衡、高可用性、SQL过滤、读写分离、可路由相关SQL的到目标数据库、可并发请求多台数据库全并结果的作用。通过Amoeba能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多企业的生产线上面使用;其版本可在官网进行下载。其工作原理图如下:
2.掌握读写分离配置过程
配置好主从复制
安装java环境,此处安装是jdk-6u14-linux-x64.bin,因为amoeba推荐使用 jdk1.5或 1.6版本,高版本不建议使用
chmod +x /usr/local/jdk-6u14-linux-x64.bin
/usr/local/jdk-6u14-linux-x64.bin #根据提示按回车建完成即可
mv /usr/local/jdk1.6.0_14 /usr/local/jdk1.6
vi /etc/profile #编辑/etc/profile文件来修改系统环境变量
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile #使环境变量立即生效
java -version
如上图java环境已配置成
3.安装并配置amoeba软件
mkdir /usr/local/amoeba
tar zxf /root/amoeba-mysql-binary-2.1.0-RC5.tar.gz –C /usr/local/amoeba
chmod –R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
4.配置amoeba读写分离
所有的mysql数据库都要开放给amoeba访问,在主和从数据库上执行以下命令,ip地址应该为amoeba的ip地址,如:
grant all on *.* to test@’106.120.190.%’ identified by ‘123.com’;
vim /usr/local/amoeba/conf/amoeba.xml
……
<!-- Amoeba 账号,密码 -->
<property name="user">amoeba</property> //30行
<property name="password">123456</property>
……
<!-- 默认数据库,主数据库 -->
<property name="defaultPool">master</property> //115行
<!-- 写数据库 -->
<property name="writePool">master</property>
<!-- 读数据库,dbServer.xml 中配置的 虚拟数据库,数据库池 -->
<property name="readPool">slaves</property>
<property name="needParse">true</property>
……
vim /usr/local/amoeba/conf/dbServers.xml
……
<!-- mysql port -->
<property name="port">3306</property>
<!-- mysql schema -->
<property name="schema">test</property>
<!-- mysql user -->
<property name="user">test</property>
<!-- mysql password -->
<property name="password">123.com</property>
……
<!-- Master ,Slave1, Slave2 的独立部分,也就只有 IP 了 -->
<dbServer name="master" parent="abstractServer"> //45行
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">106.120.190.233</property> //Master的IP
</factoryConfig>
</dbServer>
<dbServer name="slave1" parent="abstractServer"> <factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">106.120.190.236</property> //Slave1的IP
</factoryConfig> //如果有多台slave,则可再配置
</dbServer>
<dbServer name="slave2" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">106.120.190.228</property> //Slave2的IP
</factoryConfig>
</dbServer>
<!-- 数据库池,虚拟服务器,实现读取的负载均衡 -->
<dbServer name="slaves" 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">slave1</property> //单台slave的配置格式,多台的配置格式为:<property name="poolNames">slave1,slave2</property>
</poolConfig>
</dbServer>
启动amoeba软件
/usr/local/amoeba/bin/amoeba
5.测试ameoba
测试的时候和我们平时使用一样,amoeba-mysql对我们应用透明,就是个mysql的代理
在客户端安装mysql客户端,登录mysql使用如下命令(用户名密码和上面配置要一致)
mysql –u amoeba –p123456 –h amoeba的ip –P 8066
登录上去后,为了测试读和写必须,先把mysql的主从复制停掉,才能更清楚地看出读写的服务器是哪台,在从执行用stop slave;登录到amoeba上,然后执行写和读操作,查看写的是哪台服务器,读的是哪台服务器,实验结果显示:写只在主上进行,读在从上进行,但是可通过配置使得主从都可读,比率是1:1
测试步骤:
1.在客户机上安装mysql
yum –y install mysql
mysql –uroot –p123456 –h amoeba的ip地址 –P 8806
2.在master上建一个测试用库,如db_test,并建测试用表,如wg2:
mysql>create database db_test;
mysql>create table a_test(id int(10),addr varchar(20));
3.在从服务器上:
mysql>stop slave;
4.然后在主服务器上:
mysql>use db_test;
mysql>insert into a_test values(‘1’,’master’);
5.在从服务器上:
mysql> use db_test;
mysql>insert into a_test values(‘2’,‘slave’);
6.在客户端上查询数据:
mysql>select * from db_test.a_test;
7.在客户端上:
insert into db_test.a_test values(‘1’,’mrite’);
在主从上分别查询看结果:
select * from db_test.a_test;
6.了解使用amoeba进行数据切分
根据数据的特点,将不同特性的数据纪录存放到不同的数据库服务器中就是数据切分,可以设置规则匹配数据特性以实现数据切分,其实,数据切分就是根据设置规则将数据分别存放到不同的数据库,以减轻数据库服务器的压力和减小单个数据库的大小,可通过设置amoeba的rule.xml文件中的切片规则实现。原理如图:
数据库读写分离Amoeba的更多相关文章
- Mysql数据库读写分离Amoeba
1.理解读写分离的原理 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应 ...
- MySQL+Amoeba实现数据库读写分离
参考:https://www.cnblogs.com/liuyisai/p/6009379.html 一,Amoeba是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与C ...
- 在应用层通过spring特性解决数据库读写分离
如何配置mysql数据库的主从? 单机配置mysql主从:http://my.oschina.net/god/blog/496 常见的解决数据库读写分离有两种方案 1.应用层 http://neore ...
- Mysql 实现数据库读写分离
Amoeba+Mysql实现数据库读写分离 一.Amoeba 是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明. ...
- Spring aop应用之实现数据库读写分离
Spring加Mybatis实现MySQL数据库主从读写分离 ,实现的原理是配置了多套数据源,相应的sqlsessionfactory,transactionmanager和事务代理各配置了一套,如果 ...
- CYQ.Data V5 数据库读写分离功能介绍
前言 好多年没写关于此框架的新功能的介绍了,这些年一直在默默地更新,从Nuget上的记录就可以看出来: 这几天在看Java的一些东西,除了觉的Java和.NET的相似度实在太高之外,就是Java太原始 ...
- ThinkPHP v3.2.3 数据库读写分离,开启事务时报错:There is no active transaction
如题:ThinkPHP v3.2.3 数据库读写分离,开启事务时报错: ERR: There is no active transaction 刚开始以为是数据表引擎不对造成的,因为 有几张表的引擎是 ...
- EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离~终结~配置的优化和事务里读写的统一
回到目录 本讲是通过DbCommand拦截器来实现读写分离的最后一讲,对之前几篇文章做了一个优化,无论是程序可读性还是实用性上都有一个提升,在配置信息这块,去除了字符串方式的拼接,取而代之的是sect ...
- 161220、使用Spring AOP实现MySQL数据库读写分离案例分析
一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量. 在进行数据库读写分离的时候,我们首先要进行数据库 ...
随机推荐
- nginx代理tomcat后,tomcat获取真实(非proxy,非别名)nginx服务端ip端口的解决方案
nginx代理tomcat后,tomcat获取服务端ip端口的解决方案 1.注意修改nginx配置代理,标红地方 #user nginx; worker_processes ; error_log l ...
- Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
- centos 6.5中安装hadoop2.2
1.配置集群机器之间ssh免密码登录 (1) ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 将id_dsa.pub 公钥 加入授权的key中去 这条命令的功能是把公 ...
- Jenkins SSH timeout
问题如下: Started by user carzone Building -test SSH: Connecting from host [jenkins232] SSH: Connecting ...
- 如何编写高质量CSS
虽然写过很多css代码,但每次动手写都让我痛苦不堪,如何组织好那一堆堆的代码,如何提高代码复用率,甚至如何命名类,这些都让我纠结.下面的浅显的谈一谈在看了<编写高质量代码>中的html和c ...
- eclipse修改主题配色
1.Java-->Editor---> Syntax Coloring修改类中的各种代码颜色 2.General-->Editors --->Text Editors
- 简单的shared_ptr实现
RT,代码参考了STL中shard_ptr的实现,基本原理是引用计数,利用Ref_cnt类来管理内存,在shared_ptr创建时创建,此后shared_ptr仅是在拷贝复制析构的过程中对引用进行修改 ...
- 分布式cookie-session的实现(spring-session)
分布式cookie-session的实现(spring-session) 本文使用的spring-session版本为 1.0.0,地址为: https://github.com/spring-pro ...
- 查找子字符串----KMP算法深入剖析
假设主串:a b a b c a b c a c b a b 子串:a b c a c 1.一般匹配算法 逐个字符的比较,匹配过程如下: 第一趟匹配 a b a b c a b c a c ...
- C# 启动停止SQLServer数据库服务器
C#启动停止SQL数据库服务方法之一: 在命令行里填写命令:net start/stop mssqlserver C#启动停止SQL数据库服务方法之二: 通过C#代码实现: class Program ...