第一单元   高性能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. 1.     理解读写分离的原理

Amoeba(变形虫)项目,该开源框架于2008发布一款Amoeba for mysql软件,该软件致力于mysql的分布式数据库前端代理层,主要的作用是应用服务访问mysql服务器时充当SQL路由功能,并具有负载均衡、高可用性、SQL过滤、读写分离、可路由相关SQL的到目标数据库、可并发请求多台数据库全并结果的作用。通过Amoeba能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多企业的生产线上面使用;其版本可在官网进行下载。其工作原理图如下:

  1. 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环境已配置成功

  1. 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

  1. 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

  1. 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;

  1. 6.     了解使用amoeba进行数据切分

根据数据的特点,将不同特性的数据纪录存放到不同的数据库服务器中就是数据切分,可以设置规则匹配数据特性以实现数据切分,其实,数据切分就是根据设置规则将数据分别存放到不同的数据库,以减轻数据库服务器的压力和减小单个数据库的大小,可通过设置amoeba的rule.xml文件中的切片规则实现。原理如图:

amoeba读写分离的更多相关文章

  1. 基于Amoeba读写分离

    Amoeba 原理:amoeba相当于业务员,处理client的读写请求,并将读写请求分开处理.amoeba和master以及slave都有联系,如果是读的请求,amoeba就从slave读取信息反馈 ...

  2. 001.Amoeba读写分离部署

    一 Amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba forMysql软件.这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQ ...

  3. Amoeba读写分离(MySQL)

    实验操作环境: centos服务器  三台机器 role: 192.168.189.129  master-主 192.168.189.130  master-从 192.168.189.131    ...

  4. Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践

    一.为什么要做Mysql的主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...

  5. 数据库读写分离Amoeba

    1.理解读写分离的原理 Amoeba(变形虫)项目,该开源框架于2008发布一款Amoeba for mysql软件,该软件致力于mysql的分布式数据库前端代理层,主要的作用是应用服务访问mysql ...

  6. Mysql数据库读写分离Amoeba

    1.理解读写分离的原理 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应 ...

  7. Mysql 基于 Amoeba 的 读写分离

    首先说明一下amoeba 跟 MySQL proxy在读写分离的使用上面的区别: 在MySQL proxy 6.0版本 上面如果想要读写分离并且 读集群.写集群 机器比较多情况下,用mysql pro ...

  8. Mysql读写分离方案-Amoeba环境部署记录

    Mysql的读写分离可以使用MySQL Proxy,也可以使用Amoeba.Amoeba(变形虫)项目是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项 ...

  9. 数据库的读写分离(Amoeba)

    目录 Amoeba Amoeba读写分离的配置 Amoeba Amoeba(变形虫) 项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件. 这个软件基于Java致力于MyS ...

随机推荐

  1. PS游戏摸拟器ePSXe加速游戏速度方法

    1.启动ePSXe游戏摸拟器. 2.菜单栏上的设置->视频->在视频设置窗口 设置主视频插件->设置. 3.在设置插件的窗口帧速率选择框中 勾上使用帧速率限制 点选帧速率限制为(10 ...

  2. Node.js学习看这里:基础、进阶、文章

    Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用. Node.js采用事件 ...

  3. json.dumps与json.loads实例

    import json data= { 'no' : 1, 'name' : 'Runoob', 'url' : 'http:\\www.runoob.com' } json_str = json.d ...

  4. 海量数据找相同数,高配词,不重复的数,判断一个数是否存在,查询串,不同电话号码的个数,中位数,按照query频度排序,topk

    这类题目,首先需要确定可用内存的大小,然后确定数据的大小,由这两个参数就可以确定hash函数应该怎么设置才能保证每个文件的大小都不超过内存的大小,从而可以保证每个小的文件都能被一次性加载到内存中. 1 ...

  5. Apache和Tomcat的区别?

    主要想了解 web服务器和应用服务器的区别?   严格意义上Web服务器只负责处理HTTP协议,只能发送静态页面的内容. 而JSP,ASP,PHP等动态内容需要通过CGI.FastCGI.ISAPI等 ...

  6. leetcode 108

    二分法建立二叉树,每次把左半部分作为左子树右半部分作为右子树,递归建立BST. #include<bits/stdc++.h> using namespace std; /** * Def ...

  7. Python解决乱码问题

    解决python乱码问题 字符串在python的内部采用unicode的编码方式,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode ...

  8. iOS UI基础-9.1 UITableView 团购

    概述 接下来,我们要做的是团购界面的设计,最张要实现的效果图及项目结构图      团购数据的展示 思路: 系统自带的tableCell不能展示三个文本,不能满足条件,自定义tableCell 每一个 ...

  9. vim自动安装插件Vundle

    https://github.com/VundleVim/Vundle.vim Set up Vundle: git clone https://github.com/VundleVim/Vundle ...

  10. Reveal使用

    本人手机是7.1的,reveal2.0以后不支持8.0以下,没办法,这里只能使用reveal1.6. 这里提醒一下,reveal2.0以后libReavel.lib改名了,. https://reve ...