zoukankan      html  css  js  c++  java
  • mycat的安装及配置文件应用

    table:逻辑一 mycat的安装

     1 基于jdk运行

     2 获取安装包

     3 解压

      tar -xf Mycat***.tar.gz

     4 测试运行

      mycat的根目录中bin保存了mycat的核心命令文件

      mycat console 命令测试运行

    配置文件

      根目录在conf中有两个核心配置文件,配置内容可以实现:读写分离,高可用替换,分布式存储,ER分片表的逻辑

      server.xml:配置当前mycat启动的资源的设定(例如端口占用,线程登录名,密码等等)

      schema.xml:逻辑库,逻辑表,分片表,ER表的配置,底层连接实际数据库的信息.

    server.xml中两个重要标签

      system:配置mycat启动时占用的系统的一些资源属性

      user标签:指定当前登录的用户的信息

        属性:name 表示当前登录的mycat的用户名

          password:表示当期登录的密码

          schemas:表示当前这个用户可以查看的这个逻辑库,以","分割,这里的名称必须和schema.xml中的标签名称对应

          readOnly:表示当前用户只读,不能写操作

          quarantine:安全措施 可以设置黑名单 白名单  

            字标签:whitehost:白名单列表  blacklist:黑名单列表

        <user name="root">
            <property name="password">root</property>
            <property name="schemas">mytest</property>
       </user>

    schema.xml:当前mycat代理数据库集群的设定

      可以通过这个配置文件来实现逻辑库,分片表,非分片表,ER表,读写分离,高可用替换

      标签结构
      schema:逻辑库
          table:逻辑表
              childetable:逻辑表的从逻辑表
      datanode:数据分片节点的配置,一个数据分片node对应的数据库结构可能很简单,也可能很复杂;指向一个dataHost
      datahost:
          heartbeat:心跳检测,语句不一样,替换逻辑可能不同
          writeHost:写操作的数据库节点(也可以读)
      readHost:与当前writeHost相关的(主从)读节点(只读)

    每个标签的属性

      schema中

          name:逻辑库的名字  

          checkSQLschema:例如sql语句“select * from tb_item”,mycat拦截,将其表格名称根据当前属性的设  定进行修改,false不会自动检查      逻辑库名称,不拼接逻辑库名字“select * from tb_item”,可能会导致无    法找到逻辑库执行后续逻辑,true自动检测,会拼接逻辑库名      字“select * from TESTDB.tb_item”

          sqlMaxLimit:一种查询的保护措施,执行查询语句时,自动配置的分页数据,只查前100条,在没有limit条件时

      

       table:逻辑表

        name:逻辑表名称,配置和真实数据库的表名最好相同
        dataNode:对应一个,多个数据库节点的标签,多个值表示分片,单个值表示非分片
        rule:数据分片的计算规则,auto-sharding-long,利用long整型的id值进行范围划分(0-500万     (index0),500万-1000万(index1),1000万    -1500万(index2))
        primaryKey:指向表格的主键,最好与真实字段一致
        type:表格类型,默认不是global

       childTable:从表
          <childTable name="orders" primaryKey="ID" joinKey="order_id"  parentKey="id">
          name:从表名称,保持和数据库真实表格一致
          primaryKey:主键名称
          jointKey:从表中的外键字段;必须和真实数据库的从表外键字段名一致
          parentKey:主表的字段名,必须和主表与从表的外键相关,对应主表的字段名称

       datanode标签:数据节点
          <dataNode name="dn1" dataHost="localhost1" database="db1" />
          name:表示名称,逻辑库,逻辑表指向的依据
          dataHost: 指向真实管理数据库的标签名称dataHost
          database: 真实数据库名称,逻辑库和所有真实数据库名称一致

       datahost:管理数据分片的真实数据库的标签,内部包含真实数据库的信息

          <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native"    switchType="1"  slaveThreshold="100">
          name:名称,与datanode指向对应
          maxCon:底层数据库的链接最大数
          minCon:相反

          balance:值是0,1,2,3,分别表示对当前datahost中维护的数据库们的读操作逻辑
                0:不开启读写分离,所有的读写操作都在最小的索引号的writeHost(第一个writeHost标签)
                1:全部的readHost和备用writeHost都参与读数据的平衡,如果读的请求过多,负责写的第一个writeHost也分担一部分
                2 :所有的读操作,都随机的在所有的writeHost和readHost中进行
             3 :所有的读操作,都到writeHost对应的readHost上进行(备用writeHost不参加了),在集群中没有配置ReadHost的情况下,读都到第一个writeHost完成

          writeType:控制当前datahost维护的数据库集群的写操作
              0:所有的写操作都在第一个writeHost标签的数据库进行
              1:所有的写操作,都随机分配到所有的writeHost(mycat1.5完全不建议配置了)
            dbtype:数据库类型(不同数据库配置不同名称,mysql)
            dbDriver:数据库驱动,native,动态获取

          switchType:切换的逻辑
             0:故障不切换
               1:故障切换,当前写操作的writeHost故障,进行切换,切换到下一个writeHost;
       slaveThreshold:标签中的<heartbeat>用来检测后端数据库的心跳sql语句;本属性检查从节点与主节点的同步情况(延迟时间数),配合心跳语句show slave status; 读写分离时,所有的readHost的数据都可靠

    配置案例:

    非分片表的入门配置(只配置逻辑库)
    server.xml(备份)
    修改登录名,和当前用户可操作的逻辑库名称
    <user name="root">
                    <property name="password">root</property>
                    <property name="schemas">mytest</property>
    </user>

    schema.xml:用mycat管理单机数据库的mytest物理库

    <schema name="mytest" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="mytest" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
            writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="hostM1" url="10.9.39.13:3306" user="root"
                password="root">
            </writeHost>
        </dataHost>

    bin目录下启动mycat
    #mycat console

    登录mycat
    #mysql -uroot -proot -P8066 -h 10.9.39.13

    对于读写分离
    balance的值进行测试
    修改schema.xml
    <schema name="mytest" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="mytest" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
            writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="hostM1" url="10.9.39.13:3306" user="root"
                password="root">
            </writeHost>
            <writeHost host="hostM2" url="10.9.100.26:3306" user="root"
                password="root">
            </writeHost>
        </dataHost>

    高可用替换
    switchType=1 自动切换 两个writeHost间
    数据分片数据库集群2个writeHost,宕机第一个,观察数据的读写功能
    <schema name="mytest" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="mytest" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
            writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="hostM1" url="10.9.39.13:3306" user="root"
                password="root">
            </writeHost>
            <writeHost host="hostM2" url="10.9.100.26:3306" user="root"
                password="root">
            </writeHost>
    </dataHost>  

    分布式数据库集群(配置分片表)
    table标签中的dataNode
        mycat计算分片的逻辑
            ○ 根据table中指定rule的值 "auto-sharding-long" 寻找conf下rule.xml
            中的分片计算逻辑
            <tableRule name="auto-sharding-long"> //分片rule的名称
                            <rule>
                                    <columns>id</columns> //计算分片对应的字段名
                                    <algorithm>rang-long</algorithm> //计算分片的算法,对应lib包 中一个可以计算rang-long的类,源码不会超过100行
                            </rule>
            </tableRule>
            ○ 找到的计算算法对应包中类,如果自定义计算方式,可以完成java代码
            将jar包扔到mycat的库中lib文件夹,指定算法
            <function name="rang-long" //对应算法名称
                            class="org.opencloudb.route.function.AutoPartitionByLong">
            //当前算法具体代码
                            <property name="mapFile">autopartition-long.txt</property>
            //算法加载的辅助计算文件
            </function>
            ○ autopartition-long.txt中定义了默认3个分片的数字long范围
            # range start-end ,data node index
            # K=1000,M=10000.
            0-500M=0
            500M-1000M=1
            1000M-1500M=2
            
        计算字符串(待补充)
            rule的名字叫mod-long
            <tableRule name="mod-long">
                            <rule>
                                    <columns>id</columns> //对id字段进行计算
                                    <algorithm>mod-long</algorithm>
                            </rule>
            </tableRule>
            找到function
            <function name="mod-long" class="org.opencloudb.route.function.PartitionByMod">
                            <!-- how many data nodes -->
                            <property name="count">2</property>
             </function>
            对id字段进行hash取余计算,取余的n就是这里的count 必须对应正确的dataNode节点个数(2)
            
    修改schema.xml添加一个新的分片表,指定计算逻辑mod-long
        在分片表格中的table标签添加
        <table name="tb_product" primaryKey="id" dataNode="dn1,dn2"
        rule="mod-long"/>

    ER表
    table childTable(joinKey从表外键,parentKey主表相关字段)
        <table name="t_order" primaryKey="id" dataNode="dn1,dn2" rule="auto-sharding-long">
                <childTable name="t_order_item" primaryKey="id" jointKey="order_id" parentKey="id"/>
        </table>

  • 相关阅读:
    [MySQL]You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
    mysql的索引
    Mysql中的Btree与Hash索引
    Tomcat集群的session共享
    Linux常用命令总结
    docker elk
    docker+mysql+zabix-server环境搭建
    centos7系统服务管理
    Linux vim常用命令
    linux系统日志查看
  • 原文地址:https://www.cnblogs.com/nanlinghan/p/9959738.html
Copyright © 2011-2022 走看看