zoukankan      html  css  js  c++  java
  • 【MySQL】MySQL高可用架构之MHA

    一、关于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角色部署

    MHA 服务有两种角色,MHA Manager(管理节点)和MHA Node(数据节点):
    MHA Manager:通常单独部署在一台独立的机器上或者直接部署在其中一台slave上(不建议后者),管理多个master/slave集群,每个master/slave集群称作一个application;其作用有二:
    (1)master自动切换及故障转移命令运行
    (2)其他的帮助脚本运行:手动切换master;master/slave状态检测
    MHA node:运行在每台MySQL服务器上(master/slave/manager),它通过监控具备解析和清理logs功能的脚本来加快故障转移。其作用有:
    (1)复制主节点的binlog数据
    (2)对比从节点的中继日志文件
    (3)无需停止从节点的SQL线程,定时删除中继日志
     

    目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。

    我们自己使用其实也可以使用1主1从,但是master主机宕机后无法切换,以及无法补全binlog。master的mysqld进程crash后,还是可以切换成功,以及补全binlog的。

    官方介绍:https://code.google.com/p/mysql-master-ha/

    下图展示了如何通过MHA Manager管理多组主从复制。可以将MHA工作原理总结为如下:

    (1)从宕机崩溃的master保存二进制日志事件(binlog events);

    (2)识别含有最新更新的slave;

    (3)应用差异的中继日志(relay log)到其他的slave;

    (4)应用从master保存的二进制日志事件(binlog events);

    (5)提升一个slave为新的master;

    (6)使其他的slave连接新的master进行复制;

    详细过程:

    1.配置文件检查阶段,这个阶段会检查整个集群配置文件配置

    2.宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作(这个我这里还没有实现,需要研究)

    3.复制dead maste和最新slave相差的relay log,并保存到MHA Manger具体的目录下

    4.识别含有最新更新的slave

    5.应用从master保存的二进制日志事件(binlog events)

    6.提升一个slave为新的master进行复制

    7.使其他的slave连接新的master进行复制

    三、MHA组件

    (1)、 Manager工具:
    – 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 : 添加或删除配置的server信息。
     
    (2)、 Node工具(这些工具通常由MHAManager的脚本触发,无需人手操作)。
    – save_binary_logs : 保存和复制master的二进制日志。
    – apply_diff_relay_logs : 识别差异的中继日志事件并应用于其它slave。
    – filter_mysqlbinlog : 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)。
    – purge_relay_logs : 清除中继日志(不会阻塞SQL线程)。
     
    (3)、自定义扩展:
    -secondary_check_script:通过多条网络路由检测master的可用性;
    -master_ip_failover_script:更新application使用的masterip; (需要修改)
    -shutdown_script:强制关闭master节点;
    -report_script:发送报告;
    -init_conf_load_script:加载初始配置参数;
    -master_ip_online_change:更新master节点ip地址;(需要修改)
     
    出处:
     
  • 相关阅读:
    5、打断点(bpu)
    4、post请求(json)
    3、get请求(url详解)
    2、接口测试(Composer)
    1、Fiddler基础
    常规测试、安全测试、渗透测试-区别
    记录一次python的mysqlclient依赖库报错问题
    airflow当触发具有多层subDAG的任务的时候,出现[Duplicate entry ‘xxxx’ for key dag_id]的错误的问题处理
    Python3并发写文件
    python hash 每次调用结果不一样
  • 原文地址:https://www.cnblogs.com/wangzhongqiu/p/11019221.html
Copyright © 2011-2022 走看看