首页 关于我们 成功案例 网络营销 电商设计 新闻中心 联系方式
QQ联系
电话联系
手机联系

如何在mysql中搭建MHA高可用集群

发布时间:2025-10-31 15:50
发布者:网络
浏览次数:
MHA集群通过主从复制、SSH免密登录和VIP漂移实现MySQL高可用,主库故障时自动选举最优从库升主并重定向服务,确保10-30秒内恢复。

如何在mysql中搭建mha高可用集群

搭建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(Sl*e1):192.168.1.11
  • 从库2(Sl*e2):192.168.1.12
  • MHA Manager:192.168.1.20(可复用某从库)

2. 配置MySQL主从复制

确保主从复制正常运行是MHA的前提。

主库配置(my.cnf):
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON

从库配置:

server-id = 2  # 每个从库ID不同
relay-log = relay-bin
log-sl*e-updates = ON
read-only = ON
gtid-mode = ON
enforce-gtid-consistency = ON

在主库创建复制用户:

CREATE USER 'repl'@'%' IDENTIFIED BY 'replpass';
GRANT REPLICATION SL*E ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

从库执行CHANGE MASTER命令,启动复制并确认IO/SQL线程运行正常(SHOW SL*E STATUS\G)。

3. 安装MHA Node与Manager

MHA Node需在每个MySQL节点(包括主从)安装:

yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.58-0.el7.noarch.rpm

MHA Manager只在管理节点安装:

yum install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y
rpm -ivh mha4mysql-manager-0.58-0.el7.noarch.rpm

创建MHA工作目录:

mkdir -p /etc/masterha
mkdir -p /var/log/masterha/app1

4. 配置SSH免密登录

在MHA Manager节点生成密钥,并分发到所有MySQL节点:

ssh-keygen -t rsa
ssh-copy-id root@192.168.1.10
ssh-copy-id root@192.18.1.11
ssh-copy-id root@192.168.1.12

测试SSH互通无密码登录,这是MHA执行远程操作的基础。

PHP5 和 MySQL 圣经 PHP5 和 MySQL 圣经

本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。

PHP5 和 MySQL 圣经 485 查看详情 PHP5 和 MySQL 圣经

5. 编写MHA配置文件

创建配置文件 /etc/masterha/app1.cnf:

[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
master_ip_failover_script=/usr/local/bin/master_ip_failover
shutdown_script=""
ssh_user=root
repl_user=repl
repl_password=replpass
ping_interval=1
master_binlog_dir=/var/lib/mysql
<p>[server1]
hostname=192.168.1.10
candidate_master=1</p><p>[server2]
hostname=192.168.1.11
candidate_master=1</p><p>[server3]
hostname=192.168.1.12
no_master=1</p>

说明:candidate_master=1 表示可参与主库选举;no_master=1 表示不可升为主库。

6. 配置VIP及故障转移脚本

MHA本身不带VIP漂移功能,需自定义脚本实现。创建 /usr/local/bin/master_ip_failover

#!/usr/bin/perl
use strict;
use warnings FATAL => 'all';
<p>use Getopt::Long;</p><p>my (
$command,        $ssh_user,      $orig_master_host,
$orig_master_ip, $orig_master_port, $new_master_host,
$new_master_ip,  $new_master_port
);</p><p>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,
);</p><p>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";</p><p>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\"");
}</p><p>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;</p>

赋予执行权限: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 < /dev/null > /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高可用集群的详细内容,更多请关注其它相关文章!


# mysql  # word  # node  # app  # ai  # 配置文件  # 离线  # 镜像  # 多个  # 本书  # 两种  # 书中  # 全攻略  # 如何在  # 最优  # 苏州seo优化推广公司  # 宜春抖音seo推广  # 宜昌高效网站推广开户  # 整合营销方案推广  # 跃进村网站推广营销  # 雪盲电影网站建设  # 在线seo优化收费  # 固原农产品网站优化设计  # 研学旅游营销推广方式  # 拼多多推广赚钱网站源码