mycat中间件

mycat中间件配置

mycat概述
mycat是开源的数据库中间件,支持大量数据的读写操作,服务在微服务和数据库之间,将数据库的读写分离,分片计算存储的配置管理中心。
执行原理
拦截微服务端需要执行的sql语句,通过分片计算,读写分离,最终开启一个后端数据库连接发送执行,获取执行的结果(连接过程使用的是非阻塞线程)
部署测试
将mycat安装吧解压安装即可。
非分片表格的配置
1.首先准备一个后端数据库表格:mytest.user
2.在安装包的conf目录下编辑server.xml。修改user标签如下:

<user name="root">        #用户的账号也就是登录mysql的账号
	<property name="password">root</property> #密码
	<property name="schemas">mytest</property> #要管理的数据库
</user>

3.在conf目录下编辑schema.xml
在这个文件中才真正的配置mycat的读写分离和分片。
读写分离:

<mycat:schema xmlns:mycat="http://org.opencloudb/" >
	<schema name="mstest" checkSQLschema="true" sqlMaxLimit="100">
		<table name="user" primaryKey="ID" dataNode="dn1"/>
	</schema>
	<dataNode name="dn1" dataHost="localhost1" database="mstest" />
	<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="ip+端口" user="root" password="root">
		</writeHost>
		<writeHost host="hostM2" url="ip+端口" user="root" password="root">
		</writeHost>
	</dataHost>
</mycat:schema>

默认情况下,读和写都是在第一个writeHost中执行的.读写分离的控制是dataHost标签的2个属性决定的
writeType取值决定写/读写逻辑
0:表示当前dataHost接收到分片的读写操作中,写操作,只在第一个writeHost
1:表示随机的读写在所有的writeHost和readHost中实现,覆盖balance的逻辑(老版本1.4之前的遗留功能,1.5之后不建议使用,balance独立控制读逻辑)

balance:控制着一个dataHost中所有的读逻辑,一旦writeType=1,就无效了
0:读逻辑不分离的,只在第一个writeHost执行,其他任意readHost writeHost都不进行读操作;
1:除了第一个writeHost以外的所有writeHost和readHost进行随机读取.高并发时,如果其他节点都高负荷的运转进行读操作,也有一部分读取分配到第一个writeHost
2:随机的在所有的节点读取(writeHost readHost);
3:到所有的readHost读取数据,如果分片中不存在readHost,只会到第一个writeHost(备用,第二个,不在参加读分离)

高可用的故障转移
在一个分片中,如果想实现故障转移,有dataHost的属性switchType决定
-1:不开启故障转移
1:开启故障转移(在2个writeHost之间切换)

	计算转移时,初始化对2个writeHost分别给了下标 0到1,当0一旦宕机,1将会顶替(下标从1变成0),恢复的writeHost下标自动变成1

分片计算(需要在数据库中再定义一张表)
所以需要在schema中在添加一条table标签

<table name="order" primaryKey="ID" dataNode="dn1,dn2" rule="auto-sharding-long"/>

1.其中dataNode是分片需要的两个数据库分片name属性值
2.rule是表计算分片操作的计算方法;auto-sharding-long:是将表id列值按照0-500w、500w-1000w、1000w-1500w化成三个部分进行存储。(这个计算规则可以在rule.xml文件中可以自定义更改)。
3.另外一种计算规则sharding-by-murmur:这个是根据id的hash一致性进行分片。

全局表
这种表是一种工具字典表,存储数据量不大,而且数据的内容变化不大,一般配置为全局表
配置全局表需要在table标签中加入一个属性type=“global”,并且不需要设置rule。因为这张表会进行复制一份在每个分片中。

er分片表
它是为了解决分片之间不能跨分片查询,但在实际应用中需要关联查询的解决方式。
需要将两个表进行如下配置:

<table name="test_order" primaryKey="ID" dataNode="dn1,dn2" rule="auto-sharding-long">
	<childTable name="test_o_item" primaryKey="ID" joinKey="oid" parentKey="id"/>
</table>

将两个表按照逻辑关系建立父子关系。
joinKey:子表的外键字段名称
parentKey:子表外键字段对应父表的字段名称

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值