【赵渝强老师】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节点

- 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
vi /etc/my.cnf
log-bin=mysql-binlog
server-id=1 (注意:每台MySQL设置不同的server-id) show variables like '%log_bin%';
- 在所有机器上,创建主从复制的账号
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 < /dev/null 2>&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;


【赵渝强老师】MySQL高可用架构:MHA的更多相关文章
- 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡
目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) 2 ...
- MySQL高可用架构-MHA环境部署记录
一.MHA介绍 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司) ...
- mysql高可用架构MHA搭建(centos7+mysql5.7.28)
无论是传统行业,还是互联网行业,数据可用性都是至关重要的,虽然现在已经步入大数据时代,nosql比较流行,但是作为数据持久化及事务性的关系型数据库依然是项目首选,比如mysql. 现在几乎所有的公司项 ...
- mysql高可用架构 -> MHA部署-04
MHA架构图 本次MHA的部署基于GTID复制成功构建,普通主从复制也可以构建MHA架构. 下载所需的软件包 mkdir /server/tools -p //创建存放包的目录 [root@db01 ...
- mysql高可用架构 -> MHA主从复制-03
GTID复制技术说明 GTID的全称为 global transaction identifier ,可以翻译为全局事务标示符,GTID在原始master上的事务提交时被创建.GTID需要在全局的主- ...
- mysql高可用架构 -> MHA配置binlog-server-06
前期准备 1.准备一台新的mysql实例(db03),GTID必须开启. 2.将来binlog接收目录,不能和主库binlog目录一样 停止mha masterha_stop --conf=/etc/ ...
- mysql高可用架构 -> MHA配置VIP漂移-05
VIP漂移的两种方式 1)通过keepalived的方式,管理虚拟IP的漂移 2)通过MHA自带脚本方式,管理虚拟IP的漂移 MHA脚本方式 虚拟ip漂移的脚本下载地址 -> wget http ...
- mysql高可用架构 -> MHA简介-01
作者简介 松信嘉範:MySQL/Linux专家2001年索尼公司入职2001年开始使用oracle2004年开始使用MySQL2006年9月-2010年8月MySQL从事顾问2010年-2012年 D ...
- mysql高可用架构 -> MHA环境准备-02
环境准备 环境检查(三个测试节点的环境都应该是一样的,只有ip不同) [root@db01 bin]# cat /etc/redhat-release //系统版本 CentOS Linux rele ...
- mysql高可用架构mha之master_ip_failover脚本
脚本如下: #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my ...
随机推荐
- Java maven构建命令使用总结
实践环境 Apache Maven 3.0.5 (Red Hat 3.0.5-17) maven构建生命周期 学习Maven构建命令之前,我们不烦先简单了解下Maven构建生命周期. Maven基于构 ...
- 计算机二级考试 C语言篇
本篇仅适用于计算机二级考试C语言篇 首先介绍一下二级考试时间问题(以本人考试2022年为例): 一. 2022年全国计算机二级考试时间 2022年全国计算机考试举办4次,(3月.5月.9月.12月 ...
- fasterWhisper和MoneyPrinterPlus无缝集成
MoneyPrinterPlus之前使用的是各种云厂商的语音识别服务来进行语音的视频和字幕的识别工作. 但是很多小伙伴说云服务用不起. 那么没办法,MoneyPrinterPlus上线最新版本,支持f ...
- 【Hessian】轻量级分布式通信组件
参考自简书 https://www.jianshu.com/p/9136aa36cffb 案例场景为单向通信 A 和 B两个应用服务, B需要调用A的接口完成业务需求 那么A服务角色就是服务端,提供给 ...
- window系统使用经验:新买的window11初始化时最好要选择用Microsoft账户激活,而不要用local账户激活
Windows系统初始化时有两种类型的账户可以选择,一种时Microsoft账户,一种时local账户,Microsoft账户需要联网初始化,而local账户则和传统的初始化方式一致,即账号信息保存在 ...
- 如何访问SCI-Hub上的资源?
答案: 使用tor访问.onion网络资源. tor 下载地址: https://www.torproject.org/ 如果不使用tor方式访问可能会无法访问,被提示:
- PyTorch+昇腾 共促AI生态创新发展
原文链接: https://mp.weixin.qq.com/s/s8jNzTo0DM_LjyUwYDVgGg ============================================ ...
- ChatGPT到底有用没用?—— 个人观点:有用,但不多
今天接到在大连某高校任职的师弟电话,师弟十分喜欢用ChatGPT,尤其是其文字自动生成的功能,这对于我们这种文字工作者来说简直就是"福音",但是我对这个观点却是有所保留. 当年区块 ...
- php 常用文件操作
判断文件或文件夹是否存在 file_exists() 打开文件 fopen() 关闭文件 fclose() 判断是否可写入 is_writable() 写入数据 fwrite() 测试文件指针是否到了 ...
- [POI2015] POD 题解
前言 题目链接:洛谷. 题意简述 长度为 \(n\) 的一串项链,每颗珠子是 \(k\) 种颜色之一.第 \(i\) 颗与第 \(i-1, i+1\) 颗珠子相邻,第 \(n\) 颗与第 \(1\) ...