前言
单节点mysql存在的常见问题
mysql集群的好处
针对上面单节点mysql存在的常见问题对应,mysql集群有以下几点好处:
主从架构
- MySQL主从复制原理
- 异步复制(Asynchronous replication)
- 全同步复制(Fully synchronous replication)
- 半同步复制(Semisynchronous replication)
组复制
共享存储(shared storage)
mysql集群方案
MySQL Replication
主要目的是实现数据的多点备份,没有故障自动转移和负载均衡。
MySQL Fabric
在MySQL Replication的基础上,增加了故障检测与转移,自动数据分片功能。
MySQL Fabric只有一个主节点,区别是当该主节点挂了以后,会从从节点中选择一个来当主节点。
MySQL NDB Cluster
通过使用 NDB 存储引擎实时备份冗余数据,实现数据库的高可用性和数据一致性。
由于 MySQL Cluster 架构复杂,部署费时,通常需要 DBA 几个小时的时间才能完成搭建,而依靠 MySQL Cluster Manager 只需一个命令即可完成,但 MySQL Cluster Manager 是 收费的。并且业内资深人士认为 NDB 不适合大多数业务场景,而且有安全问题。因此,使用的人数较少。
MGR(MySQL Group Replication)
基于原生复制及 paxos 协议的组复制技术,并以插件的方式提供,提供一致数据安全保证。
心跳检测+SAN共享存储 (heartbeat + SAN)
SAN(Storage Area Network):共享存储,主库从库用的一个存储。SAN的概念是允许存储设施和解决器(服务器)之间建立直接的高速连接,通过这种连接实现数据的集中式存储。
心跳检测+DRDB磁盘复制(heartbeat + DRBD)
DRBD(Distributed Replicated Block Device):是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
DRDB磁盘复制:这是linux内核板块实现的块级别的同步复制技术。 通过各主机之间的网络,复制对方磁盘的内容。
MMM (Master Replication Manager for MySQL)
MMM是在MySQL Replication的基础上,对其进行优化。
MMM是一套支持双主故障切换和双主日常管理的脚本程序,主要用来监控mysql主主复制并做失败转移。
这里的双主节点,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,其他的 slave 提供读服务,以加速在主主切换时刻备选主的预热。
MMM 是 Google 技术团队开发的一款比较老的高可用产品,在业内使用的并不多,社区也不活跃, Google 很早就不再维护 MMM 的代码分支。
MHA (Master High Availability)
MHA是在MySQL Replication的基础上,对其进行优化。
MHA(Master High Availability)在 MySQL 高可用方面是一个相对成熟的解决方案,是一 套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。在 MySQL 故障切 换过程中,MHA 能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
提供更多的主节点,但是缺少VIP(虚拟IP),需要配合keepalived等一起使用。
要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。
Lvs+Keepalived+ MySQL
MySQL 主主复制是集群的基础,每个节点都是 Master,均可对外提供服务。
Lvs服务器提供了负载均衡的作用,将用户请求分发到Real Server,一台 Real Server故障并不会影响整个集群的。Keepalived搭建主备Lvs服务器,避免了Lvs服务器的单点故障,出现故障时可以自动切换到正常的节点。
HaProxy+Keepalived+ MySQL
Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件,适用于负载大的Web站点;运行在硬件上可支持数以万计的并发连接的连接请求;
Galera Cluster
Galera Cluster是集成了Galera插件的 MySQL 集群,是一种新型的,数据不共享的,高度冗余的高可用方案。Galera 本身具有多主特性,所以 Galera Cluster 也就是 Multi-Master 的 集群结构。
基于Galera的高可用方案主要有MariaDB Galera Cluster, Mysql Galera Cluster 和 Percona XtraDB Cluster(简称PXC),目前PXC用的会比较多一些。
图中有三个实例,组成了一个集群,而这三个节点与普通主从架构不同,都可作为主节点,三个节点对等,这种一般称为 Multi-Master 架构,当有客户端要写入或读取数据时,随便连接哪个实例都一样,读到的数据相同,写入某一节点后,集群自己会将新数据同步到其他节点上,这种架构不共享任何数据,是一种高冗余架构。
关于PXC这边不做详细说明,因为比较我常用,所以打算另外开篇进行说明,并结合实际部署操作。