在现代企业中,数据是核心资产,而数据库作为数据存储和管理的核心系统,其高可用性和稳定性至关重要。MySQL 作为全球广泛使用的开源数据库,其高可用性配置一直是企业关注的焦点。MySQL MHA(MySQL High Availability) 是一个基于主从复制的高可用性解决方案,能够实现数据库的自动故障转移和负载均衡,确保业务的连续性。
本文将详细介绍 MySQL MHA 的高可用配置,包括集群搭建和故障转移的实现,帮助企业构建稳定、可靠的数据库系统。
MySQL MHA 是一个用于 MySQL 高可用性管理的工具,主要通过主从复制(Master-Slave)实现数据库的高可用性。其核心功能包括:
MHA 的优势在于其简单易用性和高效性,特别适合中小型企业或对成本敏感的企业。
在搭建 MySQL MHA 集群之前,需要确保以下环境准备完成:
在搭建 MHA 之前,需要先安装 MySQL 数据库。以下是安装步骤:
在 CentOS 系统上,运行以下命令安装 MySQL 依赖项:
sudo yum install -y gcc gcc-c++ make cmake libaio libaio-devel perl-DBI perl-DBD-Mysql从 MySQL 官方网站下载源码包并解压:
wget https://dev.mysql.com/get/MySQL-5.7.36.tar.gztar -zxvf MySQL-5.7.36.tar.gzcd MySQL-5.7.36编译并安装:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_MYSQL_EMBEDDED=0 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DWITH_DEBUG=0 .makesudo make install创建 MySQL 数据目录并初始化:
sudo mkdir -p /data/mysqlsudo chown -R mysql:mysql /data/mysql运行初始化脚本:
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql设置 MySQL 环境变量:
echo "export PATH=/usr/local/mysql/bin:$PATH" >> ~/.bashrcsource ~/.bashrc创建 MySQL 服务文件:
sudo nano /etc/systemd/system/mysqld.service添加以下内容:
[Unit]Description=MySQL Database ServerAfter=network.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --port=3306Restart=always[Install]WantedBy=multi-user.target启动并启用 MySQL 服务:
sudo systemctl start mysqldsudo systemctl enable mysqld在 MySQL MHA 中,主从复制是实现高可用性的基础。以下是配置主从复制的步骤:
在主数据库上,创建用于复制的用户:
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';FLUSH PRIVILEGES;修改主数据库的配置文件(my.cnf),添加以下内容:
[mysqld]log_bin=mysql-binserver_id=1重启 MySQL 服务:
sudo systemctl restart mysqld在从数据库上,修改配置文件(my.cnf),添加以下内容:
[mysqld]log_bin=mysql-binserver_id=2relay_log=relay-bin执行以下命令,将从数据库同步主数据库的数据:
STOP SLAVE;CHANGE MASTER TO MASTER_HOST='主数据库IP', MASTER_USER='repl_user', MASTER_PASSWORD='password';START SLAVE;检查从数据库的同步状态:
SHOW SLAVE STATUS\G确保 Slave_IO_Running 和 Slave_SQL_Running 均为 YES。
在主从数据库上安装 MHA:
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmsudo yum install -y mha4mysql-node在主数据库上创建 MHA 配置文件(/etc/mha/app1.cnf):
[application]description=testcandidate_master=1master_switch_check=1master_binlog=1[server1]hostname=主数据库IPssh_user=mysqlssh_password=密码ping_interval=1master_priority=100[server2]hostname=从数据库IPssh_user=mysqlssh_password=密码ping_interval=1master_priority=90启动 MHA 代理服务:
sudo systemctl start mha4mysql-nodesudo systemctl enable mha4mysql-node为了验证 MHA 的高可用性,可以进行以下测试:
在主数据库上执行以下命令,模拟故障:
sudo systemctl stop mysqldMHA 会自动检测主数据库的故障,并在 app1.cnf 配置的从数据库中选择合适的节点作为新的主数据库。
检查从数据库是否已成为主数据库:
SHOW VARIABLES LIKE 'server_id';确保从数据库的 server_id 已经变为 1,表示故障转移成功。
故障转移是 MySQL MHA 的核心功能,以下是其实现原理和步骤:
MHA 通过心跳机制(Heartbeat)检测主数据库的状态。如果主数据库在指定时间内没有心跳信号,MHA 将触发故障转移。
在某些情况下,可能需要手动触发故障转移。以下是手动故障转移的步骤:
sudo systemctl stop mysqld运行以下命令,触发 MHA 的故障转移:
sudo /usr/bin/mhaadm --execute --app1_conf=/etc/mha/app1.cnf检查新主数据库的状态:
SHOW VARIABLES LIKE 'server_id';确保新主数据库的 server_id 已经变为 1。
为了确保 MySQL MHA 集群的稳定运行,需要进行定期监控和维护:
使用监控工具(如 Prometheus、Grafana)监控 MySQL 的性能指标,包括:
定期检查 MySQL 和 MHA 的日志文件,及时发现并解决问题:
/data/mysql/mysql.err/var/log/mha/定期备份数据库,确保数据的安全性和可恢复性。可以使用 mysqldump 或物理备份工具(如 Percona XtraBackup)。
定期更新 MySQL 和 MHA 到最新版本,修复已知的漏洞和性能问题。
MySQL MHA 是一个高效、可靠的高可用性解决方案,能够帮助企业构建稳定的数据库系统。通过主从复制和自动故障转移,MHA 确保了业务的连续性,减少了因数据库故障导致的停机时间。
在实际应用中,企业需要根据自身需求选择合适的配置方案,并进行定期的监控和维护,以确保系统的稳定运行。如果需要进一步了解 MySQL MHA 或其他数据库解决方案,可以申请试用 DTStack 的相关服务,获取专业的技术支持。
申请试用&下载资料