开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(一):MyCat - 配置文件详解 - schema.xml 之 dataNode 与 dataHost 配置详解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/755/detail/13255
MyCat - 配置文件详解 - schema.xml 之 dataNode 与 dataHost 配置详解
内容介绍:
一、dataNode 标签
二、dataHost 标签
三、子标签 heartbeat
四、子标签 writeHost、readHost
一、dataNode 标签
<dataNode name="dn1" dataHost="host1" database="db1"/>
dataNode 标签中定义了 Mycat 中的数据节点,也就是我们通常说的数据分片。一个 dataNode 标签就是一个独立的数据分片。
具体的属性
属性 |
含义 |
描述 |
Name |
数据节点的名称 |
需要唯一﹔在 table 标签中会引用这个名字,标识表与分片的对应关系 |
DataHost |
数据库实例主机名称 |
引用自 dataHost 标签中 name 属性 |
Database |
定义分片所属的数据库 |
|
<dataNode name="dn1" dataHost="locallosti" database="db1"/>
<dataNode name="dn2" dataHost="localhost2" database="db1”/>
<dataNode name="dn3" dataHost="localhost3" database="db1”/>
<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.157:3306"user="root" password=""itcast"></writeost></ dataHost>
Data node,叫做数据节点,里面有三个属性,分别是 name、data host 和database,配置的 dn1、dn2、dn3 实际上就是配置的数据节点的名称,这个名称可以随便起,但是要保证同一份配置文件当中的 datanode 是不能够重复的,数据节点指的是逻辑上的分片。这个分片对应的数据库是 db1。
二、dataHost 标签
<dataHost name="host1" maxCon="1000" mincon="10" balance="o"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"">
<heartbeat>select user()</heartbeat>
<writeHost host="hostw1" ur1="192.168.192.147:3306"user="root" password="itcast"></writeHost>
</ dataHost>
该标签在 Mycat 逻辑库中作为底层标签存在,直接定义了具体的数据库实例、读写分离、心跳语句。
Data host 有很多属性,还有一些子标签,首先看一下里面的属性配置。首先是name,可以随便起,Name 就是 datahost 的 name 值,里面还有 maxcon 和mincon,con 是 connection 的简写,这两个配置的是最大连接数和最小连接数,由于最终 my cat 还需要去连接 MySQL,My cat 是基于 JAVA 语言开发,在 mycat 里面也有一定的数据库连接值,Max CON 和 MinCON,指定数据库最大的连接数和最小的连接数,通过这两个参数去定义。Balance 指的是负载均衡类型,取值分别为 0123,通过 mycat 进行 mysql 读写分离。
属性 |
含义 |
描述 |
name |
数据节点名称 |
唯一标识,供上层标签使用 |
maxCon |
最大连接数 |
内部的 writeHost、readHost 都会使用这个属性 |
mincon |
最小连接数 |
内部的 writeHost、readHost 初始化连接池的大小 |
balance |
负载均衡类型 |
取值0,1,2,3 ﹔后面章节会详细介绍; |
writeType |
写操作分发方式 |
0︰读写操作都转发到第1台writeHost,writeHost1 挂了,会切换到writeHost2 上; <br/>“因为 writeHost是有多个的。 1 :所有的写操作都随机地发送到配置的writeHost 上 ; |
DbType |
后端数据库类型 |
指的是底层使用的数据库;mycat 不止能做mysql 的集群; mysql, mongodb , oracle |
dbDriver |
数据库驱动 |
指定连接后端数据库的驱动,目前可选值有native 和 JDBC。native执行的是二进制的MysoL 协议,可以使用MysQz 和 MariaDB。其他类型数据库需要使用JDBC (需要在 Mycat/lib目录下加入驱动 jar ) |
switchType |
数据库切换策略 |
取值-1,1,2,3 ﹔后面章节会详细介绍; |
其中 balance 和 switchType 后面会详细讲解。Datahost 还有三个子标签,分别是 heartbeat、writehost 和 readhost。
三、子标签 heartbeat
heartbeat 翻译过来叫心跳,主要是维护 mycat 与 mysql 之间的状态监测。配置mycat 有后端数据库的心跳,用于检测后端数据库的状态。heartbeat 用于配置心跳检查语句。例如: MysQL 中可以使用 select user( ) , oracle 中可以使用 select 1 from dual 等。
<heartbeat>select user</ heartbeat>
也就是说,my cat 需要实时监测后端 MySQL,每隔一段时间就去监测一次客户端的 mysql 节点是否还存活,配置 heartbeat 里面就直接指定了一个 SQL 语句,原因就是 heartbeat 执行这个语句,这条 mysql 语句能够查询到内容就代表 mysql 还活着。如果查询不到,就代表 MySQL 已经挂掉。
通过日志是可以看出来的,刚才已经把 mycat 的日志输出出来,每隔几秒钟这块的日志就会刷新一下,说出这些日志,实际上就是心跳日志,里面有 select user,第一次的 select user 维护的是 Mycat 与 159 的心跳,第二次维护的是 Mycat 与 158 的心跳,第三次维护的是 Mycat 与 157 的心跳。
四、子标签 writeHost、readHost
指定后端数据库的相关配置,用于实例化后端连接池。writeHost 指定写实例,readHost 指定读实例。
在一个 dataHost 中可以定义多个 writdHost 和 readHost。但是,如果 writeHost指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 也将不可用。
属性:
属性名 |
含义 |
取值 |
Host |
实例主机标识 |
对于 writeHost 一般使用 *M1; 对于readHost,一般使用 *s1 ; |
Url |
后端数据库连接地址 |
如果是 native,一般为ip:port ;如果是 JDBC,一般为 jdbc :mysql : / lip:port/ |
User |
数据库用户名 |
root |
Password |
数据库密码 |
itcast |
Weight |
权重 |
在 readHost 中作为读节点权重 |
UsingDecryt |
密码加密 |
默认 0 否,1 是 |
Host 可以随便定义,URL 是访问的地址,Weight 指的是权重,它可以去做读节点权重配置,UsingDecrypt,是否对访问数据库的密码进行加密操作。以上 schema中 data node 和 data host 的配置。