MyCAT原理及配置


一、原理

MyCAT拦截用户发送的SQL语句,对SQL语句进行分片分析、路由分析、读写分离分析、缓存分析等,然后将SQL语句发往相应的数据分片,并对返回的结果做适当处理,最终再返回给用户。


二、server.xml配置

配置MyCAT的系统配置信息,如:用户名、密码、模式、权限、服务端口号(默认8066)、全局SQL防火墙设置等。

<user name="root" defaultAccount="true">
	<property name="password">123456</property>
	<property name="schemas">TESTDB</property>
	<property name="defaultSchema">TESTDB</property>
	<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->
</user>

<user name="user">
	<property name="password">user</property>
	<property name="schemas">TESTDB</property>
	<property name="readOnly">true</property>
	<property name="defaultSchema">TESTDB</property>
</user>

三、schema.xml配置

配置MyCAT的逻辑库、逻辑表、分片规则、DataNode以及DataSource。

属性作用
schema定义MyCAT实例中的逻辑库
table定义MyCAT的逻辑表,rule属性指定分片规则
dataNode定义MyCAT的数据节点(数据分片)
dataHost定义实际的数据库实例、读写分离配置、心跳检查
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<!--
		name:逻辑库名称,与server.xml中的<property name="schemas">TESTDB</property>对应;
		checkSQLschema:自动检查逻辑库名称并拼接,设置为true时,会拼接为“逻辑库名.表名”;
		sqlMaxLimit:查询保护,如果没有写limit条件,会自动拼接;
		randomDataNode:指定非DQL(非select、update、delete、insert)语句由指定节点处理;
	-->
	<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
		<!--
			name:逻辑表名称,与数据库的物理表名一致。可以用逗号分隔,即多张表均使用该配置;
			primaryKey:逻辑表主键,与数据库物理表主键一致;
			dataNode:物理表所在数据节点的名称,配置多个数据节点时需按索引顺序并使用逗号分隔,或指定一个索引范围:dn1$0-743。
					***注意数据节点定义之后,顺序不能再发生改变,否则会导致数据混乱***;
			rule:分片规则,对应rule.xml中tableRule节点的name属性;
			autoIncrement:设置逻辑表主键是否是自增长的,与sequence_db_conf.properties文件结合使用;
		-->
		<table name="student" primaryKey="student_id" dataNode="dn1,dn2" rule="student_id" autoIncrement="true">
		</table>
	</schema>

	<!-- 
		name:数据节点名称,对应schema》table节点中的dataNode属性;
		dataHost:指定分片所在的物理主机,与dataHost节点中的name属性对应;
		database:物理数据库名;
	-->
	<dataNode name="dn1" dataHost="dh1" database="mycat01" />
	<dataNode name="dn2" dataHost="dh1" database="mycat02" />
	
	<!-- 
		name:物理主机名称,与dataNode节点的dataHost属性对应;
		maxCon、minCon:底层数据库的链接最大、小数;
		balance:指定读写分离的负载均衡类型,值可以为0,1,2,3;
		writeType:指定写实例的负载均衡类型,值可以为-1,0,1,2;
		dbType:后端连接的数据库类型;
		switchType:指定主从切换方式,值可以为-1,1,2,3;
		slaveThreshold:定义主从复制延时阈值;
	-->
	<dataHost name="dh1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<!-- 心跳检查,MySQL可以使用select user(),Oracle可以使用select 1 from dual -->
		<heartbeat>select user()</heartbeat>
		
		<!-- 
			host:标识不同实例名称,一般writeHost名称使用M1作为后缀,readHost则使用S1作为后缀;
			url:数据库连接地址;
			weight:配置某个数据库在 readhost 中作为读节点的权重;
		-->
		<writeHost host="hostM1" url="jdbc:mysql://localhost:3306" user="root"
				   password="root">
			<readHost host="hostS1" url="jdbc:mysql://localhost:3306" user="root" 
					password="root" weight="1"></readHost>
		</writeHost>
	</dataHost>

</mycat:schema>

四、rule.xml配置

配置分片规则。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
	
	<!-- 
		name:与schema.xml中的schema》table节点中的rule属性对应;
		algorithm:对应function节点;
	-->
    <tableRule name="student_id">
        <rule>
            <columns>student_id</columns>
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>
    
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">1</property>
    </function>
</mycat:rule>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值