MySQL MHA (Master High Availability) 高可用与故障切换

MySQL MHA (Master High Availability) 高可用与故障切换

在数据库系统中,确保数据库的高可用性和故障切换是保障系统稳定性的重要环节。MHA (Master High Availability) 是一种用于 MySQL 主从复制架构下的高可用解决方案,它可以实现自动化的故障切换,确保数据库集群的持续可用。本文将详细介绍 MHA 的工作原理、组件及其配置过程。

1. 什么是 MHA?

MHA 是一套专为 MySQL 设计的高可用环境中的自动故障切换和主从复制管理软件。其主要用于解决 MySQL 单点故障问题,保障 MySQL 在主库宕机时能够快速切换到从库,避免数据丢失和长时间宕机。

MHA 的优势:

  • 快速故障切换:MHA 能够在 0-30 秒内自动完成主从切换。
  • 数据一致性:MHA 能够最大程度上保留主库的二进制日志,确保数据不丢失,保证所有从库的数据与新主库一致。

2. MHA 组件

MHA 主要由两个部分组成:

  • MHA Node(数据节点):运行在每个 MySQL 服务器上,负责管理 MySQL 节点的数据状态。
  • MHA Manager(管理节点):管理多个 MySQL 主从集群,负责检测主库状态并在主库故障时自动进行故障切换。

3. MHA 的工作原理

MHA 的工作流程可以总结为以下步骤:

  1. 保存二进制日志:在主库宕机时,MHA 尽可能从主库保存二进制日志(binlog),确保数据不丢失。
  2. 识别最新数据的从库:通过比较从库的日志,找到含有最新更新的从库。
  3. 应用中继日志:将差异的中继日志应用于其他从库,确保所有从库的数据一致。
  4. 切换主库:提升一个从库为新的主库。
  5. 重建复制关系:将其他从库重新指向新的主库,完成故障切换。

MHA 的特点

  • 自动故障切换时,最大限度保证数据不丢失。
  • 支持一主多从架构,通常至少需要三台服务器(一个主库,两个从库)。

4. MHA 的搭建与配置

以下是 MHA 部署和配置的完整步骤,以实现 MySQL 的高可用和故障切换。

4.1 实验架构

  • MHA Manager:192.168.10.13
  • Master:192.168.10.16
  • Slave1:192.168.10.14
  • Slave2:192.168.10.15
4.2 环境准备
  1. 关闭防火墙和 SELinux

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    
  2. 安装 MySQL:在 Master、Slave1 和 Slave2 节点上安装 MySQL 5.7。

  3. 修改主机名

    hostnamectl set-hostname Master
    hostnamectl set-hostname Slave1
    hostnamectl set-hostname Slave2
    
  4. 修改 MySQL 配置文件 /etc/my.cnf

    • Master 节点

      [mysqld]
      server-id = 1
      log_bin = master-bin
      log-slave-updates = true
      
    • Slave1 节点

      [mysqld]
      server-id = 2
      log_bin = master-bin
      relay-log = relay-log-bin
      relay-log-index = slave-relay-bin.index
      
    • Slave2 节点

      [mysqld]
      server-id = 3
      relay-log = relay-log-bin
      relay-log-index = slave-relay-bin.index
      
  5. 创建软链接

    ln -s /usr/local/mysql/bin/mysql /usr/sbin/
    ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
    
4.3 配置 MySQL 主从复制
  1. MySQL 授权

    grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
    grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';
    flush privileges;
    
  2. 查看主库状态

    show master status;
    
  3. 从库同步操作

    change master to master_host='192.168.10.16', master_user='myslave', master_password='123456', master_log_file='master-bin.000001', master_log_pos=1745;
    start slave;
    
  4. 查看从库同步状态

    show slave status\G
    
  5. 设置从库为只读模式

    set global read_only=1;
    
  6. 测试数据同步
    在主库插入数据并检查从库是否同步。

4.4 安装 MHA 组件
  1. 安装 MHA 依赖

    yum install epel-release -y
    yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
    
  2. 安装 MHA Node 组件
    在所有服务器上安装:

    tar zxvf mha4mysql-node-0.57.tar.gz
    cd mha4mysql-node-0.57
    perl Makefile.PL
    make && make install
    
  3. 安装 MHA Manager 组件(仅 Manager 节点):

    tar zxvf mha4mysql-manager-0.57.tar.gz
    cd mha4mysql-manager-0.57
    perl Makefile.PL
    make && make install
    
4.5 配置 SSH 免密码认证

在所有节点之间配置 SSH 免密码认证,确保 MHA 可以在各个节点之间自由访问。

4.6 配置 MHA
  1. 配置 MHA 脚本和虚拟 IP
    /usr/local/bin/master_ip_failover 中配置虚拟 IP,确保故障切换时能够切换到新的主库。

  2. 配置 MHA 配置文件 /etc/masterha/app1.cnf

    [server default]
    manager_log=/var/log/masterha/app1/manager.log
    master_binlog_dir=/usr/local/mysql/data
    master_ip_failover_script=/usr/local/bin/master_ip_failover
    repl_user=myslave
    repl_password=123456
    user=mha
    ssh_user=root
    
    [server1]
    hostname=192.168.10.16
    port=3306
    
    [server2]
    hostname=192.168.10.14
    candidate_master=1
    check_repl_delay=0
    
    [server3]
    hostname=192.168.10.15
    port=3306
    
  3. 测试 MHA 配置

    • 测试 SSH 无密码认证:

      masterha_check_ssh --conf=/etc/masterha/app1.cnf
      
    • 测试 MySQL 主从连接:

      masterha_check_repl --conf=/etc/masterha/app1.cnf
      
  4. 启动 MHA

    nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
    

5. 故障模拟与恢复

5.1 故障模拟

  1. 在 Master 节点上停止 MySQL

    systemctl stop mysqld
    
  2. 查看 MHA 日志,确认从库接管主库

    tail -f /var/log/masterha/app1/manager.log
    
  3. 查看从库是否接管虚拟 IP

    ifconfig
    

5.2 故障修复

  1. 修复主库
    重启主库并重新加入集群。

  2. 更新 MHA 配置文件并重新启动
    将原主库重新添加到 MHA 配置文件,并重新启动 MHA 管理服务。

总结

MHA 是一种优秀的 MySQL 高可用解决方案,

anager.log


3. **查看从库是否接管虚拟 IP**:
```bash
ifconfig

5.2 故障修复

  1. 修复主库
    重启主库并重新加入集群。

  2. 更新 MHA 配置文件并重新启动
    将原主库重新添加到 MHA 配置文件,并重新启动 MHA 管理服务。

总结

MHA 是一种优秀的 MySQL 高可用解决方案,

能够在主库故障时快速切换并保证数据一致性。通过 MHA 的自动故障切换和主从复制机制,可以确保 MySQL 集群在高并发、高负载的环境下稳定运行,是大规模数据库部署中的重要工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值