mycat

基于代理的数据库分库分表框架 Mycat实践

荒凉一梦 提交于 2020-03-01 05:06:56
文章共 1796字,阅读大约需要 4分钟 ! 概 述 在如今海量数据充斥的互联网环境下,分库分表的意义我想在此处就不用赘述了。而分库分表目前流行的方案最起码有两种: 方案一 :基于 应用层 的分片,即应用层代码直接完成分片逻辑 方案二 :基于 代理层 的分片,即在应用代码和底层数据库中间添加一层代理层,而分片的路由规则则由代理层来进行处理 而本文即将要实验的 MyCAT框架就属于第二种方案的代表作品。 注: 本文首发于 My Personal Blog:CodeSheep·程序羊 ,欢迎光临 小站 环境规划 在本文中,我拿出了三台 Linux主机投入试验,各节点的角色分配如下表所示: 节点 部署组件 角色 192.168.199.75 MySQL 、 MyCAT master 192.168.199.74 MySQL slave 192.168.199.76 MySQL standby master 如果说上面这张表不足以说明实验模型,那接下来再给一张图好了,如下所示: 我想这样看来的话,各个节点布了哪些组件,节点间的角色关系应该一目了然了吧 实验环境规划好了以后,接下来进行具体的部署与实验过程,首先当然是 MyCAT代理的部署 MyCAT 部署 关于该部分,网上教程实在太多了,但最好还是参考官方文档来吧,下面也简述一下部署过程 下载 MyCAT并解压安装 这里安装的是 MyCAT

MyCat(1.2)Mycat的安装

流过昼夜 提交于 2020-02-29 15:01:08
【0】基本环境   OS:CentOS7.5   Software envireonment:JDK1.7.0   Master Software:Mycat1.6.5   Linux Client:CRT 8.0 【1】基本安装流程   (1)安装JAVA环境   (2)Mycat软件   (3)linux系统下独立建立 Mycat用户   (4)解压Mycat   (5)配置环境变量   (6)启动Mycat 【2】具体步骤 【2.1】安装JAVA JDK1.7以上   yum install java-1.7 # 参考yum源配置 【2.2】下载获取 MyCat1.6.5   下载地址: http://dl.mycat.io/1.6.5/   官网地址: http://mycat.io/   传输(利用CRT下载好后传输到Linux机器),这里我传说到了我自建的 /soft 目录 【2.3】Mycat的安装(解压、建用户、授权、配置环境变量) #解压Mycatcd /soft tar -zxf Mycat-server-1.6.5-release-20180122220033-linux.tar.gzmv ./mycat/ /usr/local/ #把文件目录迁移到 /usr/local/ 下#建立用户adduser mycat#授权chown -R mycat:mycat

安装mycat

霸气de小男生 提交于 2020-02-29 15:00:10
1、下载mycat 为了方便,我已经下载下来。我选择的版本是1.6版本 2、解压,安装在/home/xm6f/dev目录下 cd /home/xm6f/devtar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 为了以后更好看目录结构,下tree(可选) yum -y install tree tree /home/xm6f/dev/mycat #查看mycat目录结构 3、创建用户并修改配置文件 a、为了更好的进入mycat,设置MYCAT_HOME的变量:vim /etc/profile 修改增加下列内容: export JAVA_HOME=/home/xm6f/dev/jdk1.7.0_80 export JRE_HOME=/home/xm6f/dev/jdk1.7.0_80/jre export MYCAT_HOME=/home/xm6f/dev/mycat export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MYCAT_HOME/bin 使得变量生效:source /etc/profile ###服务器名和IP绑定 vim /etc/hosts 192.168.1.105 mycat-server127.0.0.1 mycat-server ###设置

数据库水平切分(Mycat分片路由原理和全局序列号)

我与影子孤独终老i 提交于 2020-02-28 15:55:43
分片路由原理 Select * from travelrecord where id in(5000001, 10000001); dn1,dn2,dn3, id=5000001这条数据在dn2上,id=10000001这条数据在dn3上。 全部扫描一遍dn1 dn2 dn3,结果导致性能浪费。 扫描某个片。漏掉数据的情况。 总结:不能多扫===》性能不足,也不能少===》漏掉数据。 Mycat使用DruidParser作为分析器。 Visitor/Statement Visitor过程,解析如下属性: 哪一张表 字段列表 条件信息 什么样的SQL Statement过程 改写SQL: Dn2, id= 5000001 Dn3, id= 100000001 Select * from travelrecord where id = 5000001;(dn2执行) Select * from travelrecord where id = 10000001;(dn3执行) 查看mycal参数信息 9066端口连接后 show @@sysparam\G; 可以看到 sequnceHandlerType全局序列号类型 mysql> show @@sysparam\G; *************************** 1. row *************************

分库分表 Sharding-JDBC 介绍和实战

你。 提交于 2020-02-28 06:01:50
1 介绍 Sharding-JDBC是开源的数据库中间件。Sharding-JDBC定位为轻量级数据库驱动,由客户端直连数据库,以jar包形式提供服务,没有使用中间层,无须额外部署,无须其他依赖。Sharding-JDBC可以实现旧代码迁移零成本的目标。Sharding-JDBC与MyCat不同,MyCat本质上是一种数据库代理。 2 实战SQL 2.1 有2个库 库名 表名 shop_0 shop_info_0、shop_info_1 shop_1 shop_info_0、shop_info_1 2.2 表结构SQL DROP DATABASE IF EXISTS `shop_0`; CREATE DATABASE `shop_0`; USE `shop_0`; CREATE TABLE `shop_info_0` ( `shop_id` bigint(80) NOT NULL, `shop_name` varchar(45) DEFAULT NULL, `account` varchar(45) NOT NULL, PRIMARY KEY (`shop_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `shop_info_1` ( `shop_id` bigint(80) NOT NULL, `shop_name`

数据库中间件分片算法之hash

寵の児 提交于 2020-02-27 17:05:24
前言 夜深人静的时候,打开云音乐,点上一曲攀登,带上真无线蓝牙耳机,瞬间燃到爆,键盘打字如飞倦意全无。 分片规则 这几天有人问我,dble和MyCat到底有什么不同。其实dble作为MyCAT的同门,吸收了MyCat的精华,同时也相应的做了一些减法。只支持MySQL显得更加的纯粹。所以选择对比学习两者我觉得挺好。 前面我们学习了schema.xml文件的配置,我们能独立的把逻辑库和逻辑表搭建起来,让数据表跟随我们的定义规则(取模)进行分布。今天我们介绍具体的分片算法。dble相对于mycat来说,是做了一些减法的。比如一致hash算法就没有,而是使用了jumpstringhash代替了一致性hash。具体原因可以参考文章dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因 hash分区算法 stringhash分区算法 enum分区算法 numberrange分区算法 patternrange分区算法 date分区算法 jumpstringhash算法 HASH分区算法 Hash分区算法是一种比较典型而且常用的算法。要使用HASH分区算法需要在rule.xml中定义两个部分。 分区规则定义 如下所示,使用tableRule标签定义,name对应的是规则的名字,而rule标签中的columns则对应的分片字段,这个字段必须和表中的字段一致

[Mycat]

情到浓时终转凉″ 提交于 2020-02-27 11:14:28
概念:数据库中间件 mycat也可以理解为是数据库代理。 mycat的三大功能:分表、读写分离、主从切换 sharing-jdbc也是很流行的中间件 中间件,左边连接一个,右边连接一个,左边连接应用,右边连接数据库,好处什么?便于各个部件之间的沟通 例子:Tomcat 也是一个中间件,连接客户端和服务端 推理:mycat中间件就是连接java应用和数据库的桥梁 为什么要用mycat? 1.java应用和mysql数据库紧耦合 2.高访问量,高并发对数据库的压力 3.读写请求数据不一致 数据库失去连接怎么办? 预备一个上线的备机,主备切换(但是随之而来的问题,你切换备机,java应用连接数据库的配置需要改变,这里紧耦合) 高访问量,高并发怎么办? 多弄几个数据库一块抗,那么久需要配置多个数据源, mycat的作用:你java应用不用再管数据库的配置了,交给mycat,java应用只需要访问mycat即可,mycat后面有几个数据库,都不需要你java应用管了,思想和微服务很像 java应用只需要把sql语句传给mycat即可,不管你是select还是update ,mycat会发送给对应的数据库,java程序跟数据库做到了解耦合, 读写分离 写数据库的表更新,读数据库的数据也跟着更新看,主从复制 为了抵御风险,备出一份读写数据库,双主双从 先来搭建一个单写单读的数据库

面试官:"谈谈分库分表吧?"

↘锁芯ラ 提交于 2020-02-27 04:34:04
转自:学习Java的小姐姐 www.cnblogs.com/chenchen0618/p/11624480.html 1.什么是分库分表 从字面上简单理解,就是将原本存储在一个库的数据分块存储在多个库上,将原本存储在一个表的数据分块存储在多个表里面。 数据的切分根据其切分规则的类型,可以分为如下两种切分模式。 垂直(纵向)切分 :把单一的表拆分成多个表,并分散到不同的数据库(主机)上。 比如一个订单表里面有用户信息,商品信息,收货地址信息,促销信息,这样表的字段太多,显得特别臃肿,所以我们将他们各自分隔出来,形成多张表存储数据。 优点: 拆分后业务清晰,拆分规则明确。 系统之间进行整合或扩展很容易。 按照成本、应用的等级、应用的类型等将表放到不同的机器上,便于管理。 数据维护简单。 缺点: 业务表多样,SQL语句复杂。 水平(横向)切分 :根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上。与垂直切分对比,水平切分不是将表进行分类,而是将其按照某个字段的某种规则分散到多个库中,在每个表中包含一部分数据,所有表加起来就是全量的数据。 比如有一个用户表,单张表的记录条数达到1亿条,这样在进行查询,插入,更新操作的时候,速度将非常慢,那我们可以将这些数据分配到100个表里面,每个表的数据量就下来了,导致单表的容量不会太大,从而保证了单表的查询等处理能力。

分库分表 Mycat

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-27 03:52:59
Mycat是一个开源的、面向企业应用开发的数据库中间件产品,在企业开发中常常使用Mycat作为分库分表的组件, 本质上是一种数据库代理 。 可以在Mycat的官网 http://www.mycat.io/ 下载合适的Mycat版本。 Mycat分库分表 随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、IO、系统开销,甚至性能上的瓶颈。当数据库单表达到千万级别后,SQL性能会开始下降,如果不进行优化,SQL性能会继续下降。 一台服务的资源终究是有限的,因此需要对数据库和表进行拆分,从而更好地提供数据服务,提升SQL性能。 1 分库 分库的含义是根据业务需要,将原库拆分成多个库,通过降低单库大小来提高单库的性能。常见的分库方式有两种——垂直分库和水平分库,分库架构如图17-1所示。 1.1 垂直分库 垂直分库根据业务进行划分, 将同一类业务相关的数据表划分在同一个库中 。如将原库中有关商品的数据表划分为一个数据库,将原库中有关订单相关的数据表划分为一个数据库。 1.2 水平分库 水平分库是按照一定的规则对数据库进行划分的。 每个数据库中各个表结构相同 ,数据存储在不同的数据库中,如根据年份划分不同的数据库。 2 分表 分表的含义是根据业务需要,将大表拆分成多个子表,通过降低单表的大小来提高单表的性能。常见的分表方式有两种—

技术分享 | Jump Consistent Hash 原理解析(上篇)

≯℡__Kan透↙ 提交于 2020-02-27 01:02:21
作者:傅文辉 之前爱可生开源社区公众号发表了 dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因解析 , 阐述了跳跃法相对环割法的性能优势。很多读者表示对其中"跳跃法的原理"不是很理解,本文就来详细阐述一下。 一致性哈希 首先,我们的需求是,将数据(key-value pair)分布在多个节点上。这点可以简单的用取模实现, 节点 key 1 1 4 7 10 2 2 5 8 11 3 3 6 9 12 然而,当增加新节点时,数据将发生大规模转移: 节点 key 1 (1) 5 9 2 (2) 6 10 3 (3) 7 11 4 4 8 12 一致性哈希的主要目的是,在节点数量发生变更时,只需要在节点间移动少量数据,而不是"全部洗牌"。 除了经典的环割法一致性哈希外,Google 发表了另一种实现简洁且高效的跳跃法一致性哈希《A Fast, Minimal Memory, Consistent Hash Algorithm》(文末附链接) 在爱可生开源数据库中间件 dble 中,关于 jump consistent hash 的配置方法详见 dble 官方手册中"跳增字符串算法"的部分(文末附链接)。 基础实现 与原始论文不同, 本文节点(又称 bucket)从 1 开始编号,而非从 0 开始。 先考虑只有一个节点的情况