数据库中间件MyCat(一)

数据库中间件


数据库集群常见概念

故障转移

master宕机,自动将备份数据的slave顶替为新的master

读写分离

读和写分离开来

在主节点中可以进行读和写

在从节点中只进行读的逻辑

备份机制

单机备份

单方向的主从复制,只能提供一次性的主从替换

双机热备

双方向的主从复制,可以无限进行主从替换

 

mycat介绍

中国第一开源数据库中间件

特点

支持超大表的水平扩展,底层进行并行计算(百亿条)

支持高性能的读写分离逻辑

mycat支持多种数据源的整合

oracle,sqlserver,mysql

同类产品

amoeba

早期一个性能较高的数据中间件(停更)

cobar

没有解决后端连接的假死现象

mycat

利用==NIO==实现了后端的非阻塞技术使用,解决了假死

 

数据库中间件的原理

1.客户端将sql发送到mycat

2.mycat接收到sql

3.计算分片和读写分离的逻辑

4.从计算结果中,指定获取后端一个数据库连接

5.将计算结果过滤清洗,最终发送给后端数据库执行

假死

阻塞线程

从线程接收到任务到任务执行结果中所有过程和进度中,线程都处在繁忙状态

非阻塞

在线程处理任务时,任务不是时刻都繁忙的,所以线程可以利用这种空隙空闲出来处理其他问题--高并发中使用非阻塞的逻辑

非阻塞引入后端连接数据库的技术,极大的提升mycat整体访问的并发效率

 

安装测试mycat

mycat的运行环境需要2点支持

基于jdk环境运行

基于mysql的命令环境(登录需要mysql命令)

解压tar包

1.[root@10-9-100-26 software]#

cp /home/resources/Mycat-server-1.5.1-RELEASE-20161130213509-linux.tar.gz ./

2.[root@10-9-100-26 software]#

tar -xf Mycat-server-1.5.1-RELEASE-20161130213509-linux.tar.gz

文件夹结构

bin:运行mycat脚本 mycat文件

catlet:模板插件资源 空

conf:配置文件目录 server.xml schema.xml rule.xml等

lib:jar包

logs:wrapper.log是运行日志

 

运行mycat

启动mycat

bin文件夹中执行mycat运行命令

#mycat start :后台运行

#mycat console :占用控制台运行

 

登录mycat

[root@10-9-100-26 conf]#

mysql -utest -ptest -h10.9.100.26 -P8066

 

mycat的测试案例

server.xml

server.xml配置的是mycat的用户信息,配置mycat启动时的各种资源属性配置逻辑,例如端口号,例如缓存大小,例如占用的线程资源等等

举例
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mycat:server SYSTEM "server.dtd">
 <mycat:server xmlns:mycat="http://org.opencloudb/">
     <system>
         <property name="defaultSqlParser">druidparser</property>
     </system>
     <user name="root">
         <property name="password">root</property>
         <property name="schemas">mstest</property>
     </user>
 </mycat:server>
system

所有内容就是mycat软件的属性配置

defaultSqlParser:默认的sql解析器(实现拦截计算逻辑

     <system>
         <property name="defaultSqlParser">druidparser</property>
     </system>
user

定义了mycat的登录用户内容

下例的含义:

可以使用user/user登录mycat,只能看到一个数据库TESTDB,并且只读

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

定义了mycat使用的防火墙逻辑

ip白名单

sql黑名单

下例含义

IP白名单,定义了127.0.0.1/127.0.0.2,

只有ip满足白名单要求才能登陆mycat

sql黑名单

true:缺省,表示开启可以执行

false:自定义,表示关闭,定义的sql不能执行

select *的所有sql语句定义在黑名单中

 <qurantine>
         <whitehost>
                   <host host="127.0.0.1" user="mycat"/>
                   <host host="127.0.0.2" user="mycat"/>
         </whitehost>
         
         <blackList check="false">selectAllColumnAllow</blackList></qurantine>

 

schema.xml

定义了当前mycat管理维护的逻辑库,逻辑表,数据分片,计算分片逻辑,后端数据库连接信息等

 

mycat管理数据的结构

逻辑库

表示一个表格集合的虚拟数据库

用户可见

逻辑表

数据的细粒度体现

一张虚拟库表格可以来自于不同分片的表

也可以是来自于同一分片的表格

举例
 <?xml version="1.0"?>
 <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
 <mycat:schema xmlns:mycat="http://org.opencloudb/" ><schema name="mstest" checkSQLschema="true" sqlMaxLimit="100">
     <!--teacher table-->
         <table name="teacher" primaryKey="ID" dataNode="dn1"/>
     </schema>
     
     <dataNode name="dn1" dataHost="localhost1" database="mstest" />
     
     <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="10.9.100.26:3306" user="root"
             password="root"/>
     </dataHost>
 </mycat:schema>
schema

表示逻辑库,可以配置多个schema标签,每一个schema表示一个逻辑库

属性

name:逻辑库名称

checkSQLschema:客户端调用sql语句是否对表名自动匹配

sqlMaxLimit :分页查询,防止一次性查询大量数据

 <schema name="mstest" checkSQLschema="true" sqlMaxLimit="100">
 </schema>
table

逻辑表名称,表示当前逻辑库的一张逻辑表

属性

name: 逻辑表名称

primaryKey:定义逻辑表中的主键,默认为Id

dataNode:定义的是dataNode的名称,用来计算分片,不分片只需要配置一个dataNode

rule:调用rule.xml中一个计算分片的具体方法,默认hash一致性

 <schema name="mstest" checkSQLschema="true" sqlMaxLimit="100">
         <table name="teacher" primaryKey="ID" dataNode="dn1"/>
 </schema>
dataNode

mycat中实现连接后端数据库,计算分片逻辑的中间标签

属性

name:分片名称

dataHost:关联一个dataHost标签使用

database:当前分片使用的后端数据库==真实名称==

 <dataNode name="dn1" dataHost="localhost1" database="mstest" />
dataHost

一个dataHost管理一个数据库的集群(高可用的主从集群)

属性

name:定义一个名称

maxCon/minCon:连接当前标签中所有的后端数据库的连接池属性

balance/writeType/switcheType:与读写分离高可用故障转移逻辑有关

dbType/dbDriver:提供后端数据库类型和驱动类 native就是mysql的驱动类,如果使用其他类型,定义Driver的全路径名称

slaveThreashold:读写分离中是否读取从节点的判断逻辑有关(从节点有可能同步数据是会延迟) 配合heartbeat的sql语句 show slave status

heartbeat

自定义语句,返回当前登录客户端的用户名使用和ip地址

wirteHost

配置一个可以进行写操作的数据库节点信息

 <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="10.9.100.26:3306" user="root" password="root"/>
 </dataHost>

 

 

posted @ 2021-04-22 11:18  minnersun  阅读(261)  评论(0编辑  收藏  举报