mysql高可用集群是保障数据库服务持续可用的核心架构,MHA(Master High Availability)是目前主流的mysql主从切换管理工具,能够在主库故障时快速自动提升从库为新主库,最小化服务中断时间。本文将以一主两从的拓扑结构为例,讲解完整的MHA环境搭建与部署流程。
环境准备
本次部署使用3台CentOS 7服务器,配置信息如下:
| 节点角色 | IP地址 | 安装组件 |
|---|---|---|
| 主库(Master) | 192.168.0.101 | mysql 5.7、MHA Node |
| 从库1(Slave1) | 192.168.0.102 | mysql 5.7、MHA Node |
| 从库2(Slave2) | 192.168.0.103 | mysql 5.7、MHA Node |
| 管理节点(Manager) | 192.168.0.104 | MHA Manager、MHA Node |
所有节点需要关闭防火墙和SELinux,配置节点间SSH免密登录,确保管理节点可以无密码访问所有数据库节点。
配置mysql主从复制
主库配置
修改主库my.cnf配置文件,添加以下参数:
[mysqld] server-id=1 log-bin=mysql-bin binlog_format=row expire_logs_days=7 # 允许从库同步的账号权限 grant replication slave on *.* to 'repl'@'192.168.0.%' identified by 'repl_password'; flush privileges; # 查看主库状态,记录binlog文件和位置 show master status;
从库配置
两个从库修改my.cnf,设置不同的server-id,从库1设为2,从库2设为3,然后执行同步命令:
change master to master_host='192.168.0.101', master_user='repl', master_password='repl_password', master_log_file='mysql-bin.000001', master_log_pos=154; start slave; # 检查同步状态,确保Slave_IO_Running和Slave_SQL_Running都是Yes show slave statusG
安装MHA组件
所有节点安装MHA Node
先安装依赖包,再安装MHA Node:
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager rpm -ivh mha4mysql-node-0.58-0.el7.noarch.rpm
管理节点安装MHA Manager
管理节点除了安装Node组件,还需要安装Manager:
yum install -y perl-Email-Date perl-MIME-Lite perl-MIME-Types perl-Mail-Sender perl-Mail-Sendmail rpm -ivh mha4mysql-manager-0.58-0.el7.noarch.rpm
配置MHA管理节点
在管理节点创建MHA配置文件目录和日志目录:
mkdir -p /etc/mha /var/log/mha/app1
创建MHA配置文件/etc/mha/app1.cnf,内容如下:
[server default] manager_log=/var/log/mha/app1/manager.log manager_workdir=/var/log/mha/app1 master_binlog_dir=/var/lib/mysql user=root password=mysql_root_password ping_interval=1 remote_workdir=/tmp repl_user=repl repl_password=repl_password ssh_user=root [server1] hostname=192.168.0.101 port=3306 [server2] hostname=192.168.0.102 port=3306 candidate_master=1 [server3] hostname=192.168.0.103 port=3306
检查MHA环境
执行以下命令检查SSH连通性和主从复制状态:
# 检查SSH连通性 masterha_check_ssh --conf=/etc/mha/app1.cnf # 检查主从复制状态 masterha_check_repl --conf=/etc/mha/app1.cnf
两个检查都通过后再启动MHA Manager服务。
启动MHA服务并测试故障切换
启动MHA Manager:
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover /var/log/mha/app1/manager.log 2>&1 &
查看MHA运行状态:
masterha_check_status --conf=/etc/mha/app1.cnf
模拟主库故障
在主库执行关机命令模拟故障:
shutdown -h now
等待1-2分钟后,查看MHA日志,确认从库1已经被提升为新主库,从库2自动同步到新主库,故障切换完成。此时可以在新主库执行写入操作,验证集群可用性。
注意事项
- 所有节点的mysql版本需要保持一致,避免兼容性问题
- MHA Manager需要单独部署,不要和数据库节点放在同一台服务器
- 故障切换后需要手动恢复原主库,并重新加入集群作为从库
- 生产环境建议配置MHA监控脚本,及时感知集群状态变化