Mycat读写分离核心配置文件 schema.xml文件,我们打开;
我们对配置文件来详细介绍下;
schema.xml有几个标签,分别是:mycat:schema schema主配置标签, schema逻辑库配置标签,dataNode数据节点配置标签,dataHost数据库主机配置标签;
一个逻辑库,对应多个逻辑表,每个逻辑表如上图,可以水平分片(我们后面会细讲),分成一个或者多个数据分片节点,每个数据分片节点对应一个dataHost(数据库主机),dataHost里可以通过writeHost和readHost配置写主机和读主机;
schema标签属性介绍:
(定义逻辑数据库)
属性 解释
name 配置逻辑库的名字(即数据库实例名);
checkSQLschema SQLschema检查 boolean类型。
当前端执行【select *from USERDB.tf_user;】时(表名前指定了mycat逻辑库名),两种取值
true:mycat会把语句转换为【select * from tf_user;】
false:会报错
sqlMaxLimit 最大查询每页记录数设置 相当于sql的结果集中,加上【limit N】。如果sql本身已经指定limit,则以sql指定的为准。
dataNode 配置数据库节点:
用于配置该逻辑库默认的分片。没有通过table标签配置的表,就会走到默认的分片上。这里注意没有配置在table标签的表,用工具查看是无法显示的,但是可以正常使用。
如果没有配置dataNode属性,则没有配置在table标签的表,是无法使用的。
dataNode标签属性:
(定义数据分片节点)
属性 解释
name 数据分片节点名称
dataHost 定义该数据分片节点属于哪个数据库主机
database 定义该数据分片节点属于哪个具体数据库实例上的具体库(即对应mysql中实际的DB)
dataHost标签属性:
(定义后端的数据库主机)
属性 解释
name 指定dataHost的名字
maxCon 指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的writeHost、 readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数。
minCon 指定每个读写实例连接池的最小连接,初始化连接池的大小。
balance 负载均衡类型:
(1)balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
(2)balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
(3)balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
(4)balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
writeType (1)writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个riteHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties.
(2)writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
dbType 指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、 oracle、 spark 等。
dbDriver 指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。使用native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。
switchType -1 表示不自动切换 1 默认值,自动切换 2 基于 MySQL 主从同步的状态决定是否切换 心跳语句为 show slave status 3 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1)
slaveThreshold 配置真实MySQL与MyCat的心跳
heartbeat子标签属性(心跳执行SQL)
writeHost子标签属性(写主机配置)
readHost子标签属性(读主机配置)
属性 解释
host 用于标识不同实例,一般 writeHost 我们使用*M1,readHost 我们用*S1。
url 后端实例连接地址,如果是使用 native 的 dbDriver,则一般为 address:port 这种形式。用 JDBC 或其他的dbDriver,则需要特殊指定。当使用 JDBC 时则可以这么写:jdbc:mysql://localhost:3306/。
user 后端存储实例需要的用户名字
password 后端存储实例需要的密码
参考配置:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
<dataNode name="dn1" dataHost="localhost1" database="db_java1234" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="masterHost1" url="172.20.0.2:3306" user="root"
password="123456">
<readHost host="slaveHost1" url="172.20.0.3:3306" user="root"
password="123456"></readHost>
</writeHost>
</dataHost>
</mycat:schema>
上一篇:读写分离介绍