第一单元   高性能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. sap 程序之间的相互调用

    1:首先进入到local object 目录下. 右键>create >function group,创建一个函数组. 右键创建类其它的东西 2:在创建的function group(fu ...

  2. Python list 和 tuple 使用小记

    list和tuple是Python内置的有序集合,一个可变,一个不可变.根据需要来选择使用它们. 1.内置数据类型,列表List >>> appleVersion = ['apple ...

  3. Reported time is too far out of sync with master. Time difference of 52692ms > max allowed of 30000ms

    RegionServer与Master的时间不一致造成的.由错误内容可以看出两台机器之间最大的误差时间为30000ms,一旦超过这个值便无法启动. 解决办法:同步RegionServer与Master ...

  4. MySQL--5子查询与连接小结

    子查询:出现在其他sql语句中的 SELECT,必须出现在小括号内,子查询外层可以是常见的SELECT语句,INSERT语句 UPDATE语句 DELETE语句,在子查询中可以包含多个关键字和条件 ( ...

  5. mysql数据库表设计小数类型

    float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效 ...

  6. 新节点在线加入PXC

    环境 192.168.139.151 新增节点 192.168.139.148-150 集群节点 192.168.139.151 已经安装好PXC软件 计划: 选用192.168.139.150 节点 ...

  7. python入门第二篇

    整体注释:ctrl+? 1.运算符 +  -  *  /   //(取商) **(幂) %(求余) 判断某个东西是否在某个东西里面包含:  in           not in 不等于: <& ...

  8. tp连贯操作

    链接数据库 首先写配置文件 复制concentration.php中的 /* 数据库设置 */ 'DB_TYPE' => '', // 数据库类型 'DB_HOST' => '', // ...

  9. 关于kingoroot这款软件

    弃了饱受诟病的kingroot系列的软件,又出现了一款名为kingoroot的软件. 大约一年之前用过kingoroot的apk版,成功为我的手机root了,而且其行为也并不是那么流氓,所以当时对其很 ...

  10. hdu3374 最大最小表示法 +kmp

    #include <iostream> #include <algorithm> #include <string.h> #include <cstdio&g ...