Schema.xml配置

balance为0

不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。

balance为1,

全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。

file

将balance设置为1,然后在writehost标签中配置读库,读库的接口应该跟写库的结构完全一样

修改了数据源,使用reload @@config_all;
file

在此表中添加议一条数据
file

使用mycat查询
file

所以设置为1时,M1不参与负载均衡

balance为2

所有读操作都随机的在 writeHost、readhost 上分发

balance设置为1,使用reload @@config_all;刷新后多次查询
file
file

设置为2时,随机落在host上

balance为3

所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,
注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

balance设置为3,使用reload @@config_all;刷新后多次查询
file
file

配置了readhost的,只落在readhost对应的数据库上,不落在writeHost上。

writeType为0

所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,
重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties

修改数据源,配置两个writeHost
file

新增两条数据
file

两条数据都落在了M1中
file

将M1的数据库停止,然后再次新增
file

数据都落在了M2的数据库中
file

将M1的数据库启动,再一次插入
file

数据依然落在M2的数据库上,因为虽然M1在前,但是因为M1已经挂掉了一次,M2就变成了第一个,并不会因为M1恢复而改变顺序
file

rule属性

定义分片表的分片规则,必须与rule.xml中的tableRule对应
file
默认的规则为auto-sharding-long

进入rule.xml,找到对应的tablerule为auto-sharding-long的标签
file
包含两个属性columns:id和algorithm :rang-long,代表分片的列为id,分片规则为rang-long,继续向下找到function标签里name为rang-long

file
class代表分片规则的实现类,其中实现了如何进行范围的分片,其中mapFile代表映射的文件,进入此文件进行查询

file
其中注释了数据的开始与结束,以及k M 单位的意义

常用分片规则-分片枚举

mycat支持的分片规则之一,通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则。

rule配置为sharding-by-intfile
file

接着进入rule.xml查看分片规则,将columns 改为我们需要的列名即可
file
file

然后查找hash-int 的function
file
defaultNode标签为设置默认节点。默认为0:不设置默认节点,大于0为设置默认节点
file

映射文件为>partition-hash-int.txt,进入文件
file
在设置了defaultNode为1的时候,DEFAULT_NODE才会生效,不同的provice_id进入设置好的数据库

设置完毕后,启动mycat
利用navicat在mycat新增4条数据
file

10010进入了设置对应节点,10030为没有设置过的数据,进入了默认节点,如果在mycat没有设置默认节点,添加10030会抛出异常
file

10000和10020进入了设置的节点0内
file

常用分片规则-取模

此种配置非常明确即根据 id 进行十进制求模预算,相比固定分片 hash,此种在批量插入时可能存在批量插入单事务插入多数据分片,增大事务一致性难度。

rule配置为mod-long
file

接着进入rule.xml查看分片规则,将columns 改为我们需要的列名即可
file

然后查找mod-long 的function
file
count代表我们的模数,如果id为1,对3进行取模,结果为1,就放进第1个节点,id为11,对3进行取模,结果为2,放进第2个节点,id为3取模后结果为0,放进第0个节点。当前只要两个数据库节点,将模数修改为2.

设置完毕后,启动mycat
利用navicat在mycat新增4条数据
file

1和3取模结果为1,应该在第一个节点表。
file

2和4取模结果为0,应该在第0个节点表。
file

发表回复