在现代企业级应用中,数据库的高可用性是系统稳定运行的关键保障。MySQL作为最流行的开源关系型数据库之一,其高可用集群的搭建需求日益增长。本篇文章将深入探讨如何从零开始搭建一个基于MHA(Master Ha)的MySQL高可用集群。
MHA(Master High Availability)是一个实现MySQL主从切换和故障转移的工具集,由Facebook开发并开源。它主要分为两个部分:MHA Manager和MHA Node。MHA Manager负责监控、故障检测和主从切换等管理任务,而MHA Node则部署在每个MySQL实例上,用于执行实际的数据复制和同步操作。
# 在所有节点上安装MHA Node
yum install -y mha4mysql-node
# 在MHA Manager节点上安装MHA Manager
yum install -y mha4mysql-manager
确保主库和从库之间的复制正常工作。以下是配置步骤:
my.cnf
文件,启用binlog并设置server-id。CHANGE MASTER TO
命令,指定主库信息。在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
编写主从切换脚本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
使用以下命令测试主从切换:
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 &
MHA Manager会定期检查主库是否存活。如果主库不可用,MHA会自动选择一个新的主库并进行切换。
为了减少切换过程中可能的数据丢失,建议启用MySQL的半同步复制。配置方法如下:
my.cnf
中添加以下配置:
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
my.cnf
中添加:
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
通过查看MHA的日志文件manager.log
,可以了解切换过程中的详细信息,便于后续优化和问题排查。
本文详细介绍了如何利用MHA构建一个高可用的MySQL集群,涵盖了环境准备、主从复制配置、MHA部署及优化等多个方面。通过合理配置和优化,可以显著提升系统的稳定性和数据安全性。