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. 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文件中的切片规则实现。原理如图:

原文地址:https://www.cnblogs.com/yueminghai/p/6479139.html