MHA集群通过主从复制、SSH免密登录和VIP漂移实现MySQL高可用,主库故障时自动选举最优从库升主并重定向服务,确保10-30秒内恢复。

搭建MySQL MHA(Master High Availability)集群可以有效实现主库故障自动切换,保障数据库服务的高可用性。MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点),其核心功能是在主库宕机时,从多个从库中选举出一个最优节点进行主库切换,并将其他从库指向新的主库。
1. 环境准备与基础配置
搭建MHA前需确保以下环境条件:
至少一主多从的MySQL复制架构(推荐一主两从或以上)所有MySQL节点开启binlog、server-id唯一、启用GTID(可选但推荐)各节点之间SSH免密登录(MHA Manager通过SSH管理Node)所有节点安装MHA Node软件包单独一台服务器部署MHA Manager(也可与某个从库共用,但不建议生产环境)
示例拓扑:
主库(Master):192.168.1.10从库1(Slave1):192.168.1.11从库2(Slave2):192.168.1.12MHA Manager:192.168.1.20(可复用某从库)
2. 配置MySQL主从复制
确保主从复制正常运行是MHA的前提。
主库配置(my.cnf):
[mysqld]server-id = 1log-bin = mysql-binbinlog-format = ROWgtid-mode = ONenforce-gtid-consistency = ON
从库配置:
server-id = 2 # 每个从库ID不同relay-log = relay-binlog-slave-updates = ONread-only = ONgtid-mode = ONenforce-gtid-consistency = ON
在主库创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'replpass';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';FLUSH PRIVILEGES;
从库执行CHANGE MASTER命令,启动复制并确认IO/SQL线程运行正常(SHOW SLAVE STATUSG)。
3. 安装MHA Node与Manager
MHA Node需在每个MySQL节点(包括主从)安装:
yum install perl-DBD-MySQL -yrpm -ivh mha4mysql-node-0.58-0.el7.noarch.rpm
MHA Manager只在管理节点安装:
yum install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -yrpm -ivh mha4mysql-manager-0.58-0.el7.noarch.rpm
创建MHA工作目录:
mkdir -p /etc/masterhamkdir -p /var/log/masterha/app1
4. 配置SSH免密登录
在MHA Manager节点生成密钥,并分发到所有MySQL节点:
ssh-keygen -t rsassh-copy-id root@192.168.1.10ssh-copy-id root@192.18.1.11ssh-copy-id root@192.168.1.12
测试SSH互通无密码登录,这是MHA执行远程操作的基础。
集简云
软件集成平台,快速建立企业自动化与智能化
22 查看详情
5. 编写MHA配置文件
创建配置文件 /etc/masterha/app1.cnf:
[server default]manager_workdir=/var/log/masterha/app1manager_log=/var/log/masterha/app1/manager.logmaster_ip_failover_script=/usr/local/bin/master_ip_failovershutdown_script=""ssh_user=rootrepl_user=replrepl_password=replpassping_interval=1master_binlog_dir=/var/lib/mysql[server1]hostname=192.168.1.10candidate_master=1
[server2]hostname=192.168.1.11candidate_master=1
[server3]hostname=192.168.1.12no_master=1
说明:candidate_master=1 表示可参与主库选举;no_master=1 表示不可升为主库。
6. 配置VIP及故障转移脚本
MHA本身不带VIP漂移功能,需自定义脚本实现。创建 /usr/local/bin/master_ip_failover:
#!/usr/bin/perluse strict;use warnings FATAL => 'all';use Getopt::Long;
my ($command, $ssh_user, $orig_master_host,$orig_master_ip, $orig_master_port, $new_master_host,$new_master_ip, $new_master_port);
GetOptions('command=s' => $command,'ssh_user=s' => $ssh_user,'orig_master_host=s' => $orig_master_host,'orig_master_ip=s' => $orig_master_ip,'orig_master_port=i' => $orig_master_port,'new_master_host=s' => $new_master_host,'new_master_ip=s' => $new_master_ip,'new_master_port=i' => $new_master_port,);
my $vip = '192.168.1.100';my $interface = 'eth0';my $key = '1';my $ssh_start_vip = "sudo /sbin/ifconfig $interface:$key $vip";my $ssh_stop_vip = "sudo /sbin/ifconfig $interface:$key down";
if ( $command eq "stop" || $command eq "stopssh" ) {print "Disabling the VIP on old master: $orig_master_host n";system("ssh $ssh_user@$orig_master_host "$ssh_stop_vip"");}
if ( $command eq "start" ) {print "Enabling the VIP on new master: $new_master_host n";system("ssh $ssh_user@$new_master_host "$ssh_start_vip"");}exit 0;
赋予执行权限:chmod +x /usr/local/bin/master_ip_failover
确保各节点root用户可通过sudo执行ifconfig命令(配置visudo)。
7. 启动MHA并测试故障切换
先检查配置是否正确:
masterha_check_ssh --conf=/etc/masterha/app1.cnf
masterha_check_repl --conf=/etc/masterha/app1.cnf
两项检查均通过后,启动MHA Manager:
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /var/log/masterha/app1/manager.log 2>&1 &
模拟主库宕机:
systemctl stop mysqld # 在主库执行
观察MHA日志(/var/log/masterha/app1/manager.log),会自动完成:
检测主库宕机选择最新数据的从库提升为主库执行VIP漂移脚本重新配置剩余从库指向新主库
基本上就这些。只要主从复制稳定、SSH畅通、脚本权限正确,MHA能快速完成故障切换,通常在10-30秒内恢复服务。注意定期检查MHA状态,避免脑裂或配置遗漏问题。
以上就是如何在mysql中搭建MHA高可用集群的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/298076.html
微信扫一扫
支付宝扫一扫