MySQL作为开源数据库中的佼佼者,其高可用解决方案层出不穷,其中MySQL MHA(Master High Availability Manager and tools for MySQL)以其高效、可靠的故障转移机制,成为众多企业的首选
本文将详细介绍如何搭建一个MySQL MHA环境,确保您的数据库系统在面对突发故障时能够迅速恢复,保障业务连续性
一、环境准备与软件版本 在开始搭建之前,首先需要明确环境架构及软件版本
本次搭建将基于以下环境: -操作系统:CentOS 7 -MySQL版本:5.7.28 -MHA版本:mha4mysql-manager 0.58 和 mha4mysql-node0.58 二、整体架构 MHA环境主要由MHA Manager(管理节点)和MHA Node(数据节点)组成
MHA Manager可以单独部署在一台独立的机器上,负责监控和管理多个MySQL主从集群
每个MySQL服务器上运行MHA Node,与MHA Manager协同工作,实现故障转移和恢复
在本次搭建中,我们假设有以下服务器角色分配: -centos01:作为Master节点 -centos02、centos04:作为Slave节点 -centos03:作为MHA Manager节点 三、MySQL主从复制搭建 3.1 环境准备 从【MySQL官网】(https://cdn.mysql.com/archives/mysql-5.7/)下载MySQL5.7.28的安装包,或者使用国内镜像源下载
确保所有服务器间的网络连接正常,并且防火墙规则允许MySQL服务(默认端口3306)的通信
3.2 MySQL安装与配置 1.安装MySQL: 移除系统上可能存在的MariaDB依赖
bash rpm -qa | grep mariadb rpm -e mariadb-libs --nodeps 安装MySQL所需的依赖库
bash yum install -y libaio 解压并安装MySQL RPM包
bash tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm 根据依赖提示,依次安装其他rpm包 初始化MySQL数据库并启动服务
bash mysqld --initialize --user=mysql systemctl start mysqld systemctl enable mysqld 修改MySQL root密码
bash mysql -uroot -p 使用初始化生成的临时密码登录 SET PASSWORD = PASSWORD(123456); 2.配置主节点(Master): - 编辑/etc/my.cnf文件,添加或修改以下配置
ini 【mysqld】 server-id=1 log_bin=mysql-bin binlog_format=mixed sync-binlog=1 log-slave-updates=true relay-log=relay-log-bin relay-log-index=slave-relay-bin.index 重启MySQL服务
bash systemctl restart mysqld 创建复制用户并授权
sql GRANT REPLICATION SLAVE ON- . TO myslave@% IDENTIFIED BY 123456; FLUSH PRIVILEGES; 锁表并导出数据(可选,用于初始数据同步)
sql FLUSH TABLES WITH READ LOCK; mysqldump -uroot -p --all-databases --master-data > master_dump.sql UNLOCK TABLES; 3.配置从节点(Slave): - 在每个从节点上安装MySQL,并配置`/etc/my.cnf`文件中的`server-id`,确保每个节点的`server-id`唯一
导入主节点数据(如果执行了数据导出步骤)
bash mysql -uroot -p < master_dump.sql 配置从节点连接到主节点
sql CHANGE MASTER TO MASTER_HOST=主节点IP, MASTER_USER=myslave, MASTER_PASSWORD=123456, MASTER_LOG_FILE=mysql-bin.000001, 根据master_dump.sql中的日志文件名和位置调整 MASTER_LOG_POS=XXX; 根据master_dump.sql中的日志位置调整 START SLAVE; 检查从节点状态
sql SHOW SLAVE STATUSG; 四、MHA高可用搭建 4.1 SSH互通配置 1.生成SSH密钥对:在所有服务器上执行以下命令,生成公钥和私钥
bash ssh-keygen -t rsa -P 2.配置无密码登录:将每个服务器的公钥复制到其他所有服务器(包括MHA Manager和MySQL节点之间)
bash ssh-copy-id root@其他服务器IP 3.验证SSH互通:通过`ssh root@服务器IP`命令,确保能够无密码登录所有服务器
4.2 安装MHA 1.下载MHA安装包:从【GitHub】(https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58)或【MariaDB官方下载页面】(https://downloads.mariadb.com/MHA/)下载mha4mysql-manager和mha4mysql-node的RPM包
2.安装MHA Node:在所有MySQL服务器上安装mha4mysql-node
bash yum install perl-DBD-MySQL -y rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm 3.安装MHA Manager:在MHA Manager服务器上安装mha4mysql-manager,并安装其依赖的Perl模块
bash wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -ivh epel-release-latest-7.noarch.rpm -y yum install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm 4.3 配置MHA 1.创建MHA配置目录:在MHA Manager服务器上创建必要的目录和文件
bash mkdir -p /var/log/mha/app1 touch /var/log/mha/manager.log 2.配置全局配置文件:编辑`/etc/masterha_default.cnf`,添加基本配置
ini 【server default】 user=root password=123456 ssh_user=root repl_u