在之前我们对MySql已经有了基本的了解,接下来我们就来接触MySql的分库分表,请往下阅读:

分库分表之MyCat实现

分库分表介绍:

随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用。每个应用都有独立的数据库。

数据的切分分为两种:

  • 垂直切分:按照业务模块进行切分,将不同模块的表切分到不同的数据库中。
  • 水平切分将一张大表按照一定的切分规则,按照行切分到不同的表或者不同的库中。

MyCAT介绍

什么是MyCAT?

官方网站:http://www.mycat.org.cn/

简单的说,MyCAT就是:

  一个彻底开源的,面向企业应用开发的“大数据库集群”

  支持事务、ACID、可以替代Mysql的加强版数据库

  一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群

  一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server

  结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

  一个新颖的数据库中间件产品

MyCAT的目标是:低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。

MyCAT的关键特性

支持 SQL 92标准

支持Mysql集群,可以作为Proxy使用

支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL  Server使用

支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群

自动故障切换,高可用性

支持读写分离,支持Mysql双主多从,以及一主多从的模式

支持全局表,数据自动分片到多个节点,用于高效表关联查询

支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询

多平台支持,部署和实施简单

MyCAT架构

核心概念

  • Schema:由它指定逻辑数据库
  • Table:逻辑表
  • DataNode:真正存储节点
  • DataHost:真正的数据库主机

如图所示:MyCAT使用Mysql的通讯协议模拟成了一个Mysql服务器,并建立了完整的Schema(数据库)、Table (数据表)、User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNode(MySQL Instance)上的真实物理库中,这样一来,所有能使用Mysql的客户端以及编程语言都能将MyCAT当成是Mysql Server来使用,不必开发新的客户端协议。

Mycat存在的问题

  • 跨库join问题

    * 通过业务分析,将不同库的join查询拆分成多个select

    * 建立全局表(每个库都有一个相同的表)

    * 冗余字段(不符合数据库三范式)

    * E-R分片(将有关系的记录都存储到一个库中)

    * 最多支持跨两张表跨库的join

  • 分布式事务(弱事务)

    * 强一致性事务(同步)

    * 最终一致性事务(异步思想)

  • 分布式主键

    * redis incr命令

    * 数据库(生成主键)

    * UUID

    * snowflake算法

Mycat解决的问题

  • 海量数据存储
  • 查询优化

Mycat读写分离

MyCat的读写分离是建立在MySQL主从复制基础之上实现的。

数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,

标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置

Mycat读写分离和自动切换机制,需要mysql的主从复制机制配合。

Mycat配置

Mycat 1.4 支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠,配置如下:

<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM" url="192.168.25.134:3306" user="root"
password="root">
<readHost host="hostS" url="192.168.25.166:3306" user="root"
password="root" />
</writeHost>
</dataHost>

(1) 设置 balance="1"与writeType="0"

Balance参数设置:

  1. balance=“0”, 所有读操作都发送到当前可用的writeHost上。

  2. balance=“1”,所有读操作都随机的发送到readHost。

  3. balance=“2”,所有读操作都随机的在writeHost、readhost上分发

WriteType参数设置:

  1. writeType=“0”, 所有写操作都发送到可用的writeHost上。

  2. writeType=“1”,所有写操作都随机的发送到readHost。

  3. writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。

“readHost是从属于writeHost的,即意味着它从那个writeHost获取同步数据,因此,当它所属的writeHost宕机了,

则它也不会再参与到读写分离中来,即“不工作了”,这是因为此时,它的数据已经“不可靠”了。基于这个考虑,目

前mycat 1.3和1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取

数据,则需要在Mycat里配置为两个writeHost并设置banlance=1。”

(2) 设置 switchType="2" 与slaveThreshold="100"

switchType 目前有三种选择:

-1:表示不自动切换

1 :默认值,自动切换

2 :基于MySQL主从同步的状态决定是否切换

“Mycat心跳检查语句配置为 show slave status ,dataHost 上定义两个新属性: switchType="2" 与slaveThreshold="100",

此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制。Mycat心跳机制通过检测 show slave status 中的

"Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三个字段来确定当前主从同步的状态以及

Seconds_Behind_Master主从复制时延。“

MySql快速入门(四)的更多相关文章

  1. MySql基础笔记(一)Mysql快速入门

    Mysql快速入门 一)基本概念 1)表 行被称为记录,是组织数据的单位.列被称为字段,每一列表示记录的一个属性. 2)主键 主键用于唯一的标识表中的每一条记录.可以定义表中的一列或者多列为主键, 但 ...

  2. MySQL 快速入门教程

    转:MySQL快速 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据 ...

  3. MySQL快速入门(二)

    目录 MySQL快速入门(二) 约束条件 自增 自增的特性 主键 外键 级联更新/删除 表与表之间的关系 外键约束 操作表方法 查询关键字 练习数据 select··from where 筛选 gro ...

  4. MySQL 快速入门(一)

    目录 MySQL快速入门 简介 存储数据的演变过程 数据库分类 概念介绍 MySQL安装 MySQL命令初始 环境变量配置 MySQL环境变量配置 修改配置文件 设置新密码 忘记密码的情况 基本sql ...

  5. Mysql快速入门(三)

    MySQL性能优化之查看执行计划explain 介绍: (1).MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发 ...

  6. AndroidStudio快速入门四:打造你的开发工具,settings必备

    http://blog.csdn.net/jf_1994/article/details/50085825 前言:这里是使用AS的基本设置,适合新入手的朋友阅读,将这里介绍的设置完基本使用无忧啦. 1 ...

  7. Mysql快速入门(看完这篇能够满足80%的日常开发)

    这是一篇mysql的学习笔记,整理结合了网上搜索的教程以及自己看的视频教程,看完这篇能够满足80%的日常开发了. 菜鸟教程:https://www.runoob.com/mysql/mysql-tut ...

  8. SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )

    SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...

  9. mysql快速入门

    一.下载并解压 $ wget http://cdn.mysql.com/Downloads/MySQL-5.5/MySQL-5.5.42-1.el6.x86_64.rpm-bundle.tar 解压后 ...

随机推荐

  1. Jedis客户端即redis中的pipeline批量操作

    关注公众号:CoderBuff,回复"redis"获取<Redis5.x入门教程>完整版PDF. <Redis5.x入门教程>目录 第一章 · 准备工作 第 ...

  2. delphi制作res文件

    第一步:将brcc32.exe拷贝到某个目录,如“res文件”第二步:制作rc文件1.在“res文件”中新建一个文本文件resources.rc:2.文本文件中每一行写一个资源,资源格式为:资源标识名 ...

  3. CentOS与Ubuntu的区别

    学习博客:https://www.cnblogs.com/lirongzheng/p/8250511.html 更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc ...

  4. pikachu-服务器端请求伪造SSRF(Server-Side Request Forgery)

    一.SSRF概述(部分内容来自pikachu平台) SSRF(Server-Side Request Forgery:服务器端请求伪造),其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功 ...

  5. 解决React路由URL中hash(#)部分的显示 、browserHistory打包后浏览器刷新页面出现404的问题

    摘要 在React项目中,我们需要采用它的路由库React-Router来进行页面跳转,React会根据路由URL来判断是哪个页面.常见的的URL有两种显示方式,一种是hashHistory的形式,形 ...

  6. 小白的linux笔记5:关于权限那些事

    在设置smb时发现,目录的权限是个影响访问的大问题,还是得研究清楚. 关于文件权限 查看当前目录下文件和文件夹的权限状态:ls -l drwxrwxr--.  4 root root    4096 ...

  7. em和rem区别

    em大小依据父元素的字体大小的倍数 rem大小依据与根元素,即html标签的font-size大小

  8. css基础-css选择器和css文本样式相关

    css基础-css选择器和css文本样式相关: 使用link链入外部样式,页面加载时会同时加载样式 @import url(“*.css”);使用导入式,页面加载完后,才会加载样式 链接伪类的顺序 : ...

  9. Java模拟客户端向服务器上传文件

    先来了解一下客户端与服务器Tcp通信的基本步骤: 服务器端先启动,然后启动客户端向服务器端发送数据. 服务器端收到客户端发送的数据,服务器端会响应应客户端,向客户端发送响应结果. 客户端读取服务器发送 ...

  10. comTest.json文件中内容,被NewsList.vue文件引入

    本文目标:就是把扩散名为.json文件中数据,传递给NewsList.vue文件.主要通过导出,并传递给data(){}变紧 新建文件名为:commTest.json { "schoolNa ...