Schema.xml配置
最后更新于:2022-10-14 14:00:24
balance为0
不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
balance为1,
全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
将balance设置为1,然后在writehost标签中配置读库,读库的接口应该跟写库的结构完全一样
修改了数据源,使用reload @@config_all;
在此表中添加议一条数据
使用mycat查询
所以设置为1时,M1不参与负载均衡
balance为2
所有读操作都随机的在 writeHost、readhost 上分发
balance设置为1,使用reload @@config_all;刷新后多次查询
设置为2时,随机落在host上
balance为3
所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,
注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
balance设置为3,使用reload @@config_all;刷新后多次查询
配置了readhost的,只落在readhost对应的数据库上,不落在writeHost上。
writeType为0
所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,
重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties
修改数据源,配置两个writeHost
新增两条数据
两条数据都落在了M1中
将M1的数据库停止,然后再次新增
数据都落在了M2的数据库中
将M1的数据库启动,再一次插入
数据依然落在M2的数据库上,因为虽然M1在前,但是因为M1已经挂掉了一次,M2就变成了第一个,并不会因为M1恢复而改变顺序
rule属性
定义分片表的分片规则,必须与rule.xml中的tableRule对应
默认的规则为auto-sharding-long
进入rule.xml,找到对应的tablerule为auto-sharding-long的标签
包含两个属性columns:id和algorithm :rang-long,代表分片的列为id,分片规则为rang-long,继续向下找到function标签里name为rang-long
class代表分片规则的实现类,其中实现了如何进行范围的分片,其中mapFile代表映射的文件,进入此文件进行查询
其中注释了数据的开始与结束,以及k M 单位的意义
常用分片规则-分片枚举
mycat支持的分片规则之一,通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则。
rule配置为sharding-by-intfile
接着进入rule.xml查看分片规则,将columns 改为我们需要的列名即可
然后查找hash-int 的function
defaultNode标签为设置默认节点。默认为0:不设置默认节点,大于0为设置默认节点
映射文件为>partition-hash-int.txt,进入文件
在设置了defaultNode为1的时候,DEFAULT_NODE才会生效,不同的provice_id进入设置好的数据库
设置完毕后,启动mycat
利用navicat在mycat新增4条数据
10010进入了设置对应节点,10030为没有设置过的数据,进入了默认节点,如果在mycat没有设置默认节点,添加10030会抛出异常
10000和10020进入了设置的节点0内
常用分片规则-取模
此种配置非常明确即根据 id 进行十进制求模预算,相比固定分片 hash,此种在批量插入时可能存在批量插入单事务插入多数据分片,增大事务一致性难度。
rule配置为mod-long
接着进入rule.xml查看分片规则,将columns 改为我们需要的列名即可
然后查找mod-long 的function
count代表我们的模数,如果id为1,对3进行取模,结果为1,就放进第1个节点,id为11,对3进行取模,结果为2,放进第2个节点,id为3取模后结果为0,放进第0个节点。当前只要两个数据库节点,将模数修改为2.
设置完毕后,启动mycat
利用navicat在mycat新增4条数据
1和3取模结果为1,应该在第一个节点表。
2和4取模结果为0,应该在第0个节点表。