分布式数据库架构mycat

Posted 虚拟化技术学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式数据库架构mycat相关的知识,希望对你有一定的参考价值。

MyCat

1、一个彻底开源的,面向企业应用开发的大数据库集群       

2、支持事务、ACID、可以替代mysql的加强版数据库       

3、一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群     

4、一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server     

5、结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品     

6、一个新颖的数据库中间件产品


为什么使用MyCat

传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对此问题就出现了——MyCat .


MySQL分布式架构

垂直分库(把一个数据库中的表分开) 水平分表(把一个大表分成多个小表)


MyCAT安装


预先安装Java运行环境

yum install -y java

下载


  
    
    
  
  1. Mycat-server-xxxxx.linux.tar.gz

  2. http://dl.mycat.io/

 解压文件

tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

软件目录结构


  
    
    
  
  1. ls

  2. bin catlet conf lib logs version.txt

启动和连接


  
    
    
  
  1. 配置环境变量

  2. vim /etc/profile

  3. export PATH=/application/mycat/bin:$PATH

  4. source /etc/profile

  5. 启动

  6. mycat start

  7. 连接mycat:

  8. mysql -uroot -p123456 -h 127.0.0.1 -P8066

配置文件介绍


  
    
    
  
  1. logs目录:

  2. wrapper.log ---->mycat启动日志

  3. mycat.log ---->mycat详细工作日志

  4. conf目录:

  5. schema.xml

  6. 主配置文件(读写分离、高可用、分布式策略定制、节点控制)

  7. server.xml

  8. mycat软件本身相关的配置

  9. rule.xml

  10. 分片规则配置文件,记录分片规则列表、使用方法等


配置文件简单介绍


逻辑库:schema


  
    
    
  
  1. <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">

  2. </schema>

数据节点:datanode

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

数据主机:datahost(w和r)


  
    
    
  
  1. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1">

  2. <heartbeat>select user()</heartbeat>

  3. <writeHost host="db1" url="10.0.0.51:3307" user="root" password="123">

  4. <readHost host="db2" url="10.0.0.52:3309" user="root" password="123" />

  5. </writeHost>

  6. </dataHost>

读写分离结构配置


  
    
    
  
  1. vim schema.xml

  2. <?xml version="1.0"?>

  3. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">

  4. <mycat:schema xmlns:mycat="http://io.mycat/">

  5. <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="sh1">

  6. </schema>

  7. <dataNode name="sh1" dataHost="oldguo1" database= "world" />

  8. <dataHost name="oldguo1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1">

  9. <heartbeat>select user()</heartbeat>

  10. <writeHost host="db1" url="10.0.0.51:3307" user="root" password="123">

  11. <readHost host="db2" url="10.0.0.51:3309" user="root" password="123" />

  12. </writeHost>

  13. </dataHost>

  14. </mycat:schema>

  15. 重启mycat

  16. mycat restart

  17. 读写分离测试

  18. mysql -uroot -p -h 127.0.0.1 -P8066

  19. show variables like 'server_id';

  20. begin;

  21. show variables like 'server_id';

  22. 总结:

  23. 以上案例实现了1主1从的读写分离功能,写操作落到主库,读操作落到从库.如果主库宕机,从库不能在继续提供服务了。

配置读写分离及高可用


  
    
    
  
  1. [root@db01 conf]# mv schema.xml schema.xml.rw

  2. [root@db01 conf]# vim schema.xml

  3. <?xml version="1.0"?>

  4. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">

  5. <mycat:schema xmlns:mycat="http://io.mycat/">

  6. <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="sh1">

  7. </schema>

  8. <dataNode name="sh1" dataHost="oldguo1" database= "world" />

  9. <dataHost name="oldguo1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1">

  10. <heartbeat>select user()</heartbeat>

  11. <writeHost host="db1" url="10.0.0.51:3307" user="root" password="123">

  12. <readHost host="db2" url="10.0.0.51:3309" user="root" password="123" />

  13. </writeHost>

  14. <writeHost host="db3" url="10.0.0.52:3307" user="root" password="123">

  15. <readHost host="db4" url="10.0.0.52:3309" user="root" password="123" />

  16. </writeHost>

  17. </dataHost>

  18. </mycat:schema>

  19. 真正的 writehost:负责写操作的writehost

  20. standby writeHost :和readhost一样,只提供读服务

  21. 当写节点宕机后,后面跟的readhost也不提供服务,这时候standby的writehost就提供写服务,

  22. 后面跟的readhost提供读服务

  23. 测试:

  24. mysql -uroot -p123456 -h 127.0.0.1 -P 8066

  25. show variables like 'server_id';

  26. 读写分离测试

  27. mysql -uroot -p -h 127.0.0.1 -P8066

  28. show variables like 'server_id';

  29. show variables like 'server_id';

  30. show variables like 'server_id';

  31. begin;

  32. show variables like 'server_id';

  33. 对db01 3307节点进行关闭和启动,测试读写操作


MyCAT核心特性——分片(水平拆分)

分片:

对一个"bigtable",比如说t3表

(1)行数非常多,800w

(2)访问非常频繁

分片的目的:

1)将大数据量进行分布存储

2)提供均衡的访问路由

分片策略:

  1. 范围 range 800w 1-400w 400w01-800w

  2. 取模 mod 取余数

  3. 枚举

  4. 哈希 hash

  5. 时间 流水

  6. 优化关联查询

  7. 全局表

  8. ER分片


以上是关于分布式数据库架构mycat的主要内容,如果未能解决你的问题,请参考以下文章

MyCat 启蒙:分布式系统的数据库架构演变

Mycat分布式架构之Mycat精通

Mycat分布式架构之Mycat入门到精通

数据库 | 跟郭导学MySQL:分布式架构-MyCAT

10MySQL:MyCAT 分布式架构

分布式数据库架构mycat