概念
MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统;
不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能;
MySQL Cluster 是一个 Share Nothing 的架构,各个 MySQLServer 之间并不共享任何数据;
背景
各种宕机原因
- 运行环境(35%):磁盘空间耗尽 / 网络
- 性能问题(35%):糟糕的SQL / 服务器bug
- 复制问题(20%):主备数据不一致
- 数据丢失损坏(10%):DROP TABLE / 缺少可用备份
实现高可用
- 提升平均失效时间(MTBF):做好管理,防止故障发生
- 降低平均恢复时间(MTTR):建立冗余,避免单点失效,故障转移
Cluster 组成
- SQL服务节点(SQL层):MySQL Server,不需要提供任何存储引擎的MySQL服务器,实现一个数据库在存储层之上的所有事情
- NDB数据节点(Storage层):实现底层数据存储功能,每一个Cluster 节点保存完整数据的一个 fragment,NDB 节点被组织成一个一个的 NDB Group,一个 NDB Group 实际上就是一组存有完全相同的物理数据的 NDB 节点群
- Manage节点:管理整个 Cluster 集群中各个节点,包括集群配置、控制节点、维护、数据恢复
Cluster 优化
- 节点之间的内部网络带宽要保证足够使用;
- SQL节点和NDB节点的主机性能配比要均衡,不能一方出现瓶颈,一方处于空闲;
- 优化SQL节点和NDB节点的软件配置;
小结
在实际应用中,我们会遇到各种各样的问题导致宕机,为了实现高可用,我们可以提升MTBF和降低MTTR来进行设计,这时,Cluster是一个很好的选择。
MySQL Cluster 的核心在于 NDB Cluster 存储引擎,他不仅对数据进行了水平切分,还对数据进行了跨节点冗余。既解决了数据库的扩展问题,同时也在很大程度上提高了数据库整体可用性。