mycat中间件

一、为什么会有mycat?即为什么会有分片(分库分表)?

面对着一天天的单表数据量增加,使的数据库的处理能力的压力增大。建立一个合理数据库架构,来存放日益增加的数据,减少数据库的访问压力,最大限度的提高数据的处理能力。

二、为什么说mycat是数据库的中间件?

因为它介于应用程序和数据库之间,所以称为数据库的中间件。

三、mycat简介

mycat前身是阿里的Cobar,后来被重构了,变成现在的mycat。cobar用的是BIO,mycat用的是NIO。实现了 MySQL 公开的二进制传输协议,巧妙地将自己伪装成一个 MySQL Server。

四、mycat的分片

mycat的分片就是把单个数据库服务器中的数据分散到多个数据库服务器,减轻数据库的压力。

4.1、数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。

4.1.1、纵向(垂直)模式--------->存在的缺点:可能一张表的数据量就特别大,不能满足业务。

将不同的表切分到不同的数据库服务器上(分的规则是按照业务逻辑去分,例如用户(user)、订单(order))

mycat中间件_第1张图片

4.1.2、横向(水平)模式

将相同的表中的数据分到不同的数据库服务器上(分的规则是按照业务逻辑去分,例如用户一(user1)、订单一(order1))

mycat中间件_第2张图片

五、分片的策略

mycat中间件_第3张图片

上图的架构,即用mycat作为数据库中间件时,项目的初期就是采用这种架构的。并且上面的分库分表的方式是水平拆分。

有个问题是:mycat应该在哪台服务器合适?

六、相关概念

分片规则 :Table A —>Datanode这个过程中的规则。

七、分片配置详解(主要配置文件是schema.xml )



<mycat:schema xmlns:mycat="http://org.opencloudb/">
	<schema name="ITCAST" checkSQLschema="false" sqlMaxLimit="100">#逻辑库
		<table name="tb_test" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />#逻辑表
	schema>
    
	<dataNode name="dn1" dataHost="localhost1" database="db1" />#分片节点
	<dataNode name="dn2" dataHost="localhost1" database="db2" />
	<dataNode name="dn3" dataHost="localhost1" database="db3" />
    
	<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="192.168.192.128:3306" user="root" password="itcast">writeHost>#读写分离的“写”走的主机
	dataHost>	
    
mycat:schema>

八、分片配置详解(配置文件server.xml)

server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。在system中添加UTF-8字符集设置,否则存储中文会出现问号

<property name="charset">utf8property>

修改user的设置 , 我们这里为 ITCAST 设置了两个用户

<user name="test">#用户名
    <property name="password">testproperty>#用户密码
    <property name="schemas">ITCASTproperty>#逻辑库
user>
<user name="root">
    <property name="password">123456property>
    <property name="schemas">ITCASTproperty>
user>

对七和八总结,当操作mycat时,底层就操作了mysql。例如在mycat建表,在mysql中就有了相对应的表。数据节点(分片节点)是在配置文件所指向的数据库节点上可以查看到当前分片节点的内容。

九、分片配置详解(rule.xml)

在schema.xml中的

十、分片规则详解

问题:一般是以id为条件去分片的规则,这个id是自增。那么如果是uuid或者是其他的怎么办?

答案:可以在配置规则里选一致性哈希算法(点击此链接快速了解一致性哈希算法)

十一、MyCat读写分离

测试读写分离时,要记住一点从节点是同步不到主节点的。这一点可以提供测试的思路。

主从节点说明:从节点可以配置多个,因为从节点是查询节点,访问量大,一般配置1-3个。

配置mycat的schema.xml的信息如下:

<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="ITCAST" checkSQLschema="true" sqlMaxLimit="100">
		<table name="tb_test" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
		<table name="tb_order" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur" />
		#读写分离的配置 name属性就是表的名称
		<table name="user" dataNode="dn4" primaryKey="id"/>
	</schema>
	

	<dataNode name="dn1" dataHost="localhost1" database="db1" />
	<dataNode name="dn2" dataHost="localhost1" database="db2" />
	<dataNode name="dn3" dataHost="localhost1" database="db3" />
		#读写分离的配置
	<dataNode name="dn4" dataHost="localhost2" database="test01" />
	
	
	<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="localhost:3306" user="root" password="itcast"></writeHost>
		
	</dataHost>
	
	
	#读写分离的配置
	<dataHost name="localhost2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" 	
				dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="hostM1" url="192.168.192.138:3306" user="root" password="itcast">
			<readHost host="hostS1" url="192.168.192.141:3306" user="root" password="itcast" />
		</writeHost>
	</dataHost>
	
</mycat:schema>

以上配置信息的说明具体如下:


checkSQLschema
	当该值设置为true, 如果我们执行语句"select * from test01.user ;" 语句时, MyCat则会把schema字符去掉 , 可以避免后端数据库执行时报错 ;
	
balance
	负载均衡类型, 目前取值有4种:
	
	balance="0" : 不开启读写分离机制 , 所有读操作都发送到当前可用的writeHost上.
	
	balance="1" : 全部的readHost 与 stand by writeHost 都参与select 语句的负载均衡,简而言之,就是采用双主双从模式(M1 --> S1 , M2 --> S2);
    
    balance="2" : 所有的读写操作都随机在writeHost , readHost上分发
    
    balance="3" : 所有的读请求随机分发到writeHost对应的readHost上执行, writeHost不负担读压力 ;balance=3 只在MyCat1.4 之后生效 .

你可能感兴趣的:(测试文章)