MyCAT读写分离及分库分表

第1章 MyCAT分布式系统解决方案

1.1 分布式系统介绍:

分布式系统特性:

1. 透明性:

a) 分布式系统对用户来说是透明的,一个分布式系统在用户面前的表现就像一个传统的单机处理机分时系统,可以让用户不比了解内部结构就可以使用

2. 扩展性:

a) 分布式系统的最大特点就是扩展性,它可以分局需求的增加而扩展,可以通过横向扩展使集群的整体性能得到线性提升,也可以通过纵向扩展单台服务器的性能使服务器的集群的性能得到提升

1.2 MyCAT的设计理念:

mycat的原理中最重要的一个动词就是拦截,它拦截了用户发送过来的sql语句,首先对sql语句组了一些特定的分析,如分片分析,路由分析,读写分析,分离分析,缓存分析,然后将此sql语句发往后端的真实数据库,并将返回结果做适当处理,最终返回给用户

image.png

1.1 MyCAT软件特点:

  1.  遵守mysql原生协议,跨语言,跨数据库的通用中间件代理
    
  2.  基于心跳的自动故障切换,支持读写分离,支持mysql一双主,多从,以及一主多从
    
  3.  有效管理数据源连接,基于数据分库,而不是分表的模式
    
  4.  基于Nio实现,有效管理线程,高并发问题
    
  5.  支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数
    
  6.  支持2表join,甚至基于caltet的多表join
    
  7.  支持通过全局表,ER关系的分片策略,实现了高效的夺标join查询
    
  8.  支持多租户方案
    
  9.  支持分布式事务
    
  10. 支持全局序列号,解决分布式下的主键生成问题

  11. 分片规则丰富,插件化开发,易于扩展

  12. 强大的web,命令行监控

  13. 支持前端作为mysql通用代理,后端JDBC方式支持Oracle,DB2,SQL server,MongoDB

  14. 集群基于zookeeper管理,在线升级,扩容,智能优化,大数据处理

1.2 MyCAT典型应用场景:

  1.  典型的读写分离,此时配置最为简单,支持读写分离,主从切换
    
  2.  分库分表,对于超过1000万的表进行切分,最大支持1000亿级别的单表分片
    
  3.  多租户应用,每个应用一个库,但应用程序只连接MyCAT,从而改造程序本身,实现多租户化
    
  4.  报表系统,借助于Mycat的分表能力,处理大规模报表的统计
    

1.3 数据库的切分方式:

何为数据(系统)切分?

简单来说,就是通过某种特定条件,按照某个维度(或库或表级别)将我们存放在同一个数据库中的数据分散存放到多个数据库主机上以达到分散单库(主机)负载的效果

1.3.1 切分模式:

1.3.2 垂直切分:

一个数据由很多表构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力负载到不同的库上面

a) 优点:拆分后业务清晰,拆分规则明确,数据维护简单,系统之间整合或者扩展容易

b) 缺点:部分业务表无法join,只能通过接口方式解决,提高了系统复杂度,受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高,事务处理复杂

1.1.1 水平切分:

相对于垂直切分,水平切分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库中,每个表中包含一部分数据,简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,即将表中的某些行切分到一个数据库中,而另外的某些行又切分到其他数据库中,主要有分表,分库两种模式

a) 优点:不存在单库大数据,高并发的性能瓶颈,对应用透明,应用端改造较少,按照合理拆分规则拆分,join操作基本避免跨库,提高了系统的稳定性跟负载能力

b) 缺点:拆分规则难以抽象,分片事务一致性难以解决,数据多次扩展难度跟维护量极大,跨库join性能较差


1.1.1 切分的处理难点:

无论哪种切分方式,他们存在的共同缺点有:引入分布事务的问题,跨节点的join问题,跨节点合并排序分页的问题

1.1.2 针对数据源的管理,目前主要有两种思路:

  1.  客户端模式,在每个应用程序模块中配置管理自己需要的一个或者多个数据源,直接访问各个数据库,在模块内完成数据的整合,优点是相对简单,没有性能的损耗
    
  2.  通过中间代理层来统一管理所有数据源,后端数据库集群对前端应用程序透明,优点是比较通用,改造少
    

1.1.3 切分原则:

  1.  尽量不切分,架构是进化而来,数据量也是慢慢增加上来,不是一蹴而就
    
  2.  最大可能的找到最合适的切分难度
    
  3.  由于数据库中间件对数据join实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量少使用多表join
    
  4.  尽量通过数据冗余,分组避免数据跨库的多表join
    
  5.  尽量避免分布式事务
    
  6.  单表切分数据最好在1000万行以内
    

for i in {6…9};do mysqladmin -S /data/530${i}/mysql.sock shutdown ;done

for i in {6…9};do mysqld_safe --defaults-file=/data/530i/my.cnf−−pid−file=/data/530{i}/my.cnf --pid-file=/data/530i/my.cnf−−pid−file=/data/530{i}/530${i}.pid & >/dev/null 2>&1 ; done

第2章 Mycat架构说明:

2.1 基本架构:

标准的读写分离主从模式,主节点负责写操作,从节点负责读操作

1.1 mycat服务器配置高可用:

haproxy+mycat,应用简单,又可以避免mycat服务器的单间故障

1.1 多节点分布式集群:

增加集群中的读节点,进行负载,分担数据库压力,同时,解决mysql高可用的问题,实现故障自动切换;

我们今天配置的就是两套这样的集群

第1章 MyCAT基础架构:

1.1 环境准备:

db01 :

mysql多实例 : 5306-5307-5308-5309

db02:

   mysql多实例 : 6306-6307-6308-6309

说明:相当于一共八台mysql服务器

1.1.1 所有mysql服务器hosts文件进行解析,不然启动mycat时会报错

cat /etc/hosts

127.0.0.1 db02 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

db01 10.0.0.51

db02 10.0.0.52

db03 10.0.0.53

说明:虚拟机资源限制,每台机器共四个实例,其中,两个节点互为主从

1.1.2 所有实例的配置文件:除端口不同外其他均相同

[root@db02 6306]# cat my.cnf

[mysqld]

basedir=/application/mysql

datadir=/data/6306

socket=/data/6306/mysql.sock

log-error=/data/6306/mysql.log

log_bin=/data/6306/mysql-bin

binlog_format=row

skip_name_resolve=1

server_id=6306

port=6306

log_slave_updates=1 强制生成从节点的中继日志

1.2 环境部署:

多实例的部署前面文档有,这里省略

1.2.1 db01和db02初始化数据:

for i in {6…9};do /application/mysql/scripts/mysql_install_db --defaults-file=/data/530i/my.cnf−−user=mysql−−basedir=/application/mysql−−datadir=/data/530{i}/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/530i/my.cnf−−user=mysql−−basedir=/application/mysql−−datadir=/data/530{i} ; done

for i in {6…9};do /application/mysql/scripts/mysql_install_db --defaults-file=/data/630i/my.cnf−−user=mysql−−basedir=/application/mysql−−datadir=/data/630{i}/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/630i/my.cnf−−user=mysql−−basedir=/application/mysql−−datadir=/data/630{i} ; done

1.2.2 启动两台机器上的多实例:

for i in {6…9};do mysqld_safe --defaults-file=/data/530i/my.cnf−−pid−file=/data/530{i}/my.cnf --pid-file=/data/530i/my.cnf−−pid−file=/data/530{i}/530${i}.pid & >/dev/null 2>&1 ;done

1.2.3 检查端口是否开启:

[root@db01 data]# ss -tunlp|grep 530

tcp LISTEN 0 80 :::5306 ::

MyCAT读写分离分库分表相关推荐

  1. Mycat 读写分离+分库分表

    上次进过GTID复制的学习记录,已经搭建好了主从复制的服务器,现在利用现有的主从复制环境,加上正在研究的Mycat,实现了主流分布式数据库的测试 Mycat就不用多介绍了,可以实现很多分布式数据库的功 ...

  2. MySql高可用搭建 + 读写分离 + 分库分表

    Mysql读写分离与分库分表 一.Mysql读写分离解决的问题 二.mysql处理请求运行流程 三.读写分离结构 四.读写分离产生场景 五.读写分离工具 5.1 MyCat 5.2 HAProxy 5 ...

  3. 视频教程-ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表-Java

    ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表 10多年互联网一线实战经验,现就职于大型知名互联网企业,架构师, 有丰富实战经验和企业面试经验:曾就职 ...

  4. @mysql读写分离分库分表

    文章目录 MySQL中间件Atlas 一 atlas简介 二 主要功能 三 使用场景 四 企业读写分离及分库分表其他方案了解 五 安装Atlas 六 配置 七 启动服务 1) mysql库创建账号 八 ...

  5. MySQL搭建主从复制 读写分离 分库分表 MyCat高可用

    主从演示 读写演示 分表演示 主从复制 环境的介绍 系统环境:centos7.0 客户端连接工具:xshell 远程文件传输工具:xftp 服务器: 192.168.126.138(主) 192.16 ...

  6. SpringCloud微服务实战——搭建企业级开发框架(二十七):集成多数据源+Seata分布式事务+读写分离+分库分表

      读写分离:为了确保数据库产品的稳定性,很多数据库拥有双机热备功能.也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器:第二台数据库服务器,主要进行读的操作.   目前有多种方式实现读写分 ...

  7. 数据库主从复制,读写分离,分库分表理解 (数据库架构演变)

    主从复制 主从复制, 主要是针对MySQL数据库的高可用性, 容灾性上面.      是叫做高可用性? 高可用性可以简单的理解为容灾性, 稳定性, 针对故障,风险情况下的处理, 备案, 策略.  指系 ...

  8. Sharding-Jdbc 实现读写分离 + 分库分表,写得太好了!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来自:CSDN,作者:邋遢的流浪剑客 链接:https://blog.csdn.net/qq_40378034/article/de ...

  9. 商城订单模块实战 - 数据库设计、ABA问题处理、读写分离分库分表

    引言 订单系统可以说是整个电商系统中最重要的一个子系统,因此订单数据可以算作电商企业最重要的数据资产.这篇文章我们来看看在我们的商城系统中订单服务是如何实现的,特别是在设计和实现一个订单系统的过程中有 ...

最新文章

  1. skywalking原理_Skywalking系列博客6手把手教你编写 Skywalking 插件
  2. centos安装软件_CentOS 8 和 Ubuntu 18.04 部分软件版本比较
  3. 网络推广运营期间如何提升用户增长水平促进企业稳步推进网络推广
  4. SAP关于销售来自可选工厂的解决方案
  5. [abap] 通过动态参数获取字段数据
  6. C++2 dimension vector
  7. new Grammar in 740 - internal table filter
  8. java 播放.pcm文件,java播发PCM文件
  9. 2020年全球亿万富豪的财富增加了1.9万亿美元
  10. 华为认证计算机英语,hcna考试是英文还是中文
  11. 极路由2hc5761刷华硕固件_[固件] 【原创首发】极二路由HC5761 9012.1.9227s成功刷成openwrt...
  12. 02H5C3-11. Nginx中部署静态网站
  13. java.lang.InstantiationException: com.lch.commder.entity.Car 已解决
  14. 带蒙版的安卓剪辑软件_抖音运营干货,9款手机剪辑软件APP,从此让你用手机轻松玩转剪辑...
  15. python英文字符频率统计_Python中怎样统计英文文本中的字母频次?
  16. 06-播放器-搭建媒体服务器测试videojs
  17. c语言程序设计韦良芬答案,论高职院校《C语言程序设计》的教学改革
  18. 【正则表达式】从字符串中提取数字
  19. 邮件退信RCPT TO command问号
  20. 中国石油大学《计算机文化基础》在线考试题

热门文章

  1. 计算机一级电脑在线模拟,2017全国计算机一级考试模拟试题
  2. 关于Jvav、JQuery
  3. 【linux报错解决】ECDSA host key for X.X.X.X has changed and you have requested strict checking
  4. 从python开始学编程vamei_《从Python开始学编程》作者:Vamei - kindle电子书下载 - 我的书库...
  5. Linux中断申请之request_threaded_irq
  6. 先进的分销管理系统(ADMS)行业调研报告 - 市场现状分析与发展前景预测
  7. 有源电力滤波器APF仿真模型,实验平台,基于dsp28335
  8. 工作与生活之平衡(4)微博病患者
  9. iTerm2 保存登陆密码
  10. 智慧管廊可视化3d监控大屏展示的应用及优势