MySQL高可用性(MySQL High Availability)解析

发布于:2024-10-13 ⋅ 阅读:(13) ⋅ 点赞:(0)

MHA (Master High Availability Manager) 是一种用于 MySQL 主从复制架构的高可用性解决方案,可以实现自动故障转移,从而减少停机时间并提高系统的可用性。

MHA 的工作原理

MHA 通过监控主库的状态并在检测到主库故障时自动进行故障转移来实现高可用性。以下是 MHA 的主要工作流程:

  1. 监控

    • MHA Manager 节点定期检查主库和从库的状态。
    • 如果检测到主库宕机,MHA Manager 会尝试确定哪个从库是最新的,并将其提升为新的主库。
  2. 选举新的主库

    • MHA 会选择一个最新的从库作为新的主库。
    • 这个选择过程基于从库的二进制日志位置和 GTID(全局事务标识符)。
  3. 数据同步

    • 在提升新的主库之前,MHA 会将其他从库的数据同步到新的主库,以确保所有从库的一致性。
  4. 故障转移

    • MHA 会更新 DNS 记录或 VIP(虚拟 IP 地址),以便客户端能够连接到新的主库。
    • 故障转移完成后,MHA 会通知管理员并记录日志。

MHA 的组件

MHA 主要由以下两个组件组成:

  1. MHA Manager

    • 负责监控主库和从库的状态。
    • 在检测到主库故障时,启动故障转移过程。
    • 通常部署在一个独立的服务器上,但也可以部署在从库上。
  2. MHA Node

    • 部署在每个 MySQL 服务器上(包括主库和从库)。
    • 与 MHA Manager 通信,报告自身的状态。
    • 参与故障转移过程中的数据同步和角色转换。

MHA 的配置步骤

以下是配置 MHA 的基本步骤:

  1. 安装 MHA

    • 在 MHA Manager 和所有 MHA Node 上安装 MHA 软件包。
    • 例如,在 Ubuntu 上可以通过以下命令安装:
      sudo apt-get install mha4mysql-manager mha4mysql-node
      
  2. 配置 SSH 免密登录

    • 确保 MHA Manager 和所有 MHA Node 之间可以免密登录。
    • 使用 ssh-keygen 生成密钥对,并使用 ssh-copy-id 将公钥复制到目标节点。
  3. 配置 MHA Manager

    • 创建 MHA Manager 的配置文件(例如 /etc/mha/app1.cnf)。
    • 示例配置文件内容如下:
      [server default]
      manager_workdir=/var/log/mha
      manager_log=/var/log/mha/manager.log
      user=mha_user
      password=mha_password
      ssh_user=root
      repl_user=repl_user
      repl_password=repl_password
      
      [server1]
      hostname=192.168.1.100
      port=3306
      
      [server2]
      hostname=192.168.1.101
      port=3306
      candidate_master=1
      
      [server3]
      hostname=192.168.1.102
      port=3306
      no_master=1
      
  4. 配置 MHA Node

    • 在每个 MHA Node 上创建一个脚本,用于处理故障转移后的清理工作。
    • 例如,创建 /usr/local/bin/master_ip_failover 脚本:
      #!/bin/bash
      MASTER_IP="192.168.1.200"
      MASTER_PORT="3306"
      CURRENT_MASTER="$1"
      NEW_MASTER="$2"
      
      if [ "$CURRENT_MASTER" = "$NEW_MASTER" ]; then
        exit 0
      fi
      
      /sbin/ip addr del $MASTER_IP/24 dev eth0
      /sbin/ip addr add $MASTER_IP/24 dev eth0
      exit 0
      
    • 确保脚本具有可执行权限:
      chmod +x /usr/local/bin/master_ip_failover
      
  5. 启动 MHA Manager

    • 使用 masterha_check_ssh 检查 SSH 免密登录是否正常。
    • 使用 masterha_check_repl 检查 MySQL 复制是否正常。
    • 启动 MHA Manager:
      masterha_manager --conf=/etc/mha/app1.cnf
      

MHA 的优缺点

优点
  • 自动故障转移:能够在主库故障时自动切换到新的主库,减少了手动干预的需求。
  • 数据一致性:在故障转移过程中,MHA 会尽量保持数据的一致性。
  • 灵活性:支持多种故障转移策略和配置选项。
缺点
  • 复杂性:配置和管理 MHA 需要一定的技术知识和经验。
  • 依赖于复制延迟:如果从库的复制延迟较大,可能会导致数据丢失。
  • 单点故障:MHA Manager 本身可能成为单点故障,需要对其进行冗余设计。