Mysql集群

一、MySQL的集群方案

1. 主从方式-MySQL Replication

原理

写在master,读在slave。
通过重放binlog实现主库数据的异步复制。即当主库执行了一条 sql 命令,那么在从库同样的执行一遍,从而达到主从复制
的效果。在这个过程中, master 对数据的写操作记入二进制日志文件中(binlog),生成一个 log dump 线程,用来给从库的 i/o 线程传 binlog。而从库的 i/o 线程去请求主库的binlog,并将得到的 binlog 日志写到中继日志( relaylog)中,从库的 sql 线程,会读取 relaylog 文件中的日志,并解析成具体操作,通过主从的操作一致,而达到最终数据一致。

目的

实现数据的多点备份(没有故障自动转移和负载均衡)。

优势

相比于单个MySQL,优势有:

  • 从master写数据,从slave读数据,可以起到读写分离的作用,多个从数据库可以做负载均衡。
  • 可以在某个数据库中暂时中断复制进程,来备份数据,从而不影响主数据的对外服务(如果在master上执行备份,需要让master处于readonly的状态,意味着write请求需要阻塞)。

相比于各个集群方案来说,优势有:

  • 主从复制是MySQL自带的,无需借助第三方。
  • 数据被删除,可以从binlog中恢复。
  • 配置较为简单方便。

劣势

  • slave库需要从binlog获取数据并重放,与master库写入数据存在时间延迟,slave库的数据总是滞后于master库。
  • 对master库与slave库之间的网络延迟要求较高,若网络延迟太大,将加重第1点的滞后,造成最终的数据不一致。
  • 单一的主节点挂了,将不能对外提供写服务。

应用场景

这种方式在日常业务中,读操作多于写操作。

2.一主多从-MySQL Fabirc

原理

在MySQL Replication基础上,增加了故障检测与转移,自动数据分片功能。
MySQL Fabirc只有一个主节点,区别是当主节点挂了以后,会从从节点中选择一个来当主节点。

优势

相比于各个集群方案来说,优势有:

  • 主从复制是MySQL自带的,无需借助第三方。
  • 数据被删除,可以从binlog中恢复。
  • 主节点挂了以后,能够自动从从节点中选择一个来当主节点,不影响持续对外提供写服务。

劣势

  • slave库需要从binlog获取数据并重放,与master库写入数据存在时间延迟,slave库的数据总是滞后于master库。
  • 对master库与slave库之间的网络延迟要求较高,若网络延迟太大,将加重第1点的滞后,造成最终的数据不一致。
  • 该集群方式为2014年5月份推出的产品,数据库资历较浅,应用案例不多,网上各种资料相对较少。
  • 事务及查询只支持在同一个分片内,事务中更新的数据不能跨分片,查询语句返回的数据也不能跨分片。
  • 节点故障恢复30秒或更长(采用InnoDB存储引擎的都这样)。

3.cluster集群-MySQL Cluster

问题引出:主机宕机了,有些数据没有传到slave应该怎么处理?

原理

  • 该方式为多主多从结构。MySQL分为2层,一层是mysql shell(每一个对应的IP地址),包含网络、SQL语句的解析、优化等。下一层是存储引擎。
  • Cluster多出了一层NDB存储引擎。
    每一集群中可能有多个机器,每一个节点就是NDB节点,它们之间会进行同步,相当于每一段管理一段数据,没有所谓的主从。

优势

相比于各个集群方案来说,优势有:

  • 主从复制是MySQL自带的,无需借助第三方。
  • 高可用优秀,可达99.999%的可用性,可以自动切分数据,能跨节点冗余数据(其数据集并不是存储某个特定的MySQL实例上,而是被分布在多个Data Nodes中,即一个table的数据可能会被分散在多个物理节点上,任何数据都会在多个Data Nodes上冗余备份。任何一个数据变更操作,都将在一组Data Nodes上同步,以保证数据的一致性)。
  • 可伸缩性优秀,能自动切分数据,方便数据库的水平拓展。
  • 负载均衡优秀,能自动切分数据,方便数据库的水平拓展。
  • 多个主节点,没有单点故障的问题,节点故障恢复通常小于1秒。

劣势

  • 架构模式和原理很复杂。
  • 只能使用存储引擎 NDB ,与平常使用的 InnoDB 有很多明显的差距。比如在事务(其事务隔离级别只支持 Read Committed,即一个事务在提交前,查询不到在事务内所做的修改),外键(虽然最新的 NDB 存储引擎已经支持外键,但性能有问题,因为外键所关联的记录可能在别的分片节点),表限制上的不同,可能会导致日常开发出现意外。
  • 作为分布式的数据库系统,各个节点之间存在大量的数据通讯,比如所有访问都是需要经过超过一个节点(至少有一个 SQL Node 和一个 NDB Node)才能完成,因此对节点之间的内部互联网络带宽要求高。
  • Data Node 数据会被尽量放在内存中,对内存要求大,而且重启的时候,数据节点将数据 load 到内存需要很长时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值