mha高可用
发布日期:2025-04-14 01:21:47 浏览次数:9 分类:精选文章

本文共 4917 字,大约阅读时间需要 16 分钟。

MHA简介

MHA(MySQL高可用)是一个为MySQL高可用性环境设计的开源工具套件,专注于在MySQL主从复制环境下实现故障切换和主从状态提升。通过MHA,数据库在故障发生时可以在0-30秒内自动切换主库,并在切换过程中最大限度地保障数据库的一致性,从而实现真正意义上的高可用性。


MHA高可用工作流程

MHA的高可用工作流程主要包含以下几个关键步骤:

  • 复制主库的binlog日志

    MHA会将主库的二进制日志(binlog)复制到从库中。

  • 找出最全的relaylog日志

    在从库中,MHA会识别并找出拥有最完整relaylog日志的那个从库。

  • 同步最全的relaylog日志到所有从库

    将找到的最全relaylog日志内容同步到所有从库中,完成第一次数据同步。

  • 提升最全的从库为主库

    将之前最全的那个从库配置为新的主库。

  • 将复制的binlog日志添加到新主库中

    将主库的binlog日志信息添加到新提升的主库中。

  • 重定向其他从库到新主库

    将所有其他从库重新指向新的主库,继续主从复制。


  • MHA工具包

    MHA工具包分为两个部分:Manager工具包Node工具包

    Manager工具包

    Manager工具包主要用于管理和监控MHA环境,提供以下功能:

    • masterha_check_ssh:检查SSH配置是否正常。
    • masterha_check_repl:检查MySQL复制状态。
    • masterha_check_status:检测MHA运行状态。
    • masterha_master_monitor:监控主库是否宕机。
    • masterha_manager:启动或停止MHA。
    • masterha_master_switch:控制故障转移(自动或手动)。
    • masterha_conf_host:添加或删除服务器信息。
    • masterha_secondary_check:尝试建立TCP连接到远程服务器。
    • masterha_stop:停止MHA。

    Node工具包

    Node工具包用于从库节点上执行特定操作,包括:

    • save_binary_logs:将主库的binlog日志复制到从库。
    • apply_diff_relay_logs:识别和处理中继日志中的差异事件。
    • filter_mysqlbinlog:清除binlog中不必要的ROLLBACK事件。
    • purge_relay_logs:清除中继日志。

    搭建MHA一主双从实验环境

    环境配置

    实验环境包含三台服务器配置:

    主机名 IP地址(NAT) 描述
    mysql-db01 192.168.50.149 系统:CentOS 6.5,MySQL 5.6
    mysql-db02 192.168.50.151 系统:CentOS 6.5,MySQL 5.6
    mysql-db03 192.168.50.152 系统:CentOS 6.5,MySQL 5.6

    主机名映射

    /etc/hosts文件中添加以下主机名映射:

    127.0.0.1 localhost localhost.localdomain localhostlocalhostlocalhost4 localhost4.localdomain localhost4localhost6 localhost6.localdomain localhost6192.168.50.149 mysql-db01192.168.50.151 mysql-db02192.168.50.152 mysql-db03

    安装包准备

    安装MHA和MySQL的安装包:

    mha4mysql-manager-0.56-0.el6.noarch.rpmmha4mysql-node-0.56-0.el6.noarch.rpmmysql-5.6.17-linux-glibc2.5-x86_64.tar.gz

    安装MySQL

    使用以下命令安装MySQL 5.6:

    yum -y install ncurses-devel libaio tar xf mysql-5.6.17-linux-glibc2.5-x86_64.tar.gz \  -C /usr/local/mysql \  --strip-components=all \  --debu install

    配置基于GTID的主从复制

    必要条件

    • 主库和从库都启用二进制日志。
    • 主库和从库的服务器ID不同。
    • 配置主从复制用户。

    主库操作(mysql-db01)

  • 修改主库配置文件/etc/my.cnf

    • 启用GTID和二进制日志。
    • 设置唯一的服务器ID。
    vim /etc/my.cnf

    修改内容如下:

    [mysqld]gtid_mode=ONlog_slave_updates=1enforce_gtid_consistency=1
  • 创建主从复制用户:

    mysql -uroot -p123456grant replication slave on *.* to rep@'192.168.50.%' identified by '123456';

  • 从库操作(mysql-db02和mysql-db03)

  • 修改从库配置文件/etc/my.cnf

    • 启用GTID和二进制日志。
    • 禁止MySQL自动删除relaylog日志。
    vim /etc/my.cnf

    修改内容如下:

    [mysqld]gtid_mode=ONlog_slave_updates=1relay_log_purge=0
  • 重启MySQL服务:

    systemctl restart mysqld

  • 配置主从复制

    在主库上执行以下命令:

    mysql -uroot -p123456change master to master_host='192.168.50.149', master_user='rep', master_password='123456', master_auto_position=1;

    启用从库的主从复制功能

    在从库上执行以下命令:

    mysql -uroot -p123456start slave;show slave status\G;

    GTID的新特性

    GTID(Global Transaction ID)在MySQL 5.6及以上版本引入了以下新特性:

  • 多线程复制:每个数据库有独立的SQL线程。
  • 自动同步位置:通过GTID自动追踪主库的同步位置,不需要手动设置binlog和POS点。
  • 基于行复制:只复制改变的列,节省存储和网络资源。
  • 记录在表中:将主从状态信息记录在表中,增强可用性。
  • 延迟复制:支持延迟复制,允许主从之间存在一定延迟。

  • 部署MHA

    环境准备

    所有节点(mysql-db01、mysql-db02、mysql-db03)需要安装MHA工具包:

    yum -y install perl-DBD-MySQLrpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

    部署管理节点(MHA-Manager)

    选择一个从服务器部署MHA-Manager(例如mysql-db03),并执行以下操作:

  • 安装MHA-Manager依赖包:

    yum -y install perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
  • 安装MHA-Manager:

    rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

  • 配置MHA

  • 创建MHA配置文件目录:

    mkdir -p /etc/mhamkdir -p /var/log/mha/mha1
  • 编辑配置文件/etc/mha/mha1.cnf

    vim /etc/mha/mha1.cnf

    配置内容如下:

    [server default]manager_log=/var/log/mha/mha1/managermanager_workdir=/var/log/mha/mha1master_binlog_dir=/usr/local/mysql/datauser=mhapassword=123456ping_interval=2repl_user=reprepl_password=123456ssh_user=root

  • 配置SSH信任

    使用SSH-copy-id工具创建密钥对并推送到其他节点:

    ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsassh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.50.149ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.50.151ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.50.152

    启动MHA

  • 启动MHA-Manager:

    nohup masterha_manager --conf=/etc/mha/mha1.cnf --remove_dead_master_conf --ignore_last_failover > /var/log/mha/mha1/manager.log 2>&1 &
  • 检查MHA状态:

    masterha_check_ssh --conf=/etc/mha/mha1.cnfmasterha_check_repl --conf=/etc/mha/mha1.cnf

  • 故障测试与故障还原

    故障测试

  • 停止主库:

    /etc/init.d/mysqld stop
  • 检查从库状态:

    mysql -uroot -p123456 -e 'show slave status\G'

    输出应显示Slave_IO_Running: YesSlave_SQL_Running: Yes,表明主从复制正常进行。


  • 故障还原

  • 重启主库:

    /etc/init.d/mysqld start
  • 将故障库重新加入架构:

    mysql -uroot -p123456change master to master_host='192.168.50.149', master_user='rep', master_password='123456', master_auto_position=1;start slave;
  • 查看MHA日志:

    cat /var/log/mha/mha1/manager

  • 附录:源码安装MHA的方法

    Node节点的源码安装方法

    yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Params-Validate perl-CPAN perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMakertarxf mha4mysql-node-0.56.tar.gz -C /usr/src/cd /usr/src/mha4mysql-node-0.56perl Makefile.PLmakemake install

    Manager节点的源码安装方法

    yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Params-Validate perl-CPAN perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMakertarxf mha4mysql-manager-0.56.tar.gz -C /usr/src/cd /usr/src/mha4mysql-manager-0.56perl Makefile.PLmakemake install

    以上配置和操作均基于实际环境,建议根据实际需求进行调整。

    上一篇:MHA高可用架构与Atlas读写分离
    下一篇:MFC调用DOS窗口显示信息

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年05月12日 15时13分11秒