Mysql集群整理

申明一下:这个CSDN的新版编辑器还不大会玩,导致不少编辑效果不够理想,目录主次区分不够明显,还望各位查看时多多担待.ps:当时做毕业设计的论文要是敢这样主次不分,得被导师骂死不可(偷笑)….

一. 主从复制概述
在实际生产中,数据的重要性不言而喻,提供安全可靠的数据保障是技术与运维部门的职责所在;如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服务器访问压力过大而没有响应或者奔溃,那么服务就不可用了,再比如这台服务器的硬盘坏了,那么整个数据库的数据就全部丢失了,这是重大的安全事故;为了避免服务的不可用以及保障数据的安全可靠性,我们至少需要部署两台或两台以上服务器来存储数据库数据,也就是我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障了,其他服务器依然可以继续提供服务;主从复制是指服务器分为主服务器和从服务器,主服务器负责读和写,从服务器只负责读,主从复制也叫 master/slave,master是主,slave是从;

二. 主从复制架构

这是一主多从架构

这是双主双从架构

说明:一般情况下,具体架构还得看数据量大小来定,数据量规模较小的情况下,使用一主一从的架构的较多.一主一从的弊端就是容易出现单点故障,一旦主库故障便不能进行写入操作,所以,数据量较大时就需要使用处理高并发的思想来解决问题了,比如:一方面可以做分压处理(Nginx集群,MySql集群等等),一方面可以做异步处理,用时间换空间(ActiveMQ消息队列).MySql高并发的处理方案就是多主多从,可以极大地提高数据库的容灾能力.

三. 主从复制原理
1. 当 master 主服务器上的数据发生改变时,则将其改变写入二进制日志文件中;
2. salve 从服务器会在一定时间间隔内对 master 主服务器上的二进制日志进行探测,探测其是否发生过改变;
3. 如果探测到 master 主服务器的二进制日志发生了改变,则开始一个 I/O Thread 请求 master 二进制事件;
4. 同时 master 主服务器为每个 I/O Thread 启动一个dump Thread,用于向其发送二进制事件;
5. slave 从服务器将接收到的二进制事件保存至自己本地的中继日志文件中;
6. salve 从服务器将启动 SQL Thread 从中继日志中读取二进制日志,在本地重放,使得其数据和主服务器保持一致;
7. 最后 I/O Thread 和 SQL Thread 将进入睡眠状态,等待下一次被唤醒;

MySQL主从复制原理图

说明:简单点讲就是:mysql要做到主从复制,就是A服务把自己所做的增删改的操作全都记录在日志中,B数据库就根据这份日志上面的操作在自己身上再操作一遍,这样就实现了主从复制;

如果在不使用中间件mycat的情况下,需要使用spring框架提供的AbstractRoutingDataSource类,通过重写它的方法,可以实现数据源的切换.

四.MyCat中间件管理Mysql集群原理

1.Mycat背景
Mycat的前身是阿里巴巴大名鼎鼎的Cobar,Cobar在开源了一段时间后,就没有再维护了,阿里巴巴放弃了该项目,再加上Cobar在使用过程中也发现存在一些比较严重的问题;2013年有人对Cobar这个项目进行了改进,并命名为Mycat,这就是MyCat的诞生。后来,越来越多的开源爱好者加入到MyCat的开发中,它是完全开源的,不属于任何商业公司。Mycat发展成为一个由众多软件公司的实力派架构师和资深开发人员维护的社区型开源软件, 2014年Mycat首次在上海的《中华架构师》大会上对外宣讲,更多的人参与进来,随后越来越多的项目采用了Mycat;截至2015年11月,超过300个项目采用Mycat,涵盖银行、电信、电子商务、物流、移动应用、O2O的众多领域和公司;MyCat开源组织致力于开发高性能数据库中间件而努力,永不收费,永不闭源,持续推动开源社区的发展;

2.Mycat简介
Mycat是一个开源数据库中间件;是一个实现了MySQL协议的的数据库中间件服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信;Mycat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在Mycat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度。

简单理解就是: Mycat就是一个近似于MySQL的数据库服务器,你可以用连接MySQL的方式去连接Mycat(除了端口不同,默认的Mycat端口是8066而非MySQL的3306),大多数情况下,可以用你熟悉的对象映射框架比如MyBatis操作Mycat。

3.Mycat主要作用

a.数据库的读写分离
也就是通过Mycat可以自动实现写数据时操作主数据库,读数据时操作从数据库;从而实现读写分离,当主出现故障后,mycat自动切换到另一个主上,进而提供高可用的数据库服务,当然我需要部署多主多从的模式.

b.数据库分库分表
分库分表是一个词,不能拆分去理解,它指的是对数据的拆分;分库分表分为两种:水平拆分和垂直拆分.
这里仅凭口述我觉得很难叙述清楚,做了两张简单的示意图来说明一下:

说明: Mycat的水平拆分是根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库服务器上面,这种切分称之为数据的水平切分,也可以称为横向切分.示意图中我按照mycat自动生成的主键id进行了拆分,将其id按照奇数偶数进行拆分了.mycat自身还定义了其他几种水平拆分策略,例如按时间戳拆分等等.

水平拆分的好处就是分压,假设原有数据1000w条操作,只在一张表上进行的话,效率会受到极大地影响,而将原数据表按拆分策略拆分为几张表之后,就可以更快地完成操作(每张表可以分担500w条操作).一般的项目比较少的会使用这个,因为一张表就有数十千万的数据量不多见,像淘宝,京东这类使用这种拆分最适合的.水平拆分适合数据量巨大的单表.当然,水平拆分也要注意一些问题,如下.

使用水平拆分时应注意一下几点:
1.使用水平拆分时只能按照mycat所规定的拆分方式进行拆分,比如:如果你使用UUID或者其他自定义的主键则无法使其自动进行拆分了,会产生矛盾.
2.当然,如果只是进行读写分离操作则无影响,可以使用自定义的主键.

关于水平拆分这里再放个举例:水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,如图:


说明: Mycat的垂直拆分是按照不同的表来切分到不同的数据库服务器之上,这种切可以称之为数据的垂直切分,也可以称为纵向切分;大多数项目的分库分表都会使用这个方案,方便管理.一般是按照业务维度进行数据库表的切分;把相同类型的表放在一个数据库,另一些表放在另一个数据库;也就是在不同库建不同表,把表分散到各个数据库.

相信看到表之后,我不用过多解释,也能明白什么意思,假定每个类型的表都有N张,将他们按照所属类型分别存放到不同的数据库中,这样就是垂直拆分,最常使用的一种数据库分库分表方案.

Mysql集群原理整理相关推荐

  1. Galera:多主同步MySQL集群原理解析

    转:Galera:多主同步MySQL集群原理解析 http://www.liuhaihua.cn/archives/44038.html Galera Cluster是基于MySQL/innodb二次 ...

  2. 谷粒商城 集群篇 (六) --------- MySQL 集群

    目录 前言 一.MySQL 集群原理 1. MySQL-MMM 2. MHA 3. InnoDB Cluster 二.Docker 安装模拟 MySQL 主从复制集群 1. 创建 Master 实例 ...

  3. go连接mysql集群_Mysql集群方案-Go语言中文社区

    MySql集群原理 比如有三台mysql,当java使用数据源连接池进行连接的时候,应该连接哪台呢?其实连接哪台都不行,万一你连接的mysql,突然宕机了,那么数据都查询不到了,其实应该连接mycat ...

  4. MySQL主从集群原理+实战

    目录如下 MySQL主从集群原理+实战 背景 随着公司业务的发展,对数据库的要求越来越高,以前的单机MySQL肯定是玩不转了,亟需升级成MySQL集群,这是一个公司在业务发展时不得不面临的问题 就单机 ...

  5. Mysql集群配置(回顾)

    一.背景 近期,新接手一项目,项目业务系统已上线,但是mysql未完成集群配置,但规划中有相关计划,遂计划在本文中回顾相关Mysql集群配置,也为项目中接下来的集群功能构建思路: 二. 集群架构选用 ...

  6. mysql 集群操作系统_高性能MySQL集群详解(二)

    一.通过Keepalived搭建MySQL双主模式的高可用集群系统 1.MySQL Replication介绍: MySQL Replication是MySQL自身提供的一个主从复制功能,其实也就是一 ...

  7. 热烈庆祝“mysql 集群数据库架构成功”

    坚持了两周,终于在linux下把mysql集群数据库给架起来了!下面简单说明下集群数据库原理 第一:集群数据库分MGM,NDBD,SQL 其中MGM是相当于"中央政府",维持NDB ...

  8. paxos整合mysql_微信开源PhxSQL:高可用、强一致的MySQL集群(转载)

    作者: 陈俊超(junechen@tencent.com),微信后台高级工程师,主要负责微信后台核心模块的分布式架构设计和开发.早期负责微信附近的人,摇一摇,朋友圈,群聊等基础架构.现专注于PhxSQ ...

  9. MySQL集群(一)之主从复制

    前面学完了JDBC,接下来带大家感受一下MySQL集群!其实什么是MySQL集群?简单的说就是一群机器(服务器)的集合,它们连在一起来工作. 其实各种数据库都有自己的集群,常常的多: 我们要学习的就是 ...

  10. MySQL集群节点宕机,数据库脑裂!如何排障?

    作者介绍 王晶,中国移动DBA,负责"移动云"业务系统的数据库集成架构设计.运维.优化等工作:擅长技术领域MySQL,获Oracle颁发的"MySQL DBA" ...

最新文章

  1. command对象提供的3个execute方法是_前阿里P9的Java面试重点3:多线程
  2. 如何筑起第二座“长城”?长城汽车:唯有科技
  3. NopCommerce架构分析之八------多语言
  4. python实现简单的api接口-python中接口的实现实例
  5. LAMP(7限定某个目录禁止解析php、 限制user_agent、 PHP相关配置、PHP扩展模块
  6. 改善Java EE生产支持技能的8种方法
  7. ios程序 调试log宏的添加
  8. matlab相位连续显示,matlab设计复合信号不同频率的初相位
  9. 【Flink】flink zookeeper HA 实现分析
  10. 50道编程小题目之【判断是一年的第几天】
  11. 蓝桥杯 ALGO-21算法训练 装箱问题 java版
  12. java每隔一小时fullgc_JVM菜鸟进阶高手之路六(JVM每隔一小时执行一次Full GC)
  13. MYSQL—— 启动MYSQL 57 报错“The service MYSQL57 failed the most recent........等”的问题解决方式!...
  14. oracle中主键的建立,oracle 建立主键与索引
  15. 爱了爱了!0.052 秒打开 100GB 数据,这个开源库火爆了!
  16. android 手机头提示消息,正确的手机头部声明(android,iphone)
  17. 采购订单模板_金蝶KIS商贸版(采购模块)常见问题汇总
  18. 锐捷EG易网关与NBR路由器命令执行漏洞-2
  19. Java学习路线-1:编程入门
  20. 微信小程序 table表格 PC版本

热门文章

  1. 能测电机温度和振动在线测量工具——温振变送器
  2. html代码快速生成
  3. 模糊综合评价法(FCE)-快速理解
  4. 断点下载神器-RandomAccessFile
  5. GB50311-2007综合布线工程设计规范
  6. java wifi开发教程_WiFi技术
  7. 深度置信网络简要介绍
  8. UiPath官网手把手中文教程
  9. C# 西门子PLC上位机开发环境搭建
  10. keil中L6002U的error原因之一