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

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

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节点

【赵渝强老师】MySQL高可用架构:MHA
  • Node节点(这些工具通常由MHA Manager的脚本触发,无需人为操作)

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

二、MHA的工作原理

【赵渝强老师】MySQL高可用架构: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

sql;gutter:true; vi /etc/my.cnf log-bin=mysql-binlog server-id=1 (注意:每台MySQL设置不同的server-id)</p> <p>show variables like '%log_bin%';</p> <pre><code> * 在所有机器上,创建主从复制的账号 ;gutter:true;
create user ‘repl’@’192.168.79.%’ identified by ‘Welcome_1’;
grant replication slave on *.* to ‘repl’@’192.168.79.%’;
flush privileges;

  • 在所有机器上,创建管理账号

sql;gutter:true; create user 'myadmin'@'192.168.79.%' identified by 'Welcome_1'; grant all privileges on <em>.</em> to 'myadmin'@'192.168.79.%'; flush privileges;</p> <pre><code> * 在主库和从库上,启用GTID ;gutter:true;
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找点儿了。

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

sql;gutter:true; change master to master_host='mysql111',master_user='repl',\ master_password='Welcome_1',master_auto_position=1;</p> <p>start slave;</p> <pre><code> * 在从库上查看主从复制的状态 ;gutter:true;
show slave status\G;

【赵渝强老师】MySQL高可用架构:MHA
  • 测试主从复制

(三)安装MHA

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

sql;gutter:true; yum -y install perl-DBD-MySQL rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm</p> <pre><code> * 在mysql111上安装安装manager软件依赖包 ;gutter:true;
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软件

sql;gutter:true; rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm</p> <pre><code> ## (四)创建Manager的配置文件 ;gutter:true;
#创建配置文件目录、日志目录
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

  • 检查互信

sql;gutter:true; masterha_check_ssh --conf=/etc/mha/mha.cnf</p> <pre><code> ![](https://oscimg.oschina.net/oscnet/up-b7e5c53a4909e7fdf4c0eadd46b56527583.png) * 检查主从复制状态 ;gutter:true;
masterha_check_repl –conf=/etc/mha/mha.cnf

【赵渝强老师】MySQL高可用架构:MHA
  • 开启MHA-manager

sql;gutter:true; nohup masterha_manager --conf=/etc/mha/mha.cnf > /var/log/mha/log/manager.log < /dev/null 2>&1 &</p> <pre><code> * 查看MHA状态 ;gutter:true;
masterha_check_status –conf=/etc/mha/mha.cnf

【赵渝强老师】MySQL高可用架构:MHA
  • 测试HA高可用的自动切换

sql;gutter:true; 在mysql111上,执行shutdown操作 mysqladmin -uroot -pWelcome_1 shutdown</p> <p>MHA会自动进行主从切换。切换完成后,MHA进程会自动停止运行。</p> <p>在mysql112和mysql113上观察,执行下面的语句: show slave status\G;

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

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

Original: https://www.cnblogs.com/collen7788/p/13365812.html
Author: 赵渝强老师
Title: 【赵渝强老师】MySQL高可用架构:MHA

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713293/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • HDU 4832 Chess (DP)

    Chess Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota…

    技术杂谈 2023年5月30日
    079
  • 8086汇编 jcxz 指令

    8086汇编 jcxz 指令 指令格式:jcxz 标号功能:如果(cx)=0,则转移到标号处执行当(cx)≠0时,什么也不做(程序向下执行) 当(cx)=0时,(IP)=(IP)+…

    技术杂谈 2023年6月1日
    084
  • Base64编码出现换行符

    Base64是一种字符串编码格式,Base64采用A-Z a-z 0-9 “+” “/”这一共64个字符来编码原始字符(还有垫字符&…

    技术杂谈 2023年5月31日
    079
  • 提交自己开发的R包到CRAN或Bioconductor

    2023年02月09日 Note:要在包里加入新的data,就必须同名,在R里的名字要和文件名一模一样,否则会报错。(Error: ‘mouse.house.keepi…

    技术杂谈 2023年5月31日
    0114
  • SatBox620 Info

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    092
  • 打卡汇报

    无意间浏览了liluvu的博客,大概表达了自己意志力不够坚强,想提高自己的身体素质和表达能力,现在坚持做(锻炼、背诵诗词、朗读(朗读唠叨训练)),看到这,觉得和自己有几分相似,正如…

    技术杂谈 2023年5月31日
    087
  • PyTorch 介绍 | 构建神经网络

    神经网络由对数据进行操作的layers/modules组成。torch.nn 命名空间提供了所有你需要的构建块,用于构建你自己的神经网络。PyTorch的每一个module都继承自…

    技术杂谈 2023年7月25日
    072
  • SQL52 获取employees中的first_name

    本题链接表结构如下所示(内容不完整):额外的要求是按照first_name最后两个字母升序进行输出。这里需要用到MySQL的字符串处理函数RIGHT。RIGHT函数的语法如下所示:…

    技术杂谈 2023年7月11日
    065
  • zookeeper_overview

    概述 zk 是一个开源的,分布式协调服务,它的目的就是为了服务于分布式应用。zk 允许分布式应用通过 zk 的节点进行相互协调,常见的有配置同步、分布式锁、微服务注册与发现等等。 …

    技术杂谈 2023年7月24日
    091
  • 故事篇:终于给老婆讲明白什么是logback了!

    故事会迟到,但他从不会缺席。今天的故事开始了,你准备好了吗? 前奏 简单介绍一下我的老婆:集智慧与美貌于一身的女子——阿狸,一句”我们心有灵犀,不是吗?”让…

    技术杂谈 2023年7月11日
    072
  • quartz框架(五)-Trigger相关内容

    上篇博文,博主介绍了Job的相关内容。本篇博文,博主将介绍Trigger相关的内容。 Trigger是触发器的意思,它只定义Trigger相关属性的Get方法。一个Trigger只…

    技术杂谈 2023年7月24日
    069
  • 心态崩了,我怎么知道实际生产环境的 B+ 树索引有多少层?

    Q:在实际生产环境中,InnoDB 中一棵 B+ 树索引一般有多少层?可以存放多少行数据? 关于这个问题最近好像在牛客上经常看到,感觉没啥意义,可能主要考察的是对 B+ 索引的理解…

    技术杂谈 2023年7月25日
    0106
  • nodejs参数的处理与用户的交互

    解析脚本参数 作为脚本或者命令行工具,一般都需要支持不同的用户参数。默认参数被保存在process.argv的数组中,如下:[ nodeBinary, script, arg0, …

    技术杂谈 2023年5月31日
    0102
  • 阿里二面算法题

    最长的括号子串 问题描述 给出一个长度为 n 的,仅包含字符 ‘(‘ 和 ‘)’ 的字符串,计算最长的格式正确的括号子串的长度。 示…

    技术杂谈 2023年7月25日
    070
  • QT分析之WebKit

    1 QtWebKitd4.dll!WebCore::MainResourceLoader::loadNow(WebCore::ResourceRequest & r={…..

    技术杂谈 2023年5月31日
    076
  • EBS多语言小地球

    posted @2018-06-03 10:24 全威儒 阅读(565 ) 评论() 编辑 Original: https://www.cnblogs.com/quanweiru/…

    技术杂谈 2023年6月1日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球