MHA报SSH不可达并非网络问题,而是要求所有节点用同一密钥无密码直连、禁用ssh config别名、开启PubkeyAuthentication且显式配置ssh_user;Orchestrator拓扑卡住因report_host未设真实IP或权限不足;切换后应用连不上旧IP是因MHA不处理重定向,需VIP/arpping或DNS API更新。

MySQL主从切换失败时,MHA 报 SSH is not reachable 怎么快速定位
这不是网络连通性问题,而是 MHA 对 SSH 配置有隐含要求:所有节点(包括 manager)必须能用**同一组密钥无密码登录彼此**,且 ssh -o ConnectTimeout=5 -o BatchMode=yes user@host 必须秒级返回成功。
- 检查
~/.ssh/config是否存在别名或 ProxyCommand,MHA不读它,必须用真实 IP + 端口直连 - 确认
sshd_config中PermitEmptyPasswords no和PasswordAuthentication no已设,但PubkeyAuthentication yes必须开启 -
MHA默认用root用户检测,若实际用普通用户(如mysql),需在app1.cnf里显式写ssh_user=mysql - manager 节点上执行
masterha_check_ssh --conf=/etc/mha/app1.cnf,比看日志更快暴露哪台连不上
Orchestrator 的拓扑发现总卡在 Fetching replication hosts
本质是 Orchestrator 没法从被监控实例的 SHOW SLAVE HOSTS 或 performance_schema.replication_connection_configuration 里拿到完整从库列表,尤其当从库关了 report_host 或用了非标准端口。
- 所有 MySQL 实例必须配置
report_host=真实可路由IP(不能是127.0.0.1或localhost),且report_port显式写对 - 如果用了 Docker 或 K8s,宿主机防火墙和容器 network mode 会影响 Orchestrator 主动探测 —— 它不是靠被监控端上报,而是主动连每个实例的
3306(或自定义端口)去查复制关系 - 确认
orchestrator用户有REPLICATION CLIENT权限,否则SHOW SLAVE STATUS查不到主库信息 - 启动时加
-debug参数,看日志里具体卡在哪个 IP 的SELECT * FROM performance_schema.replication_applier_status_by_coordinator
MHA 切换后应用连不上新主库,Can't connect to MySQL server on 'old_master_ip'
这不是 DNS 缓存,是 MHA 自身不处理客户端连接重定向 —— 它只改 VIP 或更新 conf 文件,而绝大多数应用根本不知道 VIP 是啥,更不会监听文件变化。
- VIP 方案必须确保:切换脚本里调用了
arping -c 3 -w 5 -I eth0 $new_master_vip,否则交换机/宿主机 ARP 表还是指向旧主 - 如果用 DNS,
MHA的master_ip_failover_script必须调用 API 更新内网 DNS(如 CoreDNS 的 /api/v1/records),不能只改本地/etc/hosts - 最省事但易被忽略的一点:检查应用连接串里的
host是写死 IP 还是域名 —— 写死 IP 的应用,除非重启或支持运行时 reload,否则永远连旧地址
Orchestrator Web 界面显示拓扑正常,但 curl -s http://orch:3000/api/topology/10.0.1.10:3306 返回空数组
说明 Orchestrator 后端没把这台实例纳入监控范围,Web 界面显示的是缓存或历史快照,不是实时状态。
- 执行
orchestrator -c discover -i 10.0.1.10:3306手动触发发现,再查 API;如果报Instance not found,代表该实例不在orchestrator的已知集群列表里 - 检查
orchestrator.conf.json中DiscoverByShowSlaveHosts是否为true,若为false,它只会从已知主库出发递归发现,不会扫全网 - 确认该实例的
server_id在整个集群中唯一,重复会导致 Orchestrator 拒绝识别
MHA 和 Orchestrator 都不自动解决客户端重连逻辑,这点容易被架构图带偏 —— 图上画个“VIP”或“API”,不代表应用真能感知。真正落地时,得盯住应用层怎么配合切换,而不是只盯着数据库组件跑通。


















