java1234开源博客系统
博客信息

读写分离核心配置详解

0
发布时间:『 2020-02-28 22:00』  博客类别:Mycat  阅读(299)

Mycat读写分离核心配置文件 schema.xml文件,我们打开;

我们对配置文件来详细介绍下;

 

schema.xml有几个标签,分别是:mycat:schema schema主配置标签, schema逻辑库配置标签,dataNode数据节点配置标签,dataHost数据库主机配置标签;

QQ鎴浘20200228084538.jpg

一个逻辑库,对应多个逻辑表,每个逻辑表如上图,可以水平分片(我们后面会细讲),分成一个或者多个数据分片节点,每个数据分片节点对应一个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>

 



关键字:   无
关注Java1234微信公众号
博主信息
Java1234_小锋
(知识改变命运,技术改变世界)
Powered by Java1234 V3.0 Copyright © 2012-2016 Java知识分享网 版权所有