搭建 MySQL MHA 搭建MySQL MHAMHA :为了解决的了是故障切换、数据尽可能的保存以及所有节点日志的一致性实验思路环境环境 一定要干净,防火墙和增强功能都要提前关掉1数据库安装2一主两从 主从复制3MHA搭建2故障模拟1主库失效2备选主库成为主库3原故障主库恢复重新加入到MHA成为从库实验环境准备四台服务器最好里面三个已经做好一主两从的配置了不会主从的可以看看这个MySQL 主从复制与 Nginx 升级实践记录-CSDN博客我的四台IP为192.168.64.主11备112备213manager16配置好后可以跟着做④ 在 Master、Slave1、Slave2 节点上都创建两个软链接ln -s /usr/local/mysql/bin/mysql /usr/sbin/ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/两个从库要设置只读模式set global read_only1;测试主从复制成功没有先看一下两遍的数据库主的从的主的新建一个abc看从库过来了下面安装mha软件四台机器都要安装首先安装 epel 源yum install epel-release --nogpgcheck -y然后就是这段直接敲yum install -y perl-DBD-MySQL \perl-Config-Tiny \perl-Log-Dispatch \perl-Parallel-ForkManager \perl-ExtUtils-CBuilder \perl-ExtUtils-MakeMaker \perl-CPAN好像有点bug不耽误用安装 MHA 软件包先在所有服务器上必须先安装 node 组件在所有服务器上必须先安装 node 组件最后在 MHA-manager 节点上安装 manager 组件因为 manager 依赖 node 组件。去网上找node包和manager包tar zxvf mha4mysql-node-0.57.tar.gzcd mha4mysql-node-0.57perl Makefile.PLmake make install在 MHA manager 节点上安装 manager 组件cd /opttar zxvf mha4mysql-manager-0.57.tar.gzcd mha4mysql-manager-0.57perl Makefile.PLmake make installmanager 组件安装后在/usr/local/bin 下面会生成几个工具主要包括以下几个masterha_check_ssh 检查 MHA 的 SSH 配置状况masterha_check_repl 检查 MySQL 复制状况masterha_manger 启动 manager的脚本masterha_check_status 检测当前 MHA 运行状态masterha_master_monitor 检测 master 是否宕机masterha_master_switch 控制故障转移自动或者 手动masterha_conf_host 添加或删除配置的 server 信息masterha_stop 关闭managernode 组件安装后也会在/usr/local/bin 下面会生成几个脚本这些工具通常由MHAManager 的脚本触发无需人为操作主要如下save_binary_logs 保存和复制 master 的二进制日志apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slavefilter_mysqlbinlog 去除不必要的 ROLLBACK 事件MHA 已不再使用这个工具purge_relay_logs 清除中继日志不会阻塞 SQL 线程Manager主机忘改名了改个名hostnamectl set-hostname Manager在 manager 节点上配置到所有数据库节点的无密码认证ssh-keygen -t rsa #一路按回车键ssh-copy-id 192.168.64.11ssh-copy-id 192.168.64.12ssh-copy-id 192.168.64.132在 master 上配置到数据库节点 slave1 和 slave2 的无密码认证ssh-keygen -t rsassh-copy-id 192.168.64.12ssh-copy-id 192.168.64.133在 slave1 上配置到数据库节点 master 和 slave2 的无密码认证ssh-keygen -t rsassh-copy-id 192.168.64.11ssh-copy-id 192.168.64.134在 slave2 上配置到数据库节点 master 和 slave1 的无密码认证ssh-keygen -t rsassh-copy-id 192.168.64.11ssh-copy-id 192.168.64.12这个不截图了流程和manager一样在 manager 节点上复制相关脚本到/usr/local/bin 目录cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/binmaster_ip_failover #自动切换时 VIP 管理的脚本master_ip_online_change #在线切换时 vip 的管理power_manager #故障发生后关闭主机的脚本send_report #因故障切换后发送报警的脚本复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录这里使用master_ip_failover脚本来管理 VIP 和故障切换cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin修改内容如下删除原有内容直接复制并修改vip相关参数vim /usr/local/bin/master_ip_failover#!/usr/bin/env 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);my $vip 192.168.10.200;my $ifdev ens33;my $key 1;my $ssh_start_vip /sbin/ifconfig $ifdev:$key $vip;my $ssh_stop_vip /sbin/ifconfig $ifdev:$key down;GetOptions(commands \$command,ssh_users \$ssh_user,orig_master_hosts \$orig_master_host,orig_master_ips \$orig_master_ip,orig_master_porti \$orig_master_port,new_master_hosts \$new_master_host,new_master_ips \$new_master_ip,new_master_porti \$new_master_port,);exit main();sub main {if ($command eq stop || $command eq stopssh) {print Disabling VIP on old master: $orig_master_host\n;stop_vip();return 0;}elsif ($command eq start) {print Enabling VIP $vip on new master: $new_master_host\n;start_vip();return 0;}elsif ($command eq status) {print Checking the Status of the script.. OK\n;return 0;}else {usage();return 1;}}sub start_vip {system(ssh, $ssh_user\$new_master_host, $ssh_start_vip) 0or die Failed to start VIP\n;}sub stop_vip {system(ssh, $ssh_user\$orig_master_host, $ssh_stop_vip) 0or die Failed to stop VIP\n;}sub usage {print Usage: master_ip_failover --commandstart|stop|stopssh|status . --orig_master_hosthost --orig_master_ipip . --orig_master_portport --new_master_hosthost . --new_master_ipip --new_master_portport\n;}创建 MHA 软件目录并拷贝配置文件这里使用app1.cnf配置文件来管理 mysql 节点服务器mkdir /etc/masterhacp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterhavim /etc/masterha/app1.cnf[server default]manager_log/var/log/masterha/app1/manager.logmanager_workdir/var/log/masterha/app1master_binlog_dir/usr/local/mysql/datamaster_ip_failover_script/usr/local/bin/master_ip_failovermaster_ip_online_change_script/usr/local/bin/master_ip_online_changepassword123456ping_interval1remote_workdir/tmprepl_password123456repl_usermyslavesecondary_check_script/usr/local/bin/masterha_secondary_check -s 192.168.64.12 -s 192.168.64.13shutdown_scriptssh_userrootusermha[server1]hostname192.168.64.11port3306[server2]hostname192.168.64.12port3306[server3]hostname192.168.64.13port3306candidate_master1check_repl_delay0一次配置需要在Master节点上手动开启虚拟IP要先安装yum install -y net-toolsifconfig enp0s1:1 192.168.64.200 netmask 255.255.255.0 upmanager节点上测试ssh在 manager 节点上测试 ssh 无密码认证如果正常最后会输出 successfully如下所示。masterha_check_ssh -conf/etc/masterha/app1.cnf创建下用户三台都要mysql -uroot -p123456 EOFCREATE USER IF NOT EXISTS mha192.168.64.16’ IDENTIFIED BY 123456;GRANT ALL PRIVILEGES ON *.* TO mha192.168.64.%’ WITH GRANT OPTION;FLUSH PRIVILEGES;EOF验证mysql -uroot -p123456 -e SELECT Host,User FROM mysql.user WHERE Usermha;把 /etc/my.cnf 里的 [client] default-character-setutf8 去掉manager节点上测试mysql主从连接在 manager 节点上测试 mysql 主从连接情况最后出现 MySQL ReplicationHealth is OK 字样说明正常。如下所示。masterha_check_repl -conf/etc/masterha/app1.cnf在manager节点上启动MHAnohup masterha_manager --conf/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /dev/null /var/log/masterha/app1/manager.log 21 查看MHA状态masterha_check_status --conf/etc/masterha/app1.cnf查看MHA日志cat /var/log/masterha/app1/manager.log | grep current master查看master VIP查看master 的 VIP 地址 192.168.10.200 是否存在这个 VIP 地址不会因为manager 节点停止 MHA 服务而消失。ifconfig若要关闭manager服务//若要关闭 manager 服务可以使用如下命令。masterha_stop --conf/etc/masterha/app1.cnf或者可以直接采用 kill 进程 ID 的方式关闭。MHA 模拟故障在 manager 节点上监控观察日志记录tail -f /var/log/masterha/app1/manager.log在 Master 节点 master 上停止mysql服务systemctl stop mysqld正常自动切换一次后MHA 进程会退出。HMA 会自动修改 app1.cnf 文件内容将宕机的master 节点删除。查看 slave2 是否接管 VIP接管成功实验成功后面做故障修复1修复mysqlsystemctl restart mysqld2修复主从#在现主库服务器 Mysql2slave1上 查看二进制文件和同步点show master status;#在原主库服务器 mysql1 执行同步操作-- 在原主库服务器 mysql1 执行同步操作CHANGE MASTER TOMASTER_HOST192.168.64.13,MASTER_USERmyslave,MASTER_PASSWORD123456,MASTER_LOG_FILEmaster-bin.000008,MASTER_LOG_POS1717;3在 manager 节点上修改配置文件app1.cnf再把这个记录添加进去因为它检测掉失效时候会自动消失vi /etc/masterha/app1.cnf......secondary_check_script/usr/local/bin/masterha_secondary_check -s 192.168.64.11 -s 192.168.64.134在 manager 节点上启动 MHAnohup masterha_manager --conf/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /dev/null/var/log/masterha/app1/manager.log 21

相关新闻

最新新闻

客户售后维修记录怎么追溯?维修码+工单+质保一条链,再也不扯皮

客户售后维修记录怎么追溯?维修码+工单+质保一条链,再也不扯皮

干电脑店 **15 年**,售后是我最怕也最在乎的环节。最怕的是客户拿机器来说「刚买就坏」,我一查记录什么都没有;最在乎的是,售后做得好,一个客户能带来一串客户。后来我把销售、维修、质保全部数字化,每一台…

2026/8/6 3:49:15
ESP32图形化开发:LVGL与MicroPython融合方案详解

ESP32图形化开发:LVGL与MicroPython融合方案详解

1. 项目概述:当LVGL遇见MicroPython,在ESP32上构建图形化应用的捷径如果你玩过ESP32,大概率会为它丰富的功能和相对亲民的价格着迷。但当你想要在它上面跑一个漂亮的用户界面,比如在屏幕上显示个菜单、做个仪表盘,或者…

2026/8/6 3:49:15
贵阳观山湖网站建设实战指南企业如何打造高性价比数字化名片

贵阳观山湖网站建设实战指南企业如何打造高性价比数字化名片

在这个互联网深度渗透各行各业的今天,如果你还在问“我们企业需不需要一个官网”,那只能说明你有点掉队了。特别是在贵阳的核心商务区——观山湖,这里的企业节奏快、竞争强,大家对效率和专业度的要求更高。很多人提到“观山湖网站建设”,第一反应可能是贵,或者是觉得这只…

2026/8/6 3:49:15
ADB获取安卓设备IP地址:5种方法详解与自动化脚本实战

ADB获取安卓设备IP地址:5种方法详解与自动化脚本实战

1. 项目概述:为什么我们需要从手机获取IP地址?在移动开发、自动化测试、设备管理乃至日常的网络问题排查中,获取一部安卓手机的IP地址是一个高频且基础的操作。无论是为了通过Wi-Fi进行无线ADB调试,还是为了分析设备在局域网中的网…

2026/8/6 3:49:15
在 Windows Server 2022 上手工安装 OpenAI Codex App

在 Windows Server 2022 上手工安装 OpenAI Codex App

众所周知,OpenAI Codex App 官方主要支持拥有 Microsoft Store 的 Windows 10/11 系统。而 Windows Server 系列(如 Server 2022)由于默认不包含应用商店及相关的运行环境,通常无法直接安装这些应用。 经过研究,我找到…

2026/8/6 3:49:15
JDK 10核心特性解析:var类型推断、G1并行Full GC与AppCDS实战

JDK 10核心特性解析:var类型推断、G1并行Full GC与AppCDS实战

1. 从“大版本”到“小步快跑”:JDK 10的时代背景如果你是一位从Java 5、6、7甚至8时代走过来的开发者,可能还记得当年等待一个“大版本”发布时的期待感。每个大版本都像一场盛宴,带来了语言语法、虚拟机、API库等多个层面的重磅更新。但从J…

2026/8/6 3:44:15