博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyCat的初步了解
阅读量:6540 次
发布时间:2019-06-24

本文共 5073 字,大约阅读时间需要 16 分钟。

MyCat

1 开源数据库中间件 MyCat

  如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。

  但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如果使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储

1.1 mycat 简介

   cobar是阿里以前的产品,它是基于java开发的,实现了mysql公开的二进制传输协议,巧妙地将自己伪装成一个MySQLServer,对目前市场上的大多数客户端和应用都比较兼容

   MyCat是基于cobar演变而来,对cobar的代码进行了彻底的重构,使用NIO重构了网络模块,并且优化了buffer内核,增强了聚合,join 等基本特性,同时兼容绝大多数的数据库成为了通用的数据库中间件

   MyCat就是一个数据库中间件,支持mysql集群,提供高可用性的数据分片集群

Alt text

MyCat支持的数据库

Alt text

1.2 MyCat的安装

   要求JDK必须是1.7或者更高的

  要求mysql是5.5以上的

1.2.1 安装mysql
  • 将mysql的服务端和客户端安装包上传到服务器

    Alt text

  • 查询是否安装过mysql

    rpm -qa | grep -i mysql

  • 如果有以前的版本就卸掉

    rpm -e --nodeps 版本名称

  • 安装服务器
    rpm -ivh MySQL-server-5.5.49-1.linux2.6.i386.rpm
  • 安装客户端
    rpm -ivh MySQL-client-5.5.49-1.linux2.6.i386.rpm
  • 启动mysql服务
    service mysql start
  • 登录 mysql
    mysql -u root
  • 设置远程登录权限

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;

可以在本地用软件连接一下mysql数据库

# 1.2.2 MyCat的安装及启动

MyCat的官方网站

http://www.mycat.org.cn/
下载地址
https://github.com/MyCATApache/Mycat-download

  • 将 Mycat-server-1.4-release-20151019230038-linux.tar.gz 上传到服务器
  • 将压缩包解压.我的是将MyCat放到/usr/local/mycat
    tar -xzvf Mycat-server-1.4-release-20151019230038-linux.tar.gz
    mv mycat /usr/local
  • 进入到MyCat的目录下的bin目录,启动MyCat

    ./mycat start

  • 停止

    ./mycat stop

   mycat 支持的命令{ console | start | stop | restart | status | dump }

   其中使用console命令的时候如果出错了还能显示错误信息
   MyCat的默认端口号是8066

1.3 MyCat 分片-海量数据的解决方案

1.3.1 分片

   就是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库上面.

   数据切分(sharding)根据其切分规则的类型,可以分为两种切分方式.

  • 一种是按照不同的表来切分到不同的数据库上,这种切分可以称为数据垂直(纵向)切分

    Alt text

  • 一种是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库上面,这种切分称之为数据的水平(横向)切分

    Alt text

1.3.2 分片的相关概念

逻辑库(schema)

  数据中间件可以被看做是一个或者多个数据库集群构成的逻辑库

逻辑表(table)

  分布式数据库中,对应用来说,读写数据的表就是逻辑表。逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成。
  分片表:是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据。 总而言之就是需要进行分片的表。
  非分片表:一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,就是那些不需要进行数据切分的表。

分布节点(dataNode)

  数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode).

节点主机(dataHost)

   数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片数据库,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放在不同的节点主机(dataHost)

分片规则(rule)

   一个大表要想被被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度.

1.3.3 MyCat的分片配置

   schema.xml是MyCat的一个配置文件,主要管理MyCat的逻辑库,逻辑表,分片规则,dataNode,和DataSource.

   schema标签用于定义MyCat事例中的逻辑库
   table标签定义了MyCat中的逻辑表rule用于指定分片规则
  dataNode标签定义了MyCat中的数据节点,也就是数据分片
  dataHost标签定义了具体的数据库实例,读写分离配置和心跳语句

案例:

   按服务器mysql中创建三个数据库 db1,db2,db3
修改schema.xml

select user()

配置server.xml

  server.xml几乎保存了所有MyCat需要的系统配置信息.常在这里配置用户名,密码以及权限.在system中添加utf-8字符集设置,不然那存储中文时会出现问号
<property name="charset">utf8</property>

修改user的设置,这里为PINYOUGOUDB设置了两个用户

test
PINYOUGOUDB
123456
PINYOUGOUDB

Alt text

1.3.4 MyCat分片的测试

进入MyCat,执行下列语句创建一个表

CREATE TABLE tb_test (  id BIGINT(20) NOT NULL,  title VARCHAR(100) NOT NULL ,  PRIMARY KEY (id)) ENGINE=INNODB DEFAULT CHARSET=utf8

创建完你会发现,MyCat会自动把表的名字转换为大写,以后再写表的名字的时候最好把表的名字都写成大写

还有在插入数据的时候一定要把字段列表写出来,不然就会报错

错误代码: 1064
partition table, insert must provide ColumnList

往表里面插入一些数据

INSERT INTO TB_TEST(ID,TITLE) VALUES(1,'goods1');INSERT INTO TB_TEST(ID,TITLE) VALUES(2,'goods2');INSERT INTO TB_TEST(ID,TITLE) VALUES(3,'goods3');

注意,上面的三条数据会在第一个表里面显示,如果想要在db2中显示数据需要用下面的数据

INSERT INTO TB_TEST(ID,TITLE) VALUES(5000001,'goods5000001');
因为我们采用的分片规则是每个节点存储500万条数据,也就是一共能够存储1500万条数据,超过该范围的就会出现错误

1.3.5 MyCat的分片规则

rule.xml用于定义分片规则 ,我们这里讲解两种最常见的分片规则

  • 按逐渐范围分片 rang-long
id
rang-long

tableRule 是定义具体某个表或某一类表的分片规则名称 columns用于定义分片的列 algorithm代表算法名称

rang-long的定义

autopartition-long.txt

Function用于定义算法 mapFile 用于定义算法需要的数据,打开autopartition-long.txt

# range start-end ,data node index# K=1000,M=10000.0-500M=0500M-1000M=11000M-1500M=2
  • 一致性哈希 murmur
    如果需要将数据平均分在几个分区中,可以使用一致性哈希规则

  找到function的name为murmur 的定义,将count属性改为3,因为我要将数据分成3片

0
3
160

在配置文件中可以找到关于边规则的定义

id
murmur

但是这个规则指定的列是id ,如果我们的表主键不是id ,而是order_id ,那么我们应该重新定义一个tableRule:

order_id
murmur

在schema.xml中配置逻辑表时,指定规则为sharding-by-murmur-order

<table name="tb_order" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur-order" />

可以创建一个订单表,并插入数据,测试分片的效果

1.4 数据库的读写分离

  数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置

转载于:https://www.cnblogs.com/zhuguangzhe/p/8010537.html

你可能感兴趣的文章
LeetCode (11): Container With Most Water
查看>>
标准与扩展ACL实验
查看>>
励志决心
查看>>
【技巧】easyUI的datagrid,如何在翻页以后仍能记录被选中的行
查看>>
Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
查看>>
某篇ctr预估ppt的链接
查看>>
在CentOS7中配置网络时常见的LSB加载失败问题
查看>>
Kafka 0.7.2 单机环境搭建
查看>>
经过强制类型转换以后,变量a, b的值分别为( )short a = 128; byte b = (byte) a;
查看>>
Dcloud课程6 php脚本如何在Linux下定时更新数据
查看>>
js进阶 14-7 jquery的ajax部分为什么需要对表单进行序列化
查看>>
ubuntu下msmtp+mutt的安装和配置
查看>>
利用sqoop对mysql执行DML操作
查看>>
hibernate中视图的映射
查看>>
Ionic3 UI组件之 ImageViewer
查看>>
flask框架----flask基础
查看>>
Oracle之RMAN备份及还原
查看>>
蓝桥杯-学校的第一次练习题
查看>>
spring中注解说明
查看>>
hdu 4135 -Co-prime
查看>>