MyCat

一、MyCat

    1.简介

        MyCat是目前最流行的基于Java语言编写的数据库中间件,是要给实现了MySQL协议的服器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以同JDBC协议与大多数主流数据库服务器通信,其核心功能是分库分表,配合数据库的主从模式还可以实现读写分离

        MyCat 是基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和 性能以及众多成熟的使用案例使得 MyCat 变得非常的强大。    

        MyCat 发展到目前的版本,已经不是一个单纯的 MySQL 代理了,它的后端可以支持 MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,也支持 MongoDB 这种新型 NoSQL 方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方 式,在 MyCat 里,都是一个传统的数据库表,支持标准的 SQL 语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度。

        MyCat 官网:http://www.mycat.io/

    2.MyCate的优势

    数据量级

        单一的 MySQL 其数据存储量级和操作量级有限. Mycat 可以管理若干 MySQL 数据库,同时实现数据的存储和操作.

    开源性质

        Mycat 是 java 编写的中间件. 开源,免费. 有非常多的人和组织对 Mycat 实行开发,维护,管理,更新. Mycat 版本提升较快,可以跟随环境发展.如果有问题,可以快速解决. Mycat有开源网站和开源社区.且有官方发布的电子书籍. Mycat 是阿里原应用 corba 转型而来的.

    市场应用

        2015 年左右,Mycat 在互联网应用中占比非常高.

    使用MyCat后的结构图

使用MyCat后的结构图

二、MyCat中的概念

    1.切分:逻辑上的切分,在物理层面,是使用多库【database】,多表【table】实现的切分

    2.纵向切分/垂直切分:就是把原本存储于一个库的数据存储到多个库上

        由于对数据的读写都是对一个库进行操作,所以单库并不能解决大规模并发写入的问题

        例如:我们会建立定义数据库workDB、商品数据库payDB、用户数据库userDB、日期数据库logDB等,分别用户存储项目数据定义表、商品定义表、用户数据表、日志数据表等。

    优点:

        1)减少增量数据写入时的锁对查询的影响;

        2)由于单表数量下降,常见的操作由于减少了需要扫描的记录,使得单表单词查询所需的检索行数变少,减少了磁盘IO,时延变短。

    2.横向切分/水平切分:把原本存储于一个表的数据分块存储到多个表上,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则进行划分,然后存储到多个结构相同的表,和不同的库上。

    例如,我们 userDB 中的 userTable 中数据量很大,那么可以把 userDB 切分为结构相同 的多个 userDB:part0DB、part1DB 等,再将userDB 上的 userTable,切分为很多userTable: userTable0、userTable1等,然后将这些表按照一定的规则存储到多个 userDB 上。

    优点:

        1)单表的并发能力提高了,磁盘 I/O 性能也提高了。

        2)如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面。  缺点:无法实现表连接查询

MyCat中的概念理解

        逻辑库—Schema:MyCat中定义的database是逻辑存在的,在物理上是不存在的,主要是针对纵向切分提供的概念。

        逻辑表—table:MyCat中定义的table是逻辑存在的,在物理上是不存在的,主要是针对横向切分提供的概念。

        数据主机—dataHost:物理MySQL存放的主机地址,可以使用主机名,IP,域名定义。

        数据节点—dataNode:配置物理的database,数据保存的物理节点就是,database

        分片规则:当控制数据的时候,如何访问物理database和table,就是访问dataHost和dataNode的算法

        在MyCat处理具体的数据CRUD的时候,如何访问dataHost和dataNode的算法

        如:哈希算法,crc32算法等。

    常用工具的默认端口:

        MySQL 默认端口是3306

        Mycat 默认端口是8066

        tomcat 默认端口是8080

        Oracle 默认端口是1521

        nginx 默认端口是80

        http 协议默认端口80

        redis 默认端口6379


三、读写分离

    1.读写分离原理:需要搭建主从模式,让主数据库(master)处理事务性增、删、改操作(INSERT、UPDATE、DELETE),而从数据库(slave)处理SELECT查询操作

    主从备份:就是一种主备模式的数据库应用

        主库(Master)数据和从库/备库(Slave)数据完全一致,实现数据的多重备份,保证数据的安全

        可以在Master【InnoDB】和Slave[MyISAM]中使用不同的数据库引擎,实现读写的分离

    主从备份目的:

        1.保证数据安全,尽量避免数据丢失的可能

        2.实现读写分离,使用不同的数据库引擎,实现读写分离,提高所有的操作效率,InnoDB使用DML语法操作,MyISAM使用DQL语法操作

    主从备份模式实现数据同步

        所有对 Master 的操作,都会同步到 Slave 中. 如果 Master 和 Salve 天生上环境不同 , 那么对 Master的操作 , 可能会在Slave中出现错误

    如:

        在创建主从模式之前 ,Master有 database : db1, db2, db3. Slave有database:db1, db2.

        创建主从模式 . 现在的情况Master和 Slave天生不同

        主从模式创建成功后 , 在Master中 drop

        database db3. Slave中抛出数据库 SQL异常. 后续所有的命令不能同步 .

        一旦出现错误 . 只能重新实现主从模式

        主从模式下的逻辑图:

主从模式下的逻辑图

四、创建主从模式

    1.首先准备准备两个虚拟机,配置好基本环境,两个分别安装好mysql数据库,这里的主库使用192.168.199.129环境,从库使用192.168.199.133

    2.Master【主库】配置

        2.1修改/ect/my.cnf文件,配置server_id,和log_bin的值,然后重启mysql

修改/ect/my.cnf文件
修改/ect/my.cnf文件

        2.2访问mysql,执行命令,直接创建从节点用户,然后刷新权限

        grant all privileges on *.* to 'myslave'@'192.168.199.133'identified by 'myslave' with grant option;


命令
执行命令,创建用户

        2.3查看用户,查看Master信息    切换到mysql数据库,查看用户信息


选择数据库

        show master status;查看Master信息

查看Master信息

    3.Slave【从库】配置

        3.1先修改/etc/my.cnf配置文件,添加唯一标识server_id,唯一标识的值要大于Master库的值


修改/etc/my.cnf配置文件
从库修改/etc/my.cnf配置文件

        3.2然后重启mysql服务,配置Slave,首先停止Slave,配置主库信息,再启动Slave

然后重启mysql服务

    配置Slave
        执行命令配置从库信息:change    master    to    master_host=’ip’,master_user=’username’,master_password=’password’,master_log_file=’log_file_name‘;

配置Slave

        3.3可以使用show slave status \G;查看Slave配置

配置Slave

    4.测试主从,注意:主库中的数据库和表以及从库中的数据库和表要相同

测试主从-主
测试主从-从

        然后在主库中添加数据,会自动同步到从库中

在主库中创建表


添加信息

        在从库中查看

从库自动同步

五、安装MyCat

    1.下载MyCat For Linux的tar包

    2.解压并指定位置

解压

    3.启动测试

启动测试

六、MyCat的分片规则以及分库注意事项

    以 500 万为单位,实现分片规则.

        逻辑库 A 对应 dataNode - db1 和 db2. 1-500 万保存在 db1 中, 500 万零 1 到 1000 万保存在 db2 中,1000 万零 1 到 1500 万保存在 db1 中.依次类推

        crc32slot的分片规则:在 CRUD 操作时,根据具体数据的 crc32 算法计算,数据应该保存在哪一个 dataNode 中

    配置分片规则时需要注意:

        1)<columns>id</columns>中推荐配置主键列

        2)所有的 tableRule 只能使用一次。如果需要为多个表配置相同的分片规则,那么需要在此重新定义该规则。

        3)在 crc32Slot 算法中的分片数量一旦给定,MyCat 会将该分片数量和 slor 的取值范围保存到文中。在次修改分片数量时是不会生效的,需要将该文件删除。文件位置位于 conf 目录中的 ruledata 目录中


    使用MyCat分库时需要注意:

        1)使用 MyCat 实现分库时,先在 MyCat 中定义逻辑库与逻辑表,然后在 MyCat 的链接 中执行创建表的命令必须要在 MyCat 中运行。因为 MyCat 在创建表时,会在表中添加一个 新的列,列名为_slot。

        2)使用 MyCat 插入数据时,语句中必须要指定所有的列。即便是一个完全项插入也不 允许省略列名。

    在MyCat中配置分库

配置Schema.xml

    然后在rule.xml中配置

配置rule.xml

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 一、MyCat简介 1.什么是MyCat? MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一...
    开源oo柒阅读 708评论 0 19
  • 一、MyCat简介 1.什么是MyCat MyCat是目前最流行的基于Java语言编写的数据库中间件,是一个实现了...
    青年心路阅读 50,274评论 0 30
  • 什么是 MyCat MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协...
    小破孩_e9ce阅读 254评论 0 0
  • MySQL的安装(rpm格式/需要联网) 安装环境 VMware Linux CentOS-6.5。 上传工具Fi...
    Cehae阅读 12,620评论 0 16
  • 基本配置 1 . 在mycat/conf目录下,MyCat核心配置文件:schema.xml 2 . dataHo...
    iEvans阅读 27,636评论 2 18