MySQL分布式集群之MyCAT(二)schema详解(修正)

        在第一部分,有简单的介绍MyCAT的搭建和配置文件的基本情况,这一篇详细介绍schema的一些具体参数,以及实际作用
        首先贴上自己测试用的schema文件,双引号之前的反斜杠不会消除,姑且当成不存在吧...

点击(此处)折叠或打开

  1. ?xml version=\"1.0\"?>
  2. !DOCTYPE mycat:schema SYSTEM \"schema.dtd\">
  3. mycat:schema xmlns:mycat=\"http://org.opencloudb/\">
  4.     schema name=\"mycat\" checkSQLschema=\"false\" sqlMaxLimit=\"100\">
  5.         !-- auto sharding by id (long) -->
  6.         table name=\"students\" dataNode=\"dn1,dn2,dn3,dn4\" rule=\"rule1\" />
  7.         table name=\"log_test\" dataNode=\"dn1,dn2,dn3,dn4\" rule=\"rule2\" />
  8.         !-- global table is auto cloned to all defined data nodes ,so can join
  9.             with any table whose sharding node is in the same data node -->
  10.         !--table name=\"company\" primaryKey=\"ID\" type=\"global\" dataNode=\"dn1,dn2,dn3\" />
  11.         table name=\"goods\" primaryKey=\"ID\" type=\"global\" dataNode=\"dn1,dn2\" />
  12.             -->
  13.         table name=\"item_test\" primaryKey=\"ID\" type=\"global\" dataNode=\"dn1,dn2,dn3,dn4\" />
  14.         !-- random sharding using mod sharind rule -->
  15.         !-- table name=\"hotnews\" primaryKey=\"ID\" dataNode=\"dn1,dn2,dn3\"
  16.             rule=\"mod-long\" /> -->
  17.             !--
  18.         table name=\"worker\" primaryKey=\"ID\" dataNode=\"jdbc_dn1,jdbc_dn2,jdbc_dn3\" rule=\"mod-long\" />
  19.  -->
  20.         !-- table name=\"employee\" primaryKey=\"ID\" dataNode=\"dn1,dn2\"
  21.             rule=\"sharding-by-intfile\" />
  22.         table name=\"customer\" primaryKey=\"ID\" dataNode=\"dn1,dn2\"
  23.             rule=\"sharding-by-intfile\">
  24.             childTable name=\"orders\" primaryKey=\"ID\" joinKey=\"customer_id\"
  25.                 parentKey=\"id\">
  26.                 childTable name=\"order_items\" joinKey=\"order_id\"
  27.                     parentKey=\"id\" />
  28.             ildTable>
  29.             childTable name=\"customer_addr\" primaryKey=\"ID\" joinKey=\"customer_id\"
  30.                 parentKey=\"id\" /> -->
  31.     /schema>
  32.     !-- dataNode name=\"dn\" dataHost=\"localhost\" database=\"test\" /> -->
  33.     dataNode name=\"dn1\" dataHost=\"localhost\" database=\"test1\" />
  34.     dataNode name=\"dn2\" dataHost=\"localhost\" database=\"test2\" />
  35.     dataNode name=\"dn3\" dataHost=\"localhost\" database=\"test3\" />
  36.     dataNode name=\"dn4\" dataHost=\"localhost\" database=\"test4\" />
  37.     !--
  38.     dataNode name=\"jdbc_dn1\" dataHost=\"jdbchost\" database=\"db1\" />
  39.     dataNode name=\"jdbc_dn2\" dataHost=\"jdbchost\" database=\"db2\" />
  40.     dataNode name=\"jdbc_dn3\" dataHost=\"jdbchost\" database=\"db3\" />
  41.  -->
  42.     dataHost name=\"localhost\" maxCon=\"100\" minCon=\"10\" balance=\"1\"
  43.         writeType=\"1\" dbType=\"mysql\" dbDriver=\"native\">
  44.         heartbeat>select user()beat>
  45.         !-- can have multi write hosts -->
  46.         writeHost host=\"localhost\" url=\"localhost:3306\" user=\"root\" password=\"wangwenan\">
  47.             !-- can have multi read hosts -->
  48.             readHost host=\"hostS1\" url=\"localhost:3307\" user=\"root\" password=\"wangwenan\"/>
  49.         /writeHost>
  50.         writeHost host=\"localhost1\" url=\"localhost:3308\" user=\"root\" password=\"wangwenan\">
  51.             !-- can have multi read hosts -->
  52.             readHost host=\"hostS11\" url=\"localhost:3309\" user=\"root\" password=\"wangwenan\"/>
  53.         /writeHost>
  54.     /dataHost>
  55.         !-- writeHost host=\"hostM2\" url=\"localhost:3316\" user=\"root\" password=\"123456\"/> -->
  56.     !--
  57.         dataHost name=\"jdbchost\" maxCon=\"1000\" minCon=\"1\" balance=\"0\" writeType=\"0\" dbType=\"mongodb\" dbDriver=\"jdbc\">
  58.         heartbeat>select user()beat>
  59.         writeHost host=\"hostM\" url=\"mongodb://192.168.0.99/test\" user=\"admin\" password=\"123456\" >/writeHost>
  60.     /dataHost>    
  61.     -->
  62.      !--
  63.     dataHost name=\"jdbchost\" maxCon=\"1000\" minCon=\"10\" balance=\"0\"
  64.         dbType=\"mysql\" dbDriver=\"jdbc\">
  65.         heartbeat>select user()beat>
  66.         writeHost host=\"hostM1\" url=\"jdbc:mysql://localhost:3306\"
  67.             user=\"root\" password=\"123456\">
  68.         /writeHost>
  69.     /dataHost>
  70.      -->
  71. /mycat:schema>

        第一行参数schema name="mycat" checkSQLschema="false" sqlMaxLimit="100"/>
                在这一行参数里面,schema name定义了可以在MyCAT前端显示的逻辑数据库的名字,
                checkSQLschema这个参数为False的时候,表明MyCAT会自动忽略掉表名前的数据库名,比如说mydatabase1.test1,会被当做test1;
                sqlMaxLimit指定了SQL语句返回的行数限制;
                     

                       
                如截图,这个limit会让MyCAT在分发SQL语句的时候,自动加上一个limit,限制从分库获得的结果的行数,另外,截图右上角可以看到,MyCAT本身也是有缓存的;
                那么,如果我们执行的语句要返回较多的数据行,在不修改这个limit的情况下,MyCAT会怎么做?
                      
                可以从截图看到,MyCAT完全就没搭理前端的实际需求,老老实实返回100条数据,所以如果实际应用里面需要返回大量数据,可能就得手动改逻辑了
                MyCAT的1.4版本里面,用户的Limit参数会覆盖掉默认的MyCAT设置
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                table name="students" dataNode="dn1,dn2,dn3,dn4" rule="rule1" />
                这一行代表在MyCAT前端会显示哪些表名,类似几行都代表一样的意思,这里强调的是表,而MyCAT并不会在配置文件里面定义表结构
                    如果在前端使用show create table table name="item_test" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3,dn4" />
                这一行代表的是全局表,这意味着,item_test这张表会在四个dataNode里面都保存有完整的数据副本,那么查询的时候还会分发到所有的数据库么?
                      
                结果如截图,MyCAT依然是规规矩矩的返回了100条数据(╮(╯_╰)╭),而针对全局表的查询,只会分发到某一个节点上
                配置的primaryKey没发现作用在哪里,姑且忽略吧,以后发现了再补上

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                childtable我在测试中并没有实际用起来不过在MyCAT的设计文档里面有提到,childtable是一种依赖于父表的结构,
                这意味着,childtable的joinkey会按照父表的parentKey的策略一起切分,当父表与子表进行连接,且连接条件是childtable.joinKey=parenttable.parentKey时,不会进行跨库的连接.
                PS:具体测试以后再补

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                dataNode的参数在之前的篇章介绍过,这里直接跳过~

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                dataHost配置的是实际的后端数据库集群,大部分参数简单易懂,这里就不一个个介绍了,只介绍比较重要的两个参数,writeType和balance.
                writeType和balance是用来控制后端集群的读写分离的关键参数,这里我用了双主双从的集群配置
                这里的测试过程比较麻烦,所以直接贴结论:
                        1.balance=0时,读操作都在localhost上(localhost失败时,后端直接失败)
                        2.balance=1时,读操作会随机分散在localhost1和两个readhost上面(localhost失败时,写操作会在localhost1,如果localhost1再失败,则无法进行写操作)
                        3.balance=2时,写操作会在localhost上,读操作会随机分散在localhost1,localhost1和两个readhost上面(同上)
                        4.writeType=0时,写操作会在localhost上,如果localhost失败,会自动切换到localhost1,localhost恢复以后并不会切换回localhost进行写操作
                        5.writeType=1时,写操作会随机分布在localhost和localhost1上,单点失败并不会影响集群的写操作,但是后端的从库会无法从挂掉的主库获取更新,会在读数据的时候出现数据不一致
                                举例:localhost失败了,写操作会在localhost1上面进行,localhost1的主从正常运行,但是localhost的从库无法从localhost获取更新,localhost的从库于其他库出现数据不一致

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                实际上,MyCAT本身的读写分离是基于后端集群的同步来实现的,而MyCAT本身则提供语句的分发功能,当然,那个sqlLimit的限制也使得MyCAT会对前端应用层的逻辑造成一些影响
                由schema到table的配置,则显示出MyCAT本身的逻辑结构里面,就包含了分库分表的这种特性(可以指定不同的表存在于不同的数据库中,而不必分到全部数据库)
                下一章将会介绍server和rule的一些细节

                 下一章的地址:http://blog.itpub.net/29510932/viewspace-1678591/
  

阅读(32514) | 评论(0) | 转发(0) |

1

上一篇:MySQL慢查询处理之mysqldumpslow和mysqlsla

下一篇:MySQL 5.6x开启慢查询日志

相关热门文章

  • MySQL数据库引擎快速指导...
  • linux下phpBB+Oracle解决方案,...
  • IIS下配置 Mantis+PHP+MYSQL环...
  • MySQL中修改密码及访问限制设...
  • linux下 MYSQL 定时备分

给主人留下些什么吧!~~

评论热议

请登录后评论。

登录 注册

盛拓传媒简介 | 关于IT168 | 合作伙伴 | 广告服务 | 使用条款 | 投稿指南 | 诚聘精英 | 联系我们 | 苹果论坛 | 网站导航 | 往日回顾

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员 测绘资质证书(乙测资字11005067) 网络文化经营许可证

感谢所有关心和支持过ITPUB的朋友们

时间: 2024-09-23 12:31:51

MySQL分布式集群之MyCAT(二)schema详解(修正)的相关文章

MySQL分布式集群之MyCAT(三)rule的分析

            首先写在最前面,MyCAT1.4的alpha版本已经发布了,这里面修复了不少的bug,也完善了一细节,之前两篇博客已经做了一些修改 ---------------------------------------------------------------------------------这才是本体~----------------------------------------------------------------------------------   

有生之年系列----MySQL分布式集群之MyCAT调优初探(四)

这是有生之年系列的填坑_(:з」∠)_ 前作第一篇:http://blog.itpub.net/29510932/viewspace-1664499/ 前作第二篇:http://blog.itpub.net/29510932/viewspace-1667814/ 前作第三篇:http://blog.itpub.net/29510932/viewspace-1678591/ MyCAT基准测试:http://blog.itpub.net/29510932/viewspace-1726924/和ht

MySQL分布式集群搭建

1.准备集群搭建环境 使用6台虚拟机来搭建MySQL分布式集群,相应的实验环境与对应的MySQL节点之间的对应关系如下图所示: 管理节点(MGM):这类节点的作用是管理MySQLCluster内的其他节点,如提供配置数据,并停止节点,运行备份等.由于这类节点负责管理其他节点的配置,应该在启动其他节点之前启动这类节点.MGM节点是用命令"ndb_mgmd"启动的: 数据节点(NDB):这类节点用于保存Cluster的数据,数据节点的数目与副本的数目相关,是片段的倍数.例如,对于两个副本,

Hadoop服务器集群HDFS 安装与配置详解

简单的描述一下这些系统: HBase – Key/Value的分布式数据库 Zookeeper – 支撑分布式应用的协作系统 Hive – SQL解析引擎 Flume – 分布式的日志收集系统 一.相关环境说明: s1: hadoop-master namenode,jobtracker; secondarynamenode; datanode,taskTracker s2: hadoop-node-1 datanode,taskTracker; s3: hadoop-node-2 dataNo

GlusterFS集群系统安装与配置方法详解(1/2)

GlusterFS是一个开源的分布式文件系统,于2011年被红帽收购.它具有高扩展性.高性能.高可用性.可横向扩展的弹性特点,无元数据服务器设计使glusterfs没有单点故障隐患,详细介绍请查看官网:www.gluster.org . 部署环境:OS: CentOS release 6.5 (Final) x64 Server: c1:192.168.242.132 c2:192.168.242.133 c3:192.168.242.134 c4:192.168.242.135 hosts:

storm集群部署和配置过程详解

  先整体介绍一下搭建storm集群的步骤: 设置zookeeper集群 安装依赖到所有nimbus和worker节点 下载并解压storm发布版本到所有nimbus和worker节点 配置storm.yaml 启动相关后台进程 1 首先配置zookeeper集群      我们知道storm通过zookeeper来协调整个集群.zookeeper不是用来做消息传递,因此storm不会给zookeeper带来很大的压力.单节点的zookeeper在大多情形下是可以胜任的,但是如果你想得到更好的可

MySQL Cluster集群的初级部署教程_Mysql

Mysql Cluster概述    MySql Cluster最显著的优点就是高可用性,高实时性,高冗余,扩展性强.    它允许在无共享的系统中部署"内存中"数据库的Cluster.通过无共享体系结构,系统能够使用廉价的硬件.此外,由于每个组件有自己的内存和磁盘,所以不存在单点故障.    它由一组计算机构成,每台计算机上均运行者多种进程,包括mysql服务器,NDB cluster的数据节点,管理服务启,以及专门的数据访问程序    所有的这些节点构成一个完整的mysql集群体系

MySQL大型分布式集群

本套课程将通过分布式集群和分库分表两部分内容进行讲解 1.主要解决针对大型网站架构中持久化部分中,大量数据存储以及高并发访问所带来是数据读写问题.分布式是将一个业务拆分为多个子业务,部署在不同的服务器上.集群是同一个业务,部署在多个服务器上. 2.着重对数据切分做了细致丰富的讲解,从数据切分的原理出发,一步一步深入理解数据的切分,通过深入理解各种切分策略来设计和优化我们的系统.这部分中我们还用到了数据库中间件和客户端组件来进行数据的切分,让广大网友能够对数据的切分从理论到实战都会有一个质的飞跃.

亿级Web系统搭建:单机到分布式集群

当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制.在不同的压力阶段,我们会遇到不同的问题,通过搭建不同的服务和架构来解决. Web负载均衡 Web负载均衡(Load Balancing),简单地说就是给我们的服务器集群分配"工作任务",而采用恰当的分配方式,对于保护处于后端的Web服务器来说,非常重要. 负载均衡