MySQL集群---①浅谈MySQL集群原理
本文简单介绍一下MySQL集群的基本原理!
一、什么是MySQL集群
MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。
数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。
无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。
通过多个MySQL服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。
二、架构图
三、如何存储数据
1.Mysqlcluster数据节点组内主从同步采用的是同步复制,来保证组内节点数据的一致性。一般通过两阶段提交 协议来实现,一般工作过程如下:
a)Master执行提交语句时,事务被发送到slave,slave开始准备事务的提交。
b)每个slave都要准备事务,然后向master发送OK(或ABORT)消息,表明事务已经准备好(或者无法准备该事务)。
c)Master等待所有Slave发送OK或ABORT消息
如果Master收到所有 Slave的OK消息,它就会向所有Slave发送提交消息,告诉Slave提交该事务;
如果Master收到来自任何一个Slave的ABORT消息,它就向所有 Slave发送ABORT消息,告诉Slave去中止事务。
d)每个Slave等待来自Master的OK或ABORT消息。
如果Slave收到提交请求,它们就会提交事务,并向Master发送事务已提交 的确认;
如果Slave收到取消请求,它们就会撤销所有改变并释放所占有的资源,从而中止事务,然后向Masterv送事务已中止的确认。
e)当Master收到来自所有Slave的确认后,就会报告该事务被提交(或中止),然后继续进行下一个事务处理。
由于同步复制一共需要4次消息传递,故mysql cluster的数据更新速度比单机mysql要慢。所以mysql cluster要求运行在千兆以上的局域网内,节点可以采用双网卡,节点组之间采用直连方式。
疑问: 对cluster进行扩容增加数据节点组时会不会导致数据更新速度降低?
答:不会,数据更新速度会变快。因为数据是分别处理,每个节点组所保存的数据是不一样的,
也能减少锁定。
2.Mysqlcluster将所有的索引列都保存在主存中,其他非索引列可以存储在内存中或者通过建立表空间存储到磁盘上。如果数据发生改变(insert,update,delete等),mysql 集群将发生改变的记录写入重做日志,然后通过检查点定期将数据定入磁盘。由于重做日志是异步提交的,所以故障期间可能有少量事务丢失。为了减少事务丢失,mysql集群实现延迟写入(默认延迟两秒,可配置),这样就可以在故障发生时完成检查点写入,而不会丢失最后一个检查点。一般单个数据节点故障不会导致任何数据丢失,因为集群内部采用同步数据复制。
四、MySQL集群的横向扩展
1.添加数据节点组来扩展写操作,提高 cluster的存储能力。支持在线扩容,先将新的节点加入到clsuter里,启动后用 ALTER ONLINE TABLE table_name REORGANIZE PARTITION 命令进行数据迁移,把数据平均分配到数据节点上。
2.添加Slave仅仅扩展读,而不能做到写操作的横向扩展。
整个系统的平均负载可以描述为:
AverageLoad=∑readload+ ∑writeload / ∑capacity
假设每个服务器每秒有10000的事务量,而Master每秒的写负载为4000个事务,每秒的读负载为6000,结果就是:AverageLoad=6000+4000/10000=100%
现在,添加3个slave,每秒的事务量增加到40000。因为写操作也会被复制,每个写操作执行4次,这样每个slave的写负载就是每秒4000个事务。那么现在的平均负载为:AverageLoad=6000+4*4000/ 4*10000=55%
五、MySQL集群的优缺点
优点:
a) 99.999%的高可用性
b)快速的自动失效切换c)灵活的分布式体系结构,没有单点故障d)高吞吐量和低延迟e)可扩展性强,支持在线扩容缺点:
a)存在很多限制,比如:不支持外键b)部署、管理、配置很复杂c)占用磁盘空间大,内存大d)备份和恢复不方便e)重启的时候,数据节点将数据load到内存需要很长时间本文简单介绍了一下MySQL集群,下面的博客会介绍如何搭建MySQL集群!
MySQL集群---①浅谈MySQL集群原理相关推荐
- 支付宝的数据库是MySQL变种_浅谈MySql的储存引擎(表类型)
浅谈mysql的存储引擎(表类型) 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库, ...
- mysql 类似 nvl,浅谈mysql可有类似oracle的nvl的函数
浅谈mysql可有类似oracle的nvl的函数 要用ifnull,而不是isnull isnull是判断是否为null,返回值是1表示null或者0表示不为空 ifnull等同于oracle的nvl ...
- mysql 安全问题_浅谈MySQL数据库的Web安全问题
数据安全是现在互联网安全非常重要一个环节.而且一旦数据出现问题是不可逆的,甚至是灾难性的. 有一些防护措施应该在前面几个博文说过了,就不再赘述.比如通过防火墙控制,通过系统的用户控制,通过Web应用的 ...
- 谈谈mysql优化_浅谈MySQL SQL优化
本文首发于个人微信公众号<andyqian>,期待你的关注 前言 有好几天没有写文章了,实在不好意思.之前就有朋友希望我写写MySQL优化的文章.我迟迟没有动笔,主要是因为,SQL优化这个 ...
- mysql重传_浅谈 MySQL 中的事务和 ACID
所谓事务(Transaction),就是通过确保成批的操作要么完全执行,要么完全不执行,来维护数据库的完整性.举一个烂大街的例子:A 向 B 转账 1000 元,对应的 SQL 语句为:(没有显式定义 ...
- mysql 主从1146_浅谈mysql主从同步及错误1146处理
在实际使用mysql的时候我们有时要增加一些新的库进行主从同步,所以可以通过修改my.cnf文件以及在主库上添加用户连接权限就可以实现主从同步,而在做主从同步的时候碰到几个问题这里就和大家说一下,至于 ...
- 浅谈mysql主从复制的高可用解决方案
1.熟悉几个组件(部分摘自网络) 1.1.drbd -- DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID&qu ...
- 【转载】运维角度浅谈MySQL数据库优化
运维角度浅谈MySQL数据库优化 2015-06-02 14:22:02 标签:mysql优化 mysql分库分表分区 mysql读写分离 mysql主从复制 原创作品,允许转载,转载时请务必以 ...
- 浅谈 MySQL 子查询及其优化
2019独角兽企业重金招聘Python工程师标准>>> 使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动 ...
- MySQL子查询的优缺点_浅谈mysql的子查询
浅谈mysql的子查询 mysql的子查询的优化一直不是很友好,一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一,你可以点击这里 ,这里来获得一些信息,mysql在处理子查询的时候,会 ...
最新文章
- 非常简单的截图小工具
- 线程 synchronized锁机制
- HTML 5 Canvas 参考手册
- php模板意思,php中的 是什么意思
- Spring Boot 2.1.5(27)---WebFlux REST API 全局异常处理 Error Handling
- Codeforces Beta Round #1 B. Spreadsheets 模拟
- paip.判断字符是否中文与以及判读是否是汉字uapi python java php
- Linux教程+操作系统教程 -- 大全
- 五级流水线CPU之低功耗设计 (一) :Bypassing(旁路)
- pl/sql Developer 1303注册码
- Building wheels for collected packages: mysqlclient Building wheel for mysqlclient (setup.py) ...
- 蒙特梭利三段卡---种子结构三段卡
- python之global关键字
- mybatis中实现动态SQL
- 2021 上海科技大学信息学院SIST夏令营经验+记录贴
- Android 9.0系统源码_SystemUI(六)滑动锁屏的创建
- Python 的 AIML
- vagrant启动虚拟机Stderr: VBoxManage.exe: error: Call to WHvSetupPartition failed: ERROR_SUCCESS (Last=0xc
- pat basic 1100 校庆
- Python还原CryptoJs_DES_CBC模式_js逆向学习