mysql四种高可用方案整理

1,MySQL Cluster

实际上是在无共享存储设备的情况下实现的一种完全分布式数据库系统,其主要通过NDB Cluster(简称NDB)存储引擎来实现。所有数据和索引都必须装载在内存中才能够正常运行,但是最新的MySQL Cluster 版本已经可以做到仅仅将所有索引和索引数据装载在内存中即可,实际的数据可以不用全部装载到内存中。

mysql cluster适合的场景为:

具有非常高的并发需求,对可用性要求较高,或是数据需要分片的遵守SQL标准的传统RDBMS系统。

 Mysql-cluster的优缺点                                                                        
优点:                                                                                 
a)         99.999 %的高可用性                                                           
b)         快速的自动失效切换
c)         灵活的分布式体系结构,没有单点故障
d)         高吞吐量和低延迟
e)         可扩展性强,支持在线扩容
缺点:
a)         存在很多限制,比如:不支持外键,数据行不能超过8K(不包括BLOB和text中的数据)
b)         部署、管理、配置很复杂
c)         占用磁盘空间大,内存大
d)         备份和恢复不方便
e)         重启的时候,数据节点将数据load到内存需要很长时间。

2,Lvs+Keepalived+Mysql单点写入主主同步高可用方案:

lvs提供负载均衡,keepalived作为故障转移,提高系统的可用性。但是一般的mysql高可用为了实现mysql数据的一致性,一般都是采用单点写入。

适合的场景:

适用于只有两台数据库服务器并且还没有实现数据库的读写分离的情况,读和写都配置VIP。这个方案能够便于单台数据库的管理维护以及切换工作。比如进行大表的表结构更改、数据库的升级等都是非常方便的。

优点:
 安装配置简单,实现方便,高可用效率好,可以根据服务与系统的可用性多方面进行切换。
 可以将写VIP和读VIP分别进行设置,为读写分离做准备。
 扩展不是很方便。
 可以在后面添加多个从服务器,并做到负载均衡。
缺点:
 在启动或者恢复后会立即替换掉定义的sorry_server,因此如果要实现指定条件替换或者不替换需要通过其他方式实现,比如:临时更改mysql的端口等。
 切换需要1s左右的时间。,

3,Heartbeat高可用Mysql主主同步方案:

 Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证。默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自动切换到备机上继续提供服务,当主数据库修复完毕,又将服务切回继续由主mysql提供服务。

适用场景:
该方案适合只有两台数据库的情况,访问量不大,不需要实现读写分离的情况
优点:
配置简单、,可配置主机恢复后是否切换回master。不存在单点故障。
缺点:
当mysql服务挂掉或者不可用的情况下不能进行自动切换,需要通过crm模式实现或者额外的脚本实现(比如shell脚本监测到master的mysql不可用就将主上的heartbeat停掉,这样就会切换到backup中去)。
默认启动以及切换后的backup话mysql不会启动起来,因此这对于mysql复制是很不利的。因此需要做好监控,发生切换以后需要手动去启动。或者mysql之间不使用复制,而是用共享存储或者DRBD,这样能解决这个问题。 不方便扩展。 可能会发生脑裂问题

4,MMM高可用mysql方案

MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器),MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,更可贵的是如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。

适用场景:
MMM的适用场景为数据库访问量大,业务增长快,并且能实现读写分离的场景。
优点:安全性、稳定性高,可扩展性好,高可用,当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。
缺点:至少三个节点,对主机的数量有要求,需要实现读写分离,对程序来说是个挑战。

你可能感兴趣的:(mysql四种高可用方案整理)