对于依赖MySQL作为核心数据库系统的企业而言,确保数据库的高可用性(High Availability,简称HA)是保障业务连续性的关键
Master High Availability Manager and tools for MySQL(简称MHA)是一套优秀的MySQL高可用解决方案,它通过自动化故障切换和主从复制管理,显著提高了MySQL数据库的高可用性
本文将详细介绍如何使用MHA搭建高可用MySQL环境,确保您的数据库系统稳定可靠
一、MHA简介 MHA是一套优秀的MySQL高可用性和灾难恢复管理解决方案,由日本DeNA公司的yoshinorim开发
MHA主要由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)
MHA Manager可以监控多个MySQL主从集群的状态,并在主库发生故障时自动进行故障切换,将其中一个从库提升为主库,同时确保其他从库能够同步新的主库
MHA Node则运行在每个MySQL服务器上,保存必要的信息以支持MHA Manager进行故障切换
MHA的主要功能包括: 1.自动故障切换:在主库故障时,自动选择一个从库作为新的主库,并进行故障切换
2.主从复制一致性校验和修复:确保所有从库的数据一致性,防止数据丢失
3.提供在线切换工具:支持将当前主库切换到另一台从库,通常用于数据库升级或迁移
二、环境准备 在搭建MHA高可用MySQL环境之前,需要做好以下准备工作: 1.服务器配置:确保所有服务器(包括主库和从库)的系统配置一致,并且网络通畅
2.MySQL安装:在所有服务器上安装相同版本的MySQL数据库
3.主从复制配置:确保MySQL主从复制已经正确配置并运行
假设我们有以下三台服务器: - 主库:192.168.1.10 - 从库1:192.168.1.20 - 从库2:192.168.1.30 三、安装MHA 1.安装依赖包 在所有服务器上安装必要的依赖包: bash yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Time-HiRes perl-Log-Dispatch 2.下载并安装MHA 从官方GitHub仓库下载MHA软件包,并进行安装
以下步骤以MHA Manager节点为例: bash cd /usr/local/src wget https://github.com/yoshinorim/mha4mysql-manager/archive/refs/heads/master.zip unzip master.zip cd mha4mysql-manager-master perl Makefile.PL make make install 同样,在数据节点上安装MHA Node: bash cd /usr/local/src wget https://github.com/yoshinorim/mha4mysql-node/archive/refs/heads/master.zip unzip master.zip cd mha4mysql-node-master perl Makefile.PL make make install 四、配置MHA 1.配置主从复制 在主库上创建复制用户: sql CREATE USER mha@% IDENTIFIED BY mha_password; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON. TO mha@%; FLUSH PRIVILEGES; 在从库上配置复制: sql CHANGE MASTER TO MASTER_HOST=192.168.1.10, MASTER_USER=mha, MASTER_PASSWORD=mha_password, MASTER_LOG_FILE=mysql-bin.000001, MASTER_LOG_POS=123456; START SLAVE; 确保复制正常工作: sql SHOW SLAVE STATUSG 2.配置MHA Manager 在MHA Manager节点上创建配置文件目录,并编辑配置文件: bash mkdir -p /etc/masterha vim /etc/masterha/app1.cnf 在配置文件中添加以下内容: ini 【server default】 manager_workdir=/var/log/masterha/app1 manager_log=/var/log/masterha/app1/manager.log user=mha password=mha_password ping_interval=1 repl_user=mha repl_password=mha_password ssh_user=root ssh_pass=your_ssh_password 注意:出于安全考虑,建议使用SSH密钥认证 【server1】 hostname=192.168.1.10 port=3306 【server2】 hostname=192.168.1.20 port=3306 candidate_master=1 check_repl_delay=0 【server3】 hostname=192.168.1.30 port=3306 candidate_master=1 check_repl_delay=0 其中,`candidate_master=1`表示该从库可以作为故障切换时的候选主库,`check_repl_delay=0`表示不检查复制延迟
3.配置SSH免密登录 在MHA Manager节点上配置SSH免密登录到所有MySQL服务器: bash ssh-keygen -t rsa 生成SSH密钥对 ssh-copy-id root@192.168.1.10 ssh-copy-id root@192.168.1.20 ssh-copy-id root@192.168.1.30 五、测试MHA 1.检查复制状态 使用MHA提供的检查复制状态的脚本: bash masterha_check_repl --conf=/etc/masterha/app1.cnf 确保所有检查项都通过,没有错误或警告
2.手动故障切换测试 停止主库MySQL服务,模拟主库故障: bash ssh root@192.168.1.10 systemctl stop mysqld 在MHA Manager节点上执行故障切换: bash masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=dead --new_master_host=192.168.1.20 --orig_master_host=192.168.1.10 检查故障切换结果,确保新的主库已经成功切换,