MySQL集群问题

5
我已经阅读了大量的MySQL Cluster文档和一些教程,但仍有一些不清楚的问题,其中目前最重要的是:
  1. 当数据节点重新启动(崩溃并再次上线)时,它的数据是否仍然可用?更新/添加是否会像平常一样进行?它会“同步”吗?
  2. 群集比独立运行更快吗?特别是,我多次更新行,但每次只更新一行,这意味着网络延迟可能会影响性能。是否有任何模式可以遵循以使事情更快,例如添加更多SQL节点或添加更多数据节点?
关于问题#2,行的更新采用以下语法:
UPDATE db_accounts.tbl_items SET items=items+%lld WHERE id_account=%u

"

"id_account"是一个索引(唯一)。

"
2个回答

8
MySQL Cluster是一种内存数据库(尽管某些列可以存储在磁盘上,但索引列不行)。如果插头被拔掉,您的数据将会丢失。当一个节点重新加入集群时,恢复过程是从一个存活节点中获取它所丢失的数据(需要节点之间良好快速的链接),然后仔细地应用复制事件,直到它追上并能够积极参与。如果有最近的备份可用,则可以从备份中重建,而不是从另一个节点,但原则是相同的:节点必须从头开始重新填充数据。
MySQL Cluster基本上是一个分布式哈希表。持有特定数据行的NDB节点是通过应用于主键的哈希算法确定的。通过增加节点来提高性能,假设您的数据在节点之间很好地分布。如果查询需要触及多个节点(例如复杂的连接),则性能可能会受到严重影响,但是对于根据其主键检索特定行的操作来说,速度非常快。
显然,考虑到节点是分布式的,缓慢或拥挤的网络将严重影响性能。

非常感谢,我认为那就可以了! - Poni
特定数据行所在的 NDB 节点是通过对主键应用哈希算法来确定的。但是,这些行不会被复制到其他 NDB 节点吗? - metdos

5
即使您的MySQL Cluster表是内存型的,默认情况下任何写入操作都会异步进行检查点到磁盘(可以在每张表上关闭此功能)。如果整个集群失败(数据中心停电),那么当您重新启动它时,数据将从这些磁盘检查点中恢复。缺点是由于它们是异步创建的,您可能会丢失少量更新。如果单个数据节点失败,则除了从其本地磁盘副本中恢复外,它还通过应用来自其对等数据节点的最新更新来赶上进度。为了进一步提高数据的高可用性,您可以使用MySQL异步复制到第二个站点(如果需要可以位于世界的另一端)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接