MySQL高可用架构之MHA

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS AI 助手,专业版
RDS Agent(兼容OpenClaw),2核4GB
简介:

  MHA简介:

  MHA是由日本人yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的MySQL高可用方案。MHA能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。

  该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台mysql服务器上,MHA Manager会定时探测集群中的master节点,当master出故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其它的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

  MHA基本机构图如下:

  fc1ee4adf53a4222709f3559ed14f9bb.png

  以上拓扑图展示了如何通过MHA Manager管理多组主从复制。可以将MHA工作原理总结如下:

  (1)从宕机崩溃的master服务器中保存二进制日志事件(binlog events)

  (2)识别含有最新更新的slave

  (3)应用差异的中继日志(relay-log)到其它slave

  (4)应用从master保存的二进制日志事件(binlog events)

  (5)提升一个新的slave为master

  (6)使其它的slave连接新的master进行复制。

  一、部署环境

  大概部署环境如下:(说明:所有系统均为centos7.3,其中server03、server04为server02的从) 

    角色      ip    主机名    类型
监测主机(monitor host) 172.17.5.1 server01
监控复制组
主服务器(master) 172.17.5.2 server02 写入
备用主服务器(candicate master)
172.17.5.3 server03
从服务器(slave) 172.17.5.4 server04

  二、配置hosts本地解析

  ①四台机器配置相同的hosts解析。(也可以在mysql配置文件里配置忽略名字解析skip-name-resolve)

  bafcf15f9762925a7afd995ef4fb1d6e.png

  三、配置四台主机之间ssh免密登陆(都需要配置哦)。

  404e2b49036cc69d7d573d2687140b85.png

  四、配置mysql服务。

  ①在master(server02)主机上配置mysql主配置文件

  0753ab0675fed44e337a43a9a004e36a.png 

  ②在其它三个服务器上配置mysql主配置文件(注意:server-id不一样,其它配置文件都一样)。

  c2ef137c59efc45e3a45e3bc7ea1fcb2.png

  ③配置好主从节点之后,按MYSQL复制配置架构的配置方式将其配置完成并启动master节点和各slave节点,以及为各slave节点启动其IO和SQL线程,确保主从复制运行无误。操作如下:

  在master(server02)服务器上授权slave服务器能连接数据库读取二进制日志事物。

  6668fcba383f3effcded6e1d651a1c8f.png  

  在其它机器上获取master的权限,开启复制功能。(三台机器一样)

  25007d70947db278acdaae05b8a80611.png

  五、搭建MHA环境和配置服务。

  ①在master(server02)服务器上创建MHA管理复制的账号。

  98acd702715b200f8d7fe04b1c2c0ac5.png  

  ②在所有服务器上安装mha4mysql-node(我是下载好安装包使用rpm安装的)

  c7fcb13b5c53ef627d022bff90612e46.png

  ③在监测主机(monitor host)上安装mha4mysql-manager

  67b676e09bc9a1e2f5b26d942a07f436.png  

  ④定义MHA管理配置文件。

  在manager(server01)配置:

  定义一个统一管理的用户和目录,方便以后管理。

  mkdir -p /etc/mha_master/app1

  修改MHA配置文件如下:

  2f1a5b4159a50b61dd2ec345c21aee17.png  

  ⑤在master(server02)和slave(server03、04)创建工作目录

  命令:mkdir /mydata/mha_master/app1

  ⑥检测各节点之间ssh通讯是否ok(server01执行)

  3.png 

  ⑦再次在master(server02)执行mysql授权sql语句。【为了确保各slave服务器节点正常,随时可以成为master服务器】

  1.png

  ⑧masterha_check_repl工具检查mysql主从复制是否成功 

  2.png 

  ⑨启动MHA

  1.png

  五、测试。

  ①停止master(server02)服务器,查看manager(server01)日志。

  systemctl stop mariadb (sserver02)

  1.png

  ②查看备用slave是否为master了。

  1.png

  ③恢复master(server02)。

  1.png

  六、日常操作

  ①校验ssh等效验证
  $ masterha_check_ssh --conf=/etc/masterha/app1.cnf


  ②校验mysql复制
  $ masterha_check_repl --conf=/etc/masterha/app1.cnf


  ③启动mha监控,在master故障时开启自动转移
  $ nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log  < /dev/null 2>&1 &

  ###当有slave节点宕掉的情况是启动不了的,加上--ignore_fail_on_start即使有节点宕掉也能启动mha
  $ nohup masterha_manager --conf=/etc/masterha/app1.cnf  --ignore_fail_on_start > /tmp/mha_manager.log  < /dev/null 2>&1 &


  ④检查启动的状态
  $ masterha_check_status --conf=/etc/masterha/app1.cnf


  ⑤停止mha
  $ masterha_stop  --conf=/etc/masterha/app1.cnf


  ⑥多次failover
  MHA在每次failover切换后会在管理目录生成文件app1.failover.complete ,下次在切换的时候如果由于间隔时间太短导致切换不成功,应手动清理掉。
  rm -rf /var/log/masterha/app1/app1.failover.complete或者通过加上参数--ignore_last_failover来忽略


  ⑦手工failover
  手工failover场景,适用于在master死掉,而masterha_manager未开启情形,如下,指定--master_state=dead
  masterha_master_switch --conf=/etc/masterha/app1.cnf --dead_master_host=192.168.1.6 --master_state=dead --new_master_host=192.168.1.7 --ignore_last_failover


  ⑧手动在线切换,如下,指定--master_state=alive
  masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.1.6 --orig_master_is_new_slave

  masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.1.6 --orig_master_is_new_slave --running_updates_limit=10000 --orig_master_is_new_slave

  表明在切换时原master变为新master的slave节点
  --running_updates_limit=10000 
  切换时候选master如果有延迟的话,mha切换不能成功,加上此参数表示延迟在此时间范围内都可切换(单位为s),但是切换的时间长短是由recover时relay日志的大小决定


本文转自 LUksl 51CTO博客,原文链接:http://blog.51cto.com/19940919/2043408


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
8月前
|
运维 监控 关系型数据库
MySQL高可用方案:MHA与Galera Cluster对比
本文深入对比了MySQL高可用方案MHA与Galera Cluster的架构原理及适用场景。MHA适用于读写分离、集中写入的场景,具备高效写性能与简单运维优势;而Galera Cluster提供强一致性与多主写入能力,适合对数据一致性要求严格的业务。通过架构对比、性能分析及运维复杂度评估,帮助读者根据自身业务需求选择最合适的高可用方案。
|
8月前
|
SQL 监控 关系型数据库
MySQL主从复制:构建高可用架构
本文深入解析MySQL主从复制原理与实战配置,涵盖复制架构、监控管理、高可用设计及性能优化,助你构建企业级数据库高可用方案。
|
9月前
|
运维 监控 搜索推荐
MSE ZooKeeper:Flink 高可用架构的企业级选择
本文深入解析了 Apache Flink 架构中 ZooKeeper 的核心作用,包括 Leader 选举、Checkpoint 管理、作业协调及配置管理等关键功能,并结合金融风控与电商推荐等典型场景,分析了 ZooKeeper 在实际应用中的技术实现。
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
7月前
|
运维 监控 安全
公链开发中的高可用架构设计要点
本指南提供公链高可用架构的可复用流程与模板,涵盖目标拆解、先决条件、分步执行、故障排查及验收标准,结合跨链DApp与量化机器人案例,提升落地效率与系统稳定性。
|
8月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
12月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
3794 57
|
10月前
|
文字识别 运维 监控
架构解密|一步步打造高可用的 JOCR OCR 识别服务
本文深入解析了JOCR OCR识别服务的高可用架构设计,涵盖从用户上传、智能调度、核心识别到容错监控的完整链路,助力打造高性能、低成本的工业级OCR服务。
407 0
架构解密|一步步打造高可用的 JOCR OCR 识别服务
|
11月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
消息中间件 存储 设计模式
RocketMQ原理—5.高可用+高并发+高性能架构
本文主要从高可用架构、高并发架构、高性能架构三个方面来介绍RocketMQ的原理。
3499 21
RocketMQ原理—5.高可用+高并发+高性能架构

推荐镜像

更多