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

【赵强老师】MySQL高可用架构:MHAMHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节

【赵强老师】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
vi /etc/my.cnf
log-bin=mysql-binlog
server-id=1           (注意:每台MySQL设置不同的server-id)

show variables like "%log_bin%";

代码100分

  • 在所有机器上,创建主从复制的账号
代码100分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
代码100分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 statusG;

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

  • 测试主从复制

(三)安装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

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

  • 检查主从复制状态
masterha_check_repl --conf=/etc/mha/mha.cnf

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

  • 开启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

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

  • 测试HA高可用的自动切换
在mysql111上,执行shutdown操作
mysqladmin -uroot -pWelcome_1 shutdown

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

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

 

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7165.html

(0)
上一篇 2023-03-25
下一篇 2023-03-25

相关推荐

  • MySQL 存储引擎

    MySQL 存储引擎简介:存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。 常见分类有:InnoDB、MyISAM、M…

    2023-03-31
    160
  • Python界面长什么样子

    Python界面长什么样子Python作为一门广泛应用的编程语言,不同于其他编程语言,它具备强大的图形界面库。Python的图形界面主要采用的是Tkinter、PyQt、wxPython等库,让我们能够实现各种各样的用户界面。因此,本文将带您深入了解Python界面是如何制作的,以及它的外观是怎样的。

    2024-05-11
    71
  • MySQL事务介绍

    MySQL事务介绍什么是事务 事务的概念 从业务层面上来说,事务就是一个最小的不可分割的单元,通常一个事务对应的是一个完整的业务(比如银行的转账操作)。 为什么要有事务 仍以银行转账为例加以说明,比如我要从账号A转账1

    2023-02-13
    151
  • 大数据学习路线[亲测有效]

    大数据学习路线[亲测有效]前言 数据科学部为想从事大数据方向学习的小伙伴总结了一下大数据的学习路线,供大家学习参考。由于大数据是一个基础门槛较高就业前景较好的学习方向。所以打算学习大数据的小伙伴要加油啦! 大数据学习路线: 首

    2023-03-01
    137
  • Python编写无限循环的最佳实践

    Python编写无限循环的最佳实践Python支持for循环和while循环两种方式。for循环适用于固定次数的循环,而while循环则适用于循环次数不确定的情况,因此在编写无限循环的时候,通常采用while循环。

    2024-02-17
    92
  • Python Future概述

    Python Future概述Python语言自问世以来,一直得到了广泛的应用和支持,其在多种领域和行业中都有着重要的地位。而这个支持和应用的趋势还在不断加强,我们能够看到许多的技术、工具、框架、语法等等,都在不断的壮大和完善。在这篇文章中,我们将探讨Python的未来发展趋势,了解在众多的技术中,Python将如何持续的发展和壮大。

    2024-05-22
    57
  • Python time.ctime函数的实现方法和用法

    Python time.ctime函数的实现方法和用法在Python语言中,time模块提供了日期和时间的处理函数,其中ctime()函数就是其中之一。ctime()函数可以将一个以秒数为参数的时间表示转化为一个可读的字符串。本文将介绍ctime()函数的实现方法和用法,以帮助读者更好地使用Python处理时间。

    2023-12-21
    113
  • Python中Tuple的不可变特性

    Python中Tuple的不可变特性Tuple是一种有序的且不可变的集合,用小括号()括起来。Tuple可以包含不同类型的元素,比如数字、字符串、列表等。以下是Tuple的基本操作:

    2024-01-24
    86

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注