大麦牛奶

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

       首先说一下为什么选择MyCat,mysql分表分库的工具还有sharding-jdbc,是jar包的形式集成到项目的,可以相对灵活的配置自定义分片策略(PS:其实大部分业务场景是分片策略越简单越好啊,不会搞那么复杂也不需要太灵活,要不然扩容很麻烦),从架构上考虑感觉不太灵活,依赖与项目,性能负载都是跟项目走的,因为需要维护大量的数据源,感觉更适合小项目,但是它的有点就是已经收录了apache,应该是更成熟稳定(MyCat亲测是有些小问题的,包括隐藏Bug什么的),不过ShardingSphere也中间件,支持mysql,后面因为项目要求开源框架使用MyCat,所以转到MyCat中来了。

        总结注意事项:1.分片键尽量耦合聚集,多表join需要相关的join表on关联的字段数据集中在一起,比如a left b on a.id=b.aid,那么a表按照a分片,b表按照aid分片,那么相关连的数据总是会落在一个节点上,否则存在跨库join,全表路由单节点匹配不到数据。

        .....

        最开始用1.6.7.4因为习惯性看到这个版本后面是稳定发布版本,1.6.7.5是-test版本,不过还是转移到MyCat1.6.7.5(1.6.7.4发现有问题,1.部分mysql客户端多刷几次会报错,2.select * from a where a.id in (select id from b))这种in子查询会偶发性数据不完整,有时候出来一条数据,有时候是正常的,很恼火,1.6.7.5上面没有这个问题,感兴趣的同学可以自己下载源码编译打包,最新的源码缺少的文件可以参考:

public class StatusFlags {
    public static int SERVER_MORE_RESULTS_EXISTS = 0x0008;
}

         MyCat是中间件,伪装的mysql服务器,因此应用端这边除了复杂的sql改造,其它不需要动,MyCat也相对简单,直接配置好,运行脚本即可,重要的几个配置文件是:schema.xml/rule.xml/server.xml,可以参考官方指南。

schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!--dataNode:没有配置的表则会走默认节点;其它属性参见文档-->
    <schema name="medicaredb" checkSQLschema="true" sqlMaxLimit="100" dataNode="medicare">
        <!--分片表-一致性HASH-->
        <table name="t_person,..." dataNode="medicareDn1$1-32" rule="sharding-person_id-murmur"/>
        <!--全局表-->
        <table name="t_device,..." type="global" dataNode="medicareDn1$1-32,medicare" />
        <!--压力测试分片表-->
        <table name="travelrecord" dataNode="medicareDn1$1-32" rule="sharding-id-murmur"/>
    </schema>
    <dataNode name="medicare" dataHost="aloneDataBase" database="medicare" />
    <dataNode name="medicareDn1$1-32" dataHost="cutDataBaseDn1" database="medicare_$1-32" />
    
    <dataHost name="aloneDataBase" maxCon="100" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.10.122:3306" user="root"
                   password="123456">
        </writeHost>
    </dataHost>
    <!-- maxCon=3250解释一下,数据库设置了最大3300,32个数据库,压力测试每个库100线程压,就需要3200,留下50个给程序或其它调试工具用,要不然压测过程会有抢占 -->
    <dataHost name="cutDataBaseDn1" maxCon="3250" minCon="100" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM2" url="192.168.16.147:3306" user="root"
                   password="123456">
        </writeHost>
    </dataHost>
</mycat:schema>
maxCon的设置是参考了对应的mycat-nettool自带的压力测试工具
posted on 2020-07-03 11:51  大麦牛奶  阅读(625)  评论(0编辑  收藏  举报
码云springboot2.0通用权限系统脚手架 https://gitee.com/shenxingping/XPBoot