什么时候更喜欢主从?何时更喜欢群集?

时间:2016-06-26 09:16:12

标签: database database-replication database-cluster

我知道有很多关于数据库复制的文章。相信我,我花了一些时间阅读那些文章,包括this所以解释复制的利弊。 This SO文章深入介绍了复制和群集,但没有回答这些简单的问题:

  1. 何时复制数据库,何时进行群集?
  2. 两者可以同时进行吗?如果是的话,每个人的灵感是什么?
  3. 提前致谢。

2 个答案:

答案 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)

  1. 在Master-Salve配置中,写入操作由Master执行,Read由从属执行。因此,所有SQL请求首先到达主服务器并保持请求队列,并且只有在完成写入后才执行读取操作。 Master-Salve配置中存在一个常见问题,我也看到,当队列变得太大而无法被主人控制时,这种架构崩溃,奴隶开始表现得像主人一样。 对于我曾在Cassandra工作的集群,其中请求到达节点(表)并且维护提交散列,其注意到对节点的差异并基于该提交散列更新其他节点。所以这里所有操作都不依赖于单个节点。
  2. 当写入数据不大时,我们使用Master-Salve,否则我们使用群集。 集群空间昂贵且Master-Salve及时,所以您选择的选择取决于您想要保存的内容。

    1. 我们也可以同时使用两者,我在我现在的公司做过这个。 我们将大多数写操作的表移动到Cassandra,我们编写了4个API来对Cassandra中的表执行CRUD操作。每当HTTP请求到来时,它首先命中我们的Web服务器,并且从我们的Web服务器上运行的代码中我们可以决定必须执行哪些操作(在CRUD中),然后我们调用该特定API来更改cassandra数据库。 / LI>