zoukankan      html  css  js  c++  java
  • 集群技术(三)MySQL集群深度解析

    什么是MySQL集群

           MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。

          

           数据更新使用读已提交隔离级别(read-committedisolation)来保证全部节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证全部节点都有同样的数据(假设不论什么一个写操作失败。则更新失败)。

          

            无共享的对等节点使得某台server上的更新操作在其它server上马上可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。

      

           通过多个MySQLserver分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。



    架构图




    怎样存储数据

       

        Mysqlcluster数据节点组内主从同步採用的是同步复制,来保证组内节点数据的一致性。

    一般通过两阶段提交 协议来实现。一般工作步骤例如以下:


       a)Master运行提交语句时,事务被发送到slave,slave開始准备事务的提交。
       b)每一个slave都要准备事务,然后向master发送OK(或ABORT)消息。表明事务已经准备好(或者无法准备该事务)。
       c)Master等待全部Slave发送OK或ABORT消息
     
       d)假设Master收到全部 Slave的OK消息,它就会向全部Slave发送提交消息,告诉Slave提交该事务;
    假设Master收到来自不论什么一个Slave的ABORT消息。它就向全部 Slave发送ABORT消息。告诉Slave去中止事务。


       e)每一个Slave等待来自Master的OK或ABORT消息。

             假设Slave收到提交请求,它们就会提交事务,并向Master发送事务已提交 的确认;

             假设Slave收到取消请求,它们就会撤销全部改变并释放所占有的资源,从而中止事务。然后向Masterv送事务已中止的确认。


        f)当Master收到来自全部Slave的确认后,就会报告该事务被提交(或中止),然后继续进行下一个事务处理。

    由于同步复制一共须要4次消息传递,故mysql  cluster的数据更新速度比单机mysql要慢。所以mysql cluster要求运行在千兆以上的局域网内,节点能够採用双网卡。节点组之间採用直连方式。


        Mysql cluster将全部的索引列都保存在主存中,其它非索引列能够存储在内存中或者通过建立表空间存储到磁盘上。

    假设数据发生改变(insert,update,delete等)。mysql 集群将发生改变的记录写入重做日志,然后通过检查点定期将数据定入磁盘。由于重做日志是异步提交的。所以故障期间可能有少量事务丢失。为了降低事务丢失。mysql集群实现延迟写入(默认延迟两秒,可配置)。这样就能够在故障发生时完毕检查点写入。而不会丢失最后一个检查点。一般单个数据节点故障不会导致不论什么数据丢失,由于集群内部採用同步数据复制。


    MySQL集群的横向扩展


        1.加入数据节点组来扩展写操作,提高 cluster的存储能力。支持在线扩容,先将新的节点加入到clsuter里,启动后用


    ALTER ONLINE TABLE table_name REORGANIZE PARTITION
    命令进行数据迁移,把数据平均分配到数据节点上。


        2.加入Slave只扩展读,而不能做到写操作的横向扩展。


    整个系统的平均负载能够描写叙述为:

    AverageLoad=∑readload+ ∑writeload / ∑capacity
    
    假设每一个server每秒有10000的事务量。而Master每秒的写负载为4000个事务,每秒的读负载为6000。结果就是:
    
    AverageLoad=6000+4000/10000=100%


        如今。加入3个slave,每秒的事务量添加到40000。由于写操作也会被复制,每一个写操作运行4次。这样每一个slave的写负载就是每秒4000个事务。

    那么如今的平均负载为:


    AverageLoad=6000+4*4000/ 4*10000=55%



    MySQL集群的优缺点

    长处:

        99.999%的高可用性;高速的自己主动失效切换;灵活的分布式体系结构,没有单点故障;高吞吐量和低延迟;可扩展性强。支持在线扩容


    缺点:


        存在非常多限制,比方:不支持外键;部署、管理、配置非常复杂;占用磁盘空间大,内存大;备份和恢复不方便;重新启动的时候。数据节点将数据load到内存须要非常长时间

  • 相关阅读:
    Android二维码扫描功能的集成开发
    【IMOOC学习笔记】多种多样的App主界面Tab实现方法(四)
    【IMOOC学习笔记】多种多样的App主界面Tab实现方法(三)
    【IMOOC学习笔记】多种多样的App主界面Tab实现方法(二)
    【IMOOC学习笔记】多种多样的App主界面Tab实现方法(一)
    【第一行代码笔记】(一)
    Android viewpager切换到最后一页时,跳转至其他activity
    scrapy爬取天气数据
    nodejs压缩
    Express文件上传
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7221452.html
Copyright © 2011-2022 走看看