当前位置:首页 > 文章列表 > 数据库 > MySQL > 【赵渝强老师】MySQL高可用架构:MHA

【赵渝强老师】MySQL高可用架构:MHA

来源:SegmentFault 2023-01-28 11:36:58 0浏览 收藏

大家好,今天本人给大家带来文章《【赵渝强老师】MySQL高可用架构:MHA》,文中内容主要涉及到MySQL、数据库、Oracle、HA,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。

一、MHA的组成

(一)MHA中的角色

MHA 服务有两种角色, MHA Manager(管理节点)和 MHA Node(数据节点):

  • MHA Manager:通常单独部署在一台独立机器上管理多个 master/slave 集群(组),每个master/slave 集群称作一个application,用来管理统筹整个集群。
  • MHA Node:运行在每台 MySQL 服务器上(master/slave/manager),它通过监控具备解析和清理 logs 功能的脚本来加快故障转移。主要是接收管理节点所发出指令的代理,代理需要运行在每一个 mysql 节点上。简单讲node就是用来收集从节点服务器上所生成的bin-log。对比打算提升为新的主节点之上的从节点的是否拥有并完成操作,如果没有发给新主节点在本地应用后提升为主节点。

(二)MHA提供的工具

MHA会提供诸多工具程序,其常见的如下所示:

  • Manager节点

  • Node节点(这些工具通常由MHA Manager的脚本触发,无需人为操作)

二、MHA的工作原理

  • 从宕机崩溃的master保存二进制日志事件(binlog events);
  • 识别含有最新更新的 slave ;
  • 应用差异的中继日志(relay log) 到其他 slave ;
  • 应用从 master 保存的二进制日志事件(binlog events);
  • 提升一个 slave 为新 master ;
  • 使用其他的 slave 连接新的 master 进行复制。

三、部署MHA

(一)准备实验环境

  • 三台主机:mysql111、mysql112、mysql113
  • 操作系统:CentOS
  • 配置主机名(/etc/hosts)
  • 配置免密码登录
  • 每台主机安装MySQL

(二)搭建主从环境

  • 每台MySQL开启binlog,设置server-id

create user 'repl'@'192.168.79.%' identified by 'Welcome_1';
grant replication slave on *.* to 'repl'@'192.168.79.%';
flush privileges;
  • 在所有机器上,创建管理账号

create user 'myadmin'@'192.168.79.%' identified by 'Welcome_1';
grant all privileges on *.* to 'myadmin'@'192.168.79.%';
flush privileges;
  • 在主库和从库上,启用GTID

set @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
set @@GLOBAL.GTID_MODE = ON;

参数说明:
GTID是MySQL 5.6的新特性,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID\_Event,指定下一个事务的GTID,然后再写事务的Binlog。主从同步时GTID\_Event和事务的Binlog都会传递到从库,从库在执行的时候也是用同样的GTID写binlog,这样主从同步以后,就可通过GTID确定从库同步到的位置了。也就是说,无论是级联情况,还是一主多从情况,都可以通过GTID自动找点儿,而无需像之前那样通过File\_name和File\_position找点儿了。

  • 在从库上分别配置主从复制命令并开启主从同步

change master to master_host='mysql111',master_user='repl',\
master_password='Welcome_1',master_auto_position=1;

start slave;
  • 在从库上查看主从复制的状态

show slave status\G;

  • 测试主从复制

(三)安装MHA

  • 所有节点安装node软件依赖包和node软件

yum -y install perl-DBD-MySQL 
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  • 在mysql111上安装安装manager软件依赖包

yum install -y perl-Config-Tiny 
yum install -y epel-release 
yum install -y perl-Log-Dispatch 
yum install -y perl-Parallel-ForkManager 
yum install -y perl-Time-HiRes
  • 在mysql111上安装安装manager软件

rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

(四)创建Manager的配置文件

#创建配置文件目录、日志目录
mkdir -p /etc/mha
mkdir -p /var/log/mha/log

#编辑mha配置文件 vi /etc/mha/mha.cnf
[server default]
manager_log=/var/log/mha/log/manager
manager_workdir=/var/log/mha/log
master_binlog_dir=/var/lib/mysql
user=myadmin
password=Welcome_1
ping_interval=2
repl_user=repl
repl_password=Welcome_1
ssh_user=root
[server1]
hostname=mysql111
port=3306
[server2]
hostname=mysql112
port=3306
[server3]
hostname=mysql113
port=3306

(五)检查状态,并开启MHA

  • 检查互信

masterha_check_ssh --conf=/etc/mha/mha.cnf

  • 检查主从复制状态

masterha_check_repl --conf=/etc/mha/mha.cnf

  • 开启MHA-manager

nohup masterha_manager --conf=/etc/mha/mha.cnf > /var/log/mha/log/manager.log &1 &
  • 查看MHA状态

masterha_check_status --conf=/etc/mha/mha.cnf

  • 测试HA高可用的自动切换

在mysql111上,执行shutdown操作
mysqladmin -uroot -pWelcome_1 shutdown

MHA会自动进行主从切换。切换完成后,MHA进程会自动停止运行。

在mysql112和mysql113上观察,执行下面的语句:
show slave status\G;

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于数据库的相关知识,也可关注golang学习网公众号。

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
乘风破浪的程序员们,点进来拒绝原地踏步!乘风破浪的程序员们,点进来拒绝原地踏步!
上一篇
乘风破浪的程序员们,点进来拒绝原地踏步!
匠心之作!《RDS数据库从入门到精通》开放下载!
下一篇
匠心之作!《RDS数据库从入门到精通》开放下载!
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    13次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    22次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    38次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码