我知道有很多关于数据库复制的文章。相信我,我花了一些时间阅读那些文章,包括this所以解释复制的利弊。 This SO文章深入介绍了复制和群集,但没有回答这些简单的问题:
提前致谢。
答案 0 :(得分:5)
MySQL目前支持两种不同的解决方案,用于创建高可用性环境并实现多服务器可扩展性。
MySQL复制
第一种形式是复制,MySQL自MySQL版本3.23以来一直支持复制。 MySQL中的复制目前是作为使用逻辑日志传送后端的异步主从设置实现的。
主从设置意味着指定一个服务器充当主服务器。然后需要接收所有写入查询。然后,主服务器执行并记录查询,然后将其发送到从服务器以执行,从而在所有复制成员中保留相同的数据。
复制是异步的,这意味着当主服务器执行更改时,不保证从服务器具有数据。通常,复制将尽可能实时。但是,无法保证更改传播到从站所需的时间。
可以出于多种原因使用复制。一些更常见的原因包括可伸缩性,服务器故障转移和备份解决方案。
由于您现在可以在任何从站上执行SELECT查询,因此可以实现可伸缩性。但是,写入语句通常不会得到改进,因为必须在每个复制成员上进行写入。
使用外部监控实用程序可以相当轻松地实现故障转移,该实用程序使用心跳或类似机制来检测主服务器的故障。 MySQL目前不进行自动故障转移,因为逻辑通常非常依赖于应用程序。请记住,由于复制是异步的,因此可能并非所有在主服务器上完成的更改都会传播到从服务器。
即使在较慢的连接上,MySQL复制也能很好地工作,并且连接不连续。它还可以在不同的硬件和软件平台上使用。可以对大多数存储引擎使用复制,包括MyISAM和InnoDB。
MySQL群集
MySQL Cluster是一个无共享的分布式分区系统,它使用同步复制来维护高可用性和性能。
MySQL Cluster是通过一个名为NDB Cluster的独立存储引擎实现的。此存储引擎将自动跨多个数据节点分区数据。数据的自动分区允许并行执行的查询。读取和写入都可以这种方式进行缩放,因为写入可以分布在许多节点上。
在内部,MySQL Cluster还使用同步复制来从系统中删除任何单点故障。由于始终保证两个或更多节点具有数据片段,因此至少一个节点可以在不对运行事务产生任何影响的情况下发生故障。自动处理故障检测,同时删除对应用程序透明的死节点。节点重启后,它将自动重新集成到集群中,并尽快开始处理请求。
目前存在许多限制,在决定MySQL Cluster是否适合您的情况时,必须牢记这一点。
目前,MySQL Cluster中存储的所有数据和索引都存储在整个群集的主内存中。这确实会根据群集中使用的系统限制数据库的大小。
MySQL Cluster旨在用于内部网络,因为延迟对响应时间非常重要。因此,无法在较宽的地理距离上运行单个群集。此外,虽然MySQL Cluster可以在商用网络设置上工作,但为了获得最高性能,可以使用特殊的群集互连。
答案 1 :(得分:2)
当写入数据不大时,我们使用Master-Salve,否则我们使用群集。 集群空间昂贵且Master-Salve及时,所以您选择的选择取决于您想要保存的内容。