Linux服务器开发之MySQL 集群方案( 二 )


文章插图
 

Linux服务器开发之MySQL 集群方案

文章插图
 
MySQL Fabirc
MySQL Fabirc , 是 mysql 官方提供的 。这是在 MySQL Replication 的基础上 , 增加了故障检测
与转移 , 自动数据分片功能 。不过依旧是一主多从的结构 , MySQL Fabirc 只有一个主节点 , 
区别是当该主节点挂了以后 , 会从从节点中选择一个来当主节点 。
Linux服务器开发之MySQL 集群方案

文章插图
 
就各个集群方案来说 , 其优势为:
1. mysql 官方提供的工具 , 无需第三方插件 。
2. 数据被删除 , 可以从 binlog 日志中恢复 。
3. 主节点挂了以后 , 能够自动从从节点中选择一个来当主节点 , 不影响持续对外提供写服
务 。
其劣势为:
1. 从库要从 binlog 获取数据并重放 , 这肯定与主库写入数据存在时间延迟 , 因此从库的数
据总是要滞后主库 。
2. 对主库与从库之间的网络延迟要求较高 , 若网络延迟太高 , 将加重上述的滞后 , 造成最
终数据的不一致 。
3. 2014 年 5 月推出的产品 , 数据库资历较浅 , 应用案例不多 , 网上各种资料相对较少 。
4. 事务及查询只支持在同一个分片内 , 事务中更新的数据不能跨分片 , 查询语句返回的数
据也不能跨分片 。
5. 节点故障恢复 30 秒或更长(采用 InnoDB 存储引擎的都这样) 。
MySQL Cluster
MySQL 集群(MySQL Cluster)也是 mysql 官方提供的 。
Linux服务器开发之MySQL 集群方案

文章插图
 
MySQL Cluster 是多主多从结构的
就各个集群方案来说 , 其优势为:
1.
mysql 官方提供的工具 , 无需第三方插件 。
2.
高可用性优秀 , 99.999%的可用性 , 可以自动切分数据 , 能跨节点冗余数据(其数据集并
不是存储某个特定的 MySQL 实例上 , 而是被分布在多个 Data Nodes 中 , 即一个 table 的
数据可能被分散在多个物理节点上 , 任何数据都会在多个 Data Nodes 上冗余备份 。任何
一个数据变更操作 , 都将在一组 Data Nodes 上同步 , 以保证数据的一致性) 。
3.
可伸缩性优秀 , 能自动切分数据 , 方便数据库的水平拓展 。
4.
负载均衡优秀 , 可同时用于读操作、写操作都都密集的应用 , 也可以使用 SQL 和 NOSQL
接口访问数据 。
5.
多个主节点 , 没有单点故障的问题 , 节点故障恢复通常小于 1 秒 。
其劣势为:
1. 架构模式和原理很复杂 。
2. 只能使用存储引擎 NDB  , 与平常使用的 InnoDB 有很多明显的差距 。比如在事务(其
事务隔离级别只支持 Read Committed , 即一个事务在提交前 , 查询不到在事务内所做的
修改) , 外键(虽然最新的 NDB 存储引擎已经支持外键 , 但性能有问题 , 因为外键所关
联的记录可能在别的分片节点) , 表现制上的不同 , 可能会导致日常开发出现意外 。
3. 作为分布式的数据库系统 , 各个节点之间存在大量的数据通讯 , 比如所有访问都是需要
经过超过一个节点(至少有一个 SQL Node 和一个 NDB Node)才能完成 , 因此对节点之
间的内部互联网络带宽要求高 。
4. Data Node 数据会被尽量放在内存中 , 对内存要求大 , 而且重启的时候 , 数据节点将数
据 load 到内存需要很长时间 。
第三方集群方案
MMM
MMM(Master Replication Manager for MySQL)是双主多从结构 , MMM 是在 MySQL Replication
的基础上 , 对其进行优化 。这是 google 的开源项目 , 使用 Perl 语言来对 MySQL Replication
做扩展 , 提供一套支持双主故障切换和双主日常管理的脚本程序 , 主要用来监控 mysql 主主
复制并做失败转移 。
Linux服务器开发之MySQL 集群方案

文章插图
 
注意:这里的双主节点 , 虽然叫做双主复制 , 但是业务上同一时刻只允许对一个主进行写入 , 


推荐阅读