美文网首页
Mycat使用笔记

Mycat使用笔记

作者: Captain_tu | 来源:发表于2019-10-17 14:43 被阅读0次
    项目中的表数据量过千万,考虑分库分表,这里是调研mycat的笔记

    安装

    1. 依赖
      • jdk
        安装java环境
      • mysql
        mysql5.6
      • 系统
        centos7
    2. 安装
      • 下载
        官网下载,解压到mycat目录

      • 配置server.xml
        config/server.xml中配置root用户和user用户的密码及数据库schema

      • 配置schema.xml
        config/schema.xml中配置

        <schema name="mycat" checkSQLschema="true" sqlMaxLimit="100">
                  <!-- auto sharding by id (long) -->
                  <table name="user" dataNode="dn1,dn2" primaryKey="id" autoIncrement="true" rule="auto-sharding-long" />
                  <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="lamycat-month-calldate"
                          /> -->
          </schema>
        

        上边这段配置表user分两个node存储,使用的规则是auto-sharding-long,且使用的id自增

        <!-- 分片配置 -->
          <dataNode name="dn1" dataHost="mycat1" database="mycat" />
          <dataNode name="dn2" dataHost="mycat2" database="mycat" />
        
          <!-- 物理数据库配置 -->
          <dataHost name="mycat1" maxCon="1000" minCon="10" balance="0"
                            writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                  <heartbeat>select user()</heartbeat>
                  <!-- can have multi write hosts -->
                  <writeHost host="hostM1" url="172.16.194.132:3306" user="root"
                                     password="abc123">
                  </writeHost>
                  <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
          </dataHost>
          <dataHost name="mycat2" maxCon="1000" minCon="10" balance="0"
                            writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                  <heartbeat>select user()</heartbeat>
                  <!-- can have multi write hosts -->
                  <writeHost host="hostS1" url="172.16.194.1:3306" user="root"
                                     password="abc123">
                  </writeHost>
                  <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
          </dataHost>
        

        这一段配置两个分片的连接信息,每一个分片包含一个dataNode配置和一个dataHost配置,dataHost配置分片的连接信息

      • 配置分片规则

        <tableRule name="auto-sharding-long">
                  <rule>
                          <columns>id</columns>
                          <algorithm>rang-long</algorithm>
                  </rule>
        </tableRule>
        <function name="rang-long"
                  class="io.mycat.route.function.AutoPartitionByLong">
                  <property name="mapFile">autopartition-long.txt</property>
        </function>
        

        config/rule.xml中看到,'auto-sharding-long'根据id分片,使用的算法是'rang-long'
        同样在config/rule.xml中,看到'rang-long'在'autopartition-long.txt'配置规则

        # range start-end ,data node index
        # K=1000,M=10000.
        0-1K=0
        1K-100K=1
        

        上边配置的规则为,id小于等于1000的存入第一个node分片,id大于1000,小于等于100000的,存入第二个node分片(分片在之前的schema.xml中配置)

    启动

    1. 启动
      执行命令bin/mycat即可启动mycat,在log中监控是否成功启动
    2. 问题
      • 内存问题
      # There is insufficient memory for the Java Runtime Environment to continue.
      # Native memory allocation (mmap) failed to map 357892096 bytes for committing reserved memory.
      
      free -h查看发现机器内存不足,清理之后即可成功启动。
      • 插入时报错,无法自增id
        修改server.xml中,取消注释
        <property name="sequnceHandlerType">0</property>
        
        这个配置sequnceHandlerType=0表示,自增的id存储到本地文件中,另外可以配置到数据库(sequnceHandlerType=1)、本地时间戳方式(sequnceHandlerType=2),可以自行查找怎么配置
        sequence_conf.properties中,可以配置当前表自增id从多少开始,最高到多少,以及当前到多少
        USER.MAXID=20000
        USER.CURID=0
        USER.MINID=0
        
    3. mycat启动默认端口号为8066,只需要将项目连接信息,改为连接8066即可

    相关文章

      网友评论

          本文标题:Mycat使用笔记

          本文链接:https://www.haomeiwen.com/subject/qasmmctx.html