当前位置: 首页 > 科技观察

MySQL高可用解决方案详解:MySQLMHA架构、原理、应用场景等

时间:2023-03-14 16:11:22 科技观察

MySQL高可用概述,顾名思义,当MySQL主机或服务出现任何故障时,其他主机可以立即替换它,最低要求是保证数据的一致性。因此,MySQL高可用系统需要达到的目标如下:数据一致性保证——这是最基本的,也是前提。如果主备数据不一致,则无法进行切换。当然,这里的一致性也是相对的,但是一定要做到最终一致性。快速故障转移——当master发生故障时,可能是机器故障,也可能是实例故障。需要保证业务能够在最短的时间内切换到备节点,让业务受影响的时间最短。简化日常维护——利用高可用平台自动完成高可用部署、维护、监控等工作,最大程度解放DBA手工操作,提高日常运维效率。统一管理——当副本集较多时,可以统一管理高可用实例信息、监控信息、切换信息等。高可用部署——对现有数据库架构无影响。如果因为高可用部署需要改变或调整数据库架构,成本会增加。MySQLMHAMHA是一位日本MySQL专家,他用Perl编写了一个MySQL故障转移解决方案,以保证数据库系统的高可用性。在宕机的情况下(一般10-30秒),完成故障转移并部署MHA,可以避免主从一致性问题,节省购买新服务器的成本,不影响服务器性能,安装方便,并且不要改变现有的部署架构。MHA(MasterHA)为MySQL主从复制架构提供自动masterfailover功能。当MHA监测到主节点故障时,会提升拥有最新数据的从节点成为新的主节点。在此期间,MHA会从其他从节点获取额外的信息,以避免出现一致性问题。MHA还提供了主节点在线切换功能,即按需切换主从节点。与其他HA软件相比,MHA的目的是维护MySQLReplication中Master库的高可用。它最大的特点是可以修复多个Slave之间的差异日志,最终让所有Slave保持数据一致,然后选择其中一个作为新的master。主人,并将其他奴隶指向它。应用场景在一主多从的环境下,MySQL的主从复制是异步或半同步的。当Master出现故障时,部分(或全部)Slave可能无法获取最新的binlog,导致Slave之间的binlog转发出现偏差。如下图,Master崩溃后,id=102的binlog无法发送给任何slave,id=101的binlog只在save2上,收不到id=100和id=101的binlogonslave3如果要正确恢复:master必须发出ID=102的binlog并消除slave之间的差异,而MHA可以自动处理上述问题。MHA架构MHA架构如下:可以监控master的工作状态,并在机器宕机时进行failover。日志头(logHeader)决定了每个服务器的差异位置。3、将i1-->i2-->X组合起来形成二进制日志。MHA的主要特点是可以自动完成从master的监控到failover的切换。也可以手动执行迁移。故障转移可以在几秒钟内完成。任何奴隶都可以晋升为主人。它具有在多个点调用外部脚本(扩展)的能力,可用于断电或IP地址故障转移。安装和卸载不需要停止当前的mysql进程。MHA本身不会增加服务器的负担,不会降低性能,也不需要增加服务器。它不依赖于存储引擎。它不依赖于二进制文件的格式(无论是语句模式还是行模式)。MHA组件1.管理器工具:–masterha_check_ssh:检查MHA的SSH配置。–masterha_check_repl:检查MySQL复制。–masterha_manager:启动MHA。–masterha_check_status:检查当前MHA运行状态。–masterha_master_monitor:监控master是否宕机。–masterha_master_switch:控制故障转移(自动或手动)。–masterha_conf_host:添加或删除配置的服务器信息。2.节点工具(这些工具通常由MHAManager的脚本触发,无需手动操作)。–save_binary_logs:保存并复制master的二进制日志。–apply_diff_relay_logs:中继日志事件,识别差异并应用于其他从站。–filter_mysqlbinlog:删除不必要的ROLLBACK事件(MHA不再使用此工具)。–purge_relay_logs:清除中继日志(不阻止SQL线程)。3、自定义扩展:-secondary_check_script:通过多条网络路由检查master的可用性;-master_ip_failover_script:更新应用使用的masterip;(需要修改)-shutdown_script:强制关闭master节点;-report_script:发送报告;-init_conf_load_script:加载初始配置参数;-master_ip_online_change:更新master节点的ip地址;(需要修改)总结一下目前MySQL的高可用方案可以在一定程度上实现数据库的高可用,比如MMM、heartbeat+drbd、NDBCluster等,还有MariaDB的GaleraCluster、MySQL5.7.17GroupReplication等这些高可用软件各有优缺点。在选择高可用方案时,主要看业务对数据一致性的要求。但是由于数据库的高可用和高可靠性要求,个人比较推荐使用MHA架构。