从零搭建MySQL高可用集群(MHA篇)

2025-06发布6次浏览

在现代企业级应用中,数据库的高可用性是系统稳定运行的关键保障。MySQL作为最流行的开源关系型数据库之一,其高可用集群的搭建需求日益增长。本篇文章将深入探讨如何从零开始搭建一个基于MHA(Master Ha)的MySQL高可用集群。

一、MHA简介

MHA(Master High Availability)是一个实现MySQL主从切换和故障转移的工具集,由Facebook开发并开源。它主要分为两个部分:MHA Manager和MHA Node。MHA Manager负责监控、故障检测和主从切换等管理任务,而MHA Node则部署在每个MySQL实例上,用于执行实际的数据复制和同步操作。

MHA的主要功能

  • 自动故障检测和主库切换。
  • 最小化数据丢失。
  • 支持半同步复制,提高数据一致性。
  • 支持多节点架构。

二、环境准备

1. 硬件与软件要求

  • 至少三台服务器(一台作为MHA Manager,两台或更多作为MySQL节点)。
  • 操作系统推荐使用Linux发行版如CentOS或Ubuntu。
  • MySQL版本建议5.6及以上。
  • Python 2.6/2.7(MHA依赖于Python)。

2. 软件安装

安装MHA相关组件

# 在所有节点上安装MHA Node
yum install -y mha4mysql-node

# 在MHA Manager节点上安装MHA Manager
yum install -y mha4mysql-manager

配置MySQL主从复制

确保主库和从库之间的复制正常工作。以下是配置步骤:

  1. 修改主库my.cnf文件,启用binlog并设置server-id。
  2. 在主库上创建用于复制的用户。
  3. 在从库上执行CHANGE MASTER TO命令,指定主库信息。
  4. 启动从库复制线程。

三、MHA配置与部署

1. 配置MHA Manager

在MHA Manager节点上创建配置文件/etc/mha/app1.cnf,内容如下:

[server default]
manager_workdir=/var/log/mha/app1
manager_log=manager.log
master_ip_failover_script=/usr/local/bin/master_ip_failover
ssh_user=root
repl_user=repl
repl_password=yourpassword
ping_interval=1

[server1]
hostname=192.168.1.101
port=3306

[server2]
hostname=192.168.1.102
port=3306

[server3]
hostname=192.168.1.103
port=3306

2. 主从切换脚本

编写主从切换脚本master_ip_failover,用于在主库发生故障时更新VIP(虚拟IP)。以下是一个简单的示例:

#!/usr/bin/env bash

# $1: action (stop or start)
# $2: new master hostname
# $3: new master IP

if [ "$1" == "stop" ]; then
    # Stop old master services if necessary
    echo "Stopping old master..."
elif [ "$1" == "start" ]; then
    # Assign VIP to new master
    ip addr add $3 dev eth0
    echo "Started new master at $2"
fi

确保脚本具有可执行权限:

chmod +x /usr/local/bin/master_ip_failover

3. 测试主从切换

使用以下命令测试主从切换:

masterha_check_ssh --conf=/etc/mha/app1.cnf
masterha_check_repl --conf=/etc/mha/app1.cnf

如果以上检查通过,可以启动MHA Manager:

nohup masterha_manager --conf=/etc/mha/app1.cnf > /var/log/mha/manager.log 2>&1 &

四、故障处理与优化

1. 故障检测

MHA Manager会定期检查主库是否存活。如果主库不可用,MHA会自动选择一个新的主库并进行切换。

2. 数据一致性

为了减少切换过程中可能的数据丢失,建议启用MySQL的半同步复制。配置方法如下:

  1. 在主库和从库上安装半同步插件。
  2. 在主库my.cnf中添加以下配置:
    plugin-load=rpl_semi_sync_master=semisync_master.so
    rpl_semi_sync_master_enabled=1
    
  3. 在从库my.cnf中添加:
    plugin-load=rpl_semi_sync_slave=semisync_slave.so
    rpl_semi_sync_slave_enabled=1
    

3. 日志分析

通过查看MHA的日志文件manager.log,可以了解切换过程中的详细信息,便于后续优化和问题排查。

五、总结

本文详细介绍了如何利用MHA构建一个高可用的MySQL集群,涵盖了环境准备、主从复制配置、MHA部署及优化等多个方面。通过合理配置和优化,可以显著提升系统的稳定性和数据安全性。