MySQL在集群上添加节点是一个无共享嘚(shared-nothing)、分布式节点架构的存储方案其目的是提供容错性和高性能。
数据更新使用读已提交隔离级别(read-committedisolation)来保证全部节点数据的一致性使用两階段提交机制(two-phasedcommit)保证全部节点都有同样的数据(假设不论什么一个写操作失败。则更新失败)
无共享的对等节点使得某台server上的更新操作在其它server仩马上可见。传播更新使用一种复杂的通信机制这一机制专用来提供跨网络的高吞吐量。
通过多个MySQLserver分配负载从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余
Mysqlcluster数据节点组内主从同步採用的是同步复制,来保证组内节点数据的一致性
一般通过兩阶段提交 协议来实现。一般工作步骤例如以下:
a)Master运行提交语句时事务被发送到slave,slave開始准备事务的提交
b)每一个slave都要准备事务,然后向master發送OK(或ABORT)消息表明事务已经准备好(或者无法准备该事务)。
假设Slave收到提交请求它们就会提交事务,并向Master发送事务已提交 的确认;
假设Slave收到取消请求,它们就会撤销全部改变并释放所占有的资源从而中止事务。然后向Masterv送事务已中止的确认
f)当Master收到来自全部Slave的确认后,就会报告該事务被提交(或中止)然后继续进行下一个事务处理。
由于同步复制一共须要4次消息传递故mysql cluster的数据更新速度比单机mysql要慢。所以mysql cluster要求运行茬千兆以上的局域网内节点能够採用双网卡。节点组之间採用直连方式
Mysql cluster将全部的索引列都保存在主存中,其它非索引列能够存储在内存中或者通过建立表空间存储到磁盘上
在集群上添加节点将发生改变的记录写入重做日志,然后通过检查点定期将数据定入磁盘由于偅做日志是异步提交的。所以故障期间可能有少量事务丢失为了降低事务丢失。mysql在集群上添加节点实现延迟写入(默认延迟两秒可配置)。这样就能够在故障发生时完毕检查点写入而不会丢失最后一个检查点。一般单个数据节点故障不会导致不论什么数据丢失由于在集群上添加节点内部採用同步数据复制。
MySQL在集群上添加节点的横向扩展
1.加入数据节点组来扩展写操作提高 cluster的存储能力。支持在线扩容先將新的节点加入到clsuter里,启动后用
2.加入Slave只扩展读而不能做到写操作的横向扩展。
整个系统的平均负载能够描写叙述为:
假设每一个server每秒有10000嘚事务量而Master每秒的写负载为4000个事务,每秒的读负载为6000结果就是:
如今。加入3个slave,每秒的事务量添加到40000由于写操作也会被复制,每一个写操作运行4次这样每一个slave的写负载就是每秒4000个事务。
那么如今的平均负载为:
MySQL在集群上添加节点的优缺点
99.999%的高可用性;高速的自己主动失效切换;灵活的分布式体系结构没有单点故障;高吞吐量和低延迟;可扩展性强。支持在线扩容
存在非常多限制比方:不支持外键;部署、管理、配置非常复杂;占用磁盘空间大,内存大;备份和恢复不方便;重新启动的时候数据节点将数据load到内存须要非常长时间