数据库中间件---Mycat配置

一、配置文件

1.1、schema.xml

schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库、表、分片规则、 DataNode 以及 DataSource。弄懂这些配置,是正确使用 MyCat 的前提。这里就一层层对该文件进行解析。
1.1.1 熟悉schema.xml

schema 节点用于配置Mycat逻辑库,这里可以拥有多个逻辑库,不同逻辑库关联不同的表。

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
    <table name="users" primaryKey="id" dataNode="dn1,dn2" rule="rule1" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1" /> 
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<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="127.0.0.1:3306" user="root"
                       password="123456">
    </writeHost>
</dataHost>

# schema 节点
## name节点值mycat逻辑库名称  
## sqlMaxLimit 指默认情况下最大返回的行数
## checkSQLschema 是否检查sql的schema,如果设置为false则查询语句中不能加逻辑库名称,如果设置为#true则查询语句中可以加逻辑名称。
### checkSQLschema 设置为true:
### select * from users ; //在use TESTDB后可以正常运行
###s elect * from TESTDB.users ; //任何时候可以正常运行
### checkSQLschema 设置为false
### select * from users ; //在use TESTDB后可以正常运行
### select * from TESTDB.users ; // 报错 Table 'testdb.users' doesn't exist

# table 节点
## name指表名 指数据库表名这个要和数据库中表名一致 
## primaryKey指主键字段名
## dataNode 指分片表在哪个节点上
## rule指分配表规则(具体规则在下一小节中讲解)

# dataNode 节点
## name 逻辑名称
## dataHost 指定节点的dataHost
## database 指定节点对应的数据库名称
# dataHost 节点
## name 逻辑名称
## maxCon 该datahost最大链接数
## minCon 该datahost最小连接数
## balance 属性
### balance=0 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
### balance=1 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
### balance=2 所有读操作都随机的在 writeHost、 readhost 上分发。
### balance=3 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行, writerHost 不负担读压力
## writeType 属性
### writeType=-1 表示不自动切换 
### writeType=1 表示自动切换 
### writeType=2 表示MySQL 主从同步的状态决定是否切换,心跳语句需要为 show slave status 
### writeType=3 基于 MySQL galary cluster 的切换机制(适合集群)

## dbtype属性
### 指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、 oracle、 spark ,sqlserver 等
## dbDriver
### 目前可选的值有 native 和 JDBC 从 1 .6 版本开始支持 postgresql 的 native 原始协议 
如果使用 JDBC 的话需要将符合 JDBC 4 标准的驱动 JAR 包放到 MYCAT\lib 目录下,并检查驱动 JAR 包中。

# heartbeat节点 配置后端数据库心跳语句,mysql 设置 select user(), 或者是 select 1 

# writeHost 后端数据库写节点
# readHost  后端数据库读节点

1.2 rule.xml

rule.xml 里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。这个文件里面主要有 tableRule 和 function 这两个标签。
<tableRule name="rule1">
     <rule>
                <columns>id</columns>
                <algorithm>func1</algorithm>
        </rule>
</tableRule>
<function name="func1" class="io.mycat.route.function.PartitionByLong">
        <property name="partitionCount">2</property>
        <property name="partitionLength">512</property>
</function>
# function 节点
## 指定分配规则的函数,PartitionByLong,id取模仅限数字类型的,
## partitionCount 表示两个分片
## partitionLength 每个分片的步长是512 特别注意,这里 partitionCount*partitionLength必需是1024 这个是源码滚定写死,没法改变,除非自定义一个分片规则函数
# tableRule 节点
## 指定表的分表规则
## columns 根据哪个字段分表
## algorithm 分表执行的规则是,对应 function 节点的name属性值
1.2.1 自定义数字范围分片
<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong">
    <property name="mapFile">autopartition-long.txt</property>
    <property name="defaultNode">0</property>
</function>
# mapFile 对应文件分表
# defaultNode 如果id分片表上无规则,则默认插入某个分片

autopartition-long.txt的文件内容

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
# 0-五百万到0分片上
500M-1000M=1
# 500W到1000万到1分片上,生成环境应配置更多, 根据自己数据量去配置响应的数据
1.2.2 按日期(天)分片
<function name="sharding-by-date" class=“io.mycat.route.function.PartitionByDate">
    <property name=“dateFormat”>yyyy-MM-dd</property>
    <property name=“sBeginDate”>2017-01-01</property>
    <property name=“sPartionDay”>10</property>
</function>
#  dateFormat:格式化的日期格式
# sBeginDate:开始日期
# sPartionDay:分片的天数

## 从开始日期算起,按照天数来分片
## 例如,从2017-01-01,每10天一个分片
## 注意事项:需要提前将分片规划好,建好,否则有可能日期超出实际配置分片数
## 外延:参数sEndDate,结束时间。
1.2.3 按单月小时分片
<function name="sharding-by-hour" class=“io.mycat.route.function.LatestMonthPartion">
<property name="splitOneDay">24</property>
</function>
# splitOneDay:分的份数
# 最小粒度是小时
# 一天最多24个分片
# 最少1个分片,
# 一个月完后下月从头开始循环。
# 注意事项:
# 每个月月尾,需要手工清理数据。
1.2.4 自然月分片
<function name="sharding-by-month" class=“io.mycat.route.function.PartitionByMonth">
    <property name="dateFormat">yyyy-MM-dd</property>
    <property name="sBeginDate">2014-01-01</property>
</function>
# dateFormat : 日期字符串格式
# sBeginDate : 开始日期

# 每个自然月一个分片
# 注意事项:
# 需要提前将分片数规划好,建好,否则有可能日期超出实际配置分片数
# 外延:参数sEndDate,结束时间
1.2.5 枚举分片
<function name="hash-int" class=“io.mycat.route.function.PartitionByFileMap">
    <property name="mapFile">partition-hash-int.txt</property>
    <property name="type">0</property>
    <property name="defaultNode">0</property>
</function> 
# mapFile : 标识配置文件名称
## partition-hash-int.txt 文件内容(下列内容,中#要去掉,这里是 ):
### beijing=0
### guangzhou=1
### Hebei=2
### Henan=3 
# type:枚举字段类型
# defaultNode :默认节点
1.2.6 程序指定分区的分片
<function name="sharding-by-substring" class=“io.mycat.route.function.PartitionDirectBySubString">
    <property name="startIndex">0</property>
    <property name="size">2</property>
    <property name="partitionCount">8</property>
    <property name="defaultPartition">0</property>
</function>
#  startIndex : 截取开始位
# size :截取的位数
# partitionCount :分片个数
# defaultPartition :默认节点

## 由应用自主决定路由到那个分片。
##  根据字符子串(必须是数字)计算分区号(由应用传递参数,显式指定分区号)。
## startIndex从0开始计算
## 例如id=05-100000002:在此配置中代表根据id中从0开始截取2位数字即05,05就是获取的分区,
##  如果没传默认分配到defaultPartition
1.2.7 十进制求模分片
<function name="mod-long" class=“io.mycat.route.function.PartitionByMod">
    <property name="count">3</property> <!-- count 指分片个数-->
</function>
# 对分片字段十进制取模运算
# 数据分布最均匀
# 扩容需要重新计算分片,数据迁移繁琐
# 尽量的提前计算出来增量,创建足够多的分片数。但是也不宜太多,给运维造成负担。平衡点自己掌控。
1.2.8 字符串hash分片
<function name="sharding-by-stringhash"     class=“io.mycat.route.function.PartitionByString">
    <property name="partitionLength">512</property><!-- zero-based -->
    <property name="partitionCount">2</property>
    <property name="hashSlice">0:2</property>
</function>
# length代表字符串hash求模基数,count分区数,其中length*count=1024
# hashSlice hash预算位,即根据子字符串中int值 hash运算
# 0 代表 str.length(), -1 代表 str.length()-1,大于0只代表数字自身
# 可以理解为substring(start,end),start为0则只表示0
# 例1:值“45abc”,hash预算位0:2 ,取其中45进行计算
# 例2:值“aaaabbb2345”,hash预算位-4:0 ,取其中2345进行计算

1.3 server.xml

server.xml 几乎保存了所有 mycat 需要的系统配置信息。其在代码内直接的映射类为 SystemConfig 类。

配置防火墙:

 <firewall> 
     <whitehost>
          <host host="127.0.0.1" user="mycat"/>
          <host host="127.0.0.2" user="mycat"/>
       </whitehost>
   <blacklist check="false">
   </blacklist>
 </firewall>

配置mycat用户,多个用户 多个user节点。

<user name="root">
    <property name="password">123456</property>
    <property name="schemas">TESTDB</property>
</user>

字符集配置

<system>
    <property name="charset">utf8</property>
</system>

1.4 wrapper.conf

wrapper.conf 对Mycat启动参数、日志级别、启动内存进行调优处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值