amoeba读写分离
第一单元 高性能mysql读写分离的实现
5.1 mysql读写分离
5.1.1 mysql读写分离概述
5.1.2 mysql读写分离原理
5.2 mysql读写分离配置
5.2.1 mysql读写分离的服务器配置
5.2.2 mysql读写分离测试
5.2.2 mysql数据切分
【考核要求】
- 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读写分离的更多相关文章
- 基于Amoeba读写分离
Amoeba 原理:amoeba相当于业务员,处理client的读写请求,并将读写请求分开处理.amoeba和master以及slave都有联系,如果是读的请求,amoeba就从slave读取信息反馈 ...
- 001.Amoeba读写分离部署
一 Amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba forMysql软件.这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQ ...
- Amoeba读写分离(MySQL)
实验操作环境: centos服务器 三台机器 role: 192.168.189.129 master-主 192.168.189.130 master-从 192.168.189.131 ...
- Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践
一.为什么要做Mysql的主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...
- 数据库读写分离Amoeba
1.理解读写分离的原理 Amoeba(变形虫)项目,该开源框架于2008发布一款Amoeba for mysql软件,该软件致力于mysql的分布式数据库前端代理层,主要的作用是应用服务访问mysql ...
- Mysql数据库读写分离Amoeba
1.理解读写分离的原理 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应 ...
- Mysql 基于 Amoeba 的 读写分离
首先说明一下amoeba 跟 MySQL proxy在读写分离的使用上面的区别: 在MySQL proxy 6.0版本 上面如果想要读写分离并且 读集群.写集群 机器比较多情况下,用mysql pro ...
- Mysql读写分离方案-Amoeba环境部署记录
Mysql的读写分离可以使用MySQL Proxy,也可以使用Amoeba.Amoeba(变形虫)项目是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项 ...
- 数据库的读写分离(Amoeba)
目录 Amoeba Amoeba读写分离的配置 Amoeba Amoeba(变形虫) 项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件. 这个软件基于Java致力于MyS ...
随机推荐
- 小程序 input 键盘弹出时样式遮盖问题
设置cursor-spacing,具体可参考官方文档,代码如下: <input type='text' bindinput="bindKeyInput" placehold ...
- es7新特性 includes用法
返回数组是否包含某个元素 var array1 = [1, 2, 3]; console.log(array1.includes(2)); // expected output: true
- (转)从拜占庭将军问题谈谈为什么pow是目前最好的共识机制
我们知道基于区块链技术现在有很多的共识机制,包括不限于POW,POS,DPOS,PBFT……,我先不说为什么我最认可POW,我们先来看看著名的拜占庭将军问题: 拜占庭帝国即中世纪的土耳其,拥有巨大的财 ...
- Ext.define细节分析
自己写的其实还是不懂,再看看别人写的吧Extjs4 源码分析系列一 类的创建过程https://www.cnblogs.com/creazyguagua/p/4302864.htmlhttp://ww ...
- [LeetCode] 100. Same Tree_Easy tag: DFS
Given two binary trees, write a function to check if they are the same or not. Two binary trees are ...
- JAVA代码(GET方式)请求URL(HTTP,HTTPS)
/** * * @param url 这个只支持http地址,不支持https * @param request * @return */ public static String sendMessa ...
- unity3d-知识汇总
itween下载 http://www.youkexueyuan.com/exp_show/1147.html 代码修改精灵图片的透明度 UIBp.GetComponent<Image>( ...
- RMAN备份策略与异机恢复一例(续篇)
本文是<RMAN备份策略与异机恢复一例>的续篇,继续实验验证,最终实现两个需求: 1.异机恢复临时测试的小库 2.传输归档时,实现增量传输 1.异机恢复临时测试的小库 之前异机恢复的需求已 ...
- php背景图片上生成二维码,二维码上带logo 代码示例 (原)
依赖库文件 phpqrcode.php (下载地址://www.jb51.net/codes/189897.html :或者在官网下载:http://phpqrcode.sourceforge.net ...
- Hibernate基础增删改查语法
1.创建好Hibernate项目,创建好实体类和测试类,如果不会创建Hibernate项目的同学,点此处:http://www.cnblogs.com/zhaojinyan/p/9336174.htm ...