第一单元   高性能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. ansible进阶模板和角色使用

    使用场景 Ansible 由于采用ssh远程连接登录管理,虽然不需要额外安装agent,但是速度慢效率低.不适合管理大规模的主机一般最大规模在200-300台,超大规模的主机管理适合使用puppet ...

  2. 数据库---初识sql语句

    初识sql语句 SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,SQL语言由IBM开发.SQL语言分为3种类型: DDL语句     数据库定义语言: 数据库.表.视图.索引.存储 ...

  3. testrem

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  4. [硬件]SICK LMS111激光扫描仪使用

    1.电源接入 电源线5Pin,4芯.棕色线接入正极,蓝色线接入负极(直流电,地线).LMS111-100默认的电压范围是10-30V,推荐使用24V,我这里使用的是12V/3A的锂电池. 另外两根白色 ...

  5. centos mysql安装 完全版

    在linux中安装数据库首选MySQL,Mysql数据库的第一个版本就是发行在Linux系统上,其他选择还可以有postgreSQL,oracle等 在Linux上安装mysql数据库,我们可以去其官 ...

  6. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(九)以g711-mulaw为例添加新的编码格式解析支持

    一.myRtspClient音频解析架构 AudioTypeBase是处理解析各种编码的音频数据的接口类.处理MPA数据的MPEG_Audio类和处理g711-mulaw的PCMU_Audio类均从A ...

  7. 从零开始一起学习SLAM | 为啥需要李群与李代数?

    很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候,都有点蒙蒙哒,感觉突然到了另外一个世界,很多都不自觉的跳过了,但是这里必须强调一点,这部分在后续SLAM的学习中其实是非常重要的基础,不信你 ...

  8. Cocos Code IDE (下载地址)

    Cocos Code IDE 1.2.0 下载地址       Cocos Code IDE 1.2.0 Win32 下载地址: http://www.cocos2d-x.org/filedown/c ...

  9. RSA 加解密 秘钥对说明

    rsa非对称加密, 加解密需要不同的秘钥,称作一对. rsa加解密分两种,第一:公钥加密私钥解密.第二:私钥加密公钥解密. 需要注意的是,公加私解得到的密文是变化的,而私加公解的得到的密文是固定的. ...

  10. CoreWebApi集成Exceptionless

    参考博客 https://www.cnblogs.com/akaxb/p/7207827.html 一. Exceptionlessr的安装部署 依乐祝,<ASP.NET Core免费开源分布式 ...