MYSQL的高可用方案

1. 双节点主从 + keepalived/heartbeat

特点:简单

缺点:一个主节点,可能会是写入的瓶颈

一致性:数据的一致性需要通过原生半同步机制保证,如果退化成异步复制,会有丢失数据风险。

两个节点可以采用简单的一主一从模式,或者双主模式,并且放置于同一个VLAN中,

在master节点发生故障后,利用keepalived/heartbeat的高可用机制实现快速切换到slave节点。

 

注意点:

  • 采用keepalived作为高可用方案时,两个节点最好都设置成BACKUP模式,避免因为意外情况下(比如脑裂)相互抢占导致往两个节点写入相同数据而引发冲突;

  • 把两个节点的auto_increment_increment(自增起始值)和auto_increment_offset(自增步长)设成不同值。其目的是为了避免master节点意外宕机时,可能会有部分binlog未能及时复制到slave上被应用,从而会导致slave新写入数据的自增值和原先master上冲突了,因此一开始就使其错开;当然了,如果有合适的容错机制能解决主从自增ID冲突的话,也可以不这么做;

  • slave节点服务器配置不要太差,否则更容易导致复制延迟。作为热备节点的slave服务器,硬件配置不能低于master节点;

  • 如果对延迟问题很敏感的话,可考虑使用MariaDB分支版本,或者直接上线MySQL 5.7最新版本,利用多线程复制的方式可以很大程度降低复制延迟;

  • 对复制延迟特别敏感的另一个备选方案,是采用semi sync replication(就是所谓的半同步复制)或者后面会提到的PXC方案,基本上无延迟,不过事务并发性能会有不小程度的损失,需要综合评估再决定;

  • keepalived的检测机制需要适当完善,不能仅仅只是检查mysqld进程是否存活,或者MySQL服务端口是否可通,还应该进一步做数据写入或者运算的探测,判断响应时间,如果超过设定的阈值,就可以启动切换机制;

  • keepalived最终确定进行切换时,还需要判断slave的延迟程度。需要事先定好规则,以便决定在延迟情况下,采取直接切换或等待何种策略。直接切换可能因为复制延迟有些数据无法查询到而重复写入;

  • keepalived或heartbeat自身都无法解决脑裂的问题,因此在进行服务异常判断时,可以调整判断脚本,通过对第三方节点补充检测来决定是否进行切换,可降低脑裂问题产生的风险。(脑裂: keepalived检查不到主节点,用户方可以)

 

2. 多节点主从+MHA

多节点主从,可以采用一主多从,或者双主多从的模式。

拥有多个主多个从节点的时候,可以采用MHA来管理整个集群,最新的MHA也已支持MySQL 5.6的GTID模式了,是个好消息。

 

关于MHA

MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过与其它从节点获取额外信息来避免一致性方面的问题。MHA还提供了master节点的在线切换功能,即按需切换master/slave节点。

相较于其它HA软件,MHA的目的在于维持MySQL Replication中Master库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。

 

MHA的优势很明显:

  • 开源,用Perl开发,代码结构清晰,二次开发容易;

  • 方案成熟,故障切换时,MHA会做到较严格的判断,尽量减少数据丢失,保证数据一致性;

  • 提供一个通用框架,可根据自己的情况做自定义开发,尤其是判断和切换操作步骤;

  • 支持binlog server,可提高binlog传送效率,进一步减少数据丢失风险。

不过MHA也有些限制

  • 需要在各个节点间打通ssh信任,这对某些公司安全制度来说是个挑战,因为如果某个节点被黑客攻破的话,其他节点也会跟着遭殃;

  • 自带提供的脚本还需要进一步补充完善,当然了,一般的使用还是够用的。

 

3. MYSQL代理

没有成熟的的解决方案

 

4. vip+共享存储

通过共享存储来保持数据一致性

 

其他:

1 程序双写:灵活,集群间相互切换快。

a. 同步双写

数据一致性高,影响性能,不适合多个集群。

b. 异步双写

数据一致性差,性能高,适合多个集群。

举例:购物车系统。

优点: 写入数据立马能知道集群故障

缺点: 与业务逻辑耦合严重

2. 底层存储数据复制

优点:数据一致性高

缺点:主从切换不灵活,复制节点出问题后,恢复慢。

 

发布了11 篇原创文章 · 获赞 1 · 访问量 7147
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览