`

【赵强老师】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;

 

分享到:
评论

相关推荐

    传智播客 赵强 Oracle课件

    8. **高可用性**:熟悉Oracle的高可用性解决方案,如RAC(实时应用集群)、Data Guard和GoldenGate。这些技术可以确保数据库的连续运行,减少服务中断。 9. **数据库管理**:学习数据库的日常管理任务,如空间管理...

    赵强老师的Oracle课件

    想要好好地学习Oracle数据库的朋友呀,你错过了她就太不值得了。里面有好多的Oracle操作命令可能你都没接触过吧。好了,话不多多说。坚信资料不错!你,值得拥有!OK.还有,之所有要你2分打赏,是我给了你这么好的...

    精通JSP编程 作者赵强 编

    精通JSP编程 作者赵强 编 12-18节

    精通JSP编程 作者赵强

    《精通JSP编程》是赵强先生的一部深入解析JSP技术的专业著作,该书针对JSP编程进行了全面且深入的讲解,旨在帮助读者掌握JSP的核心概念和技术,提升Web应用开发能力。根据提供的文件名列表,我们可以推测书籍的章节...

    [1120][赵强精通JSP编程][37M]

    根据提供的文件信息,我们可以推断出这是一份与Java Server Pages (JSP)相关的学习资料介绍,特别是关于赵强编写的《精通JSP编程》这本书的相关信息。下面将基于这个理解来生成相关知识点。 ### 一、JSP基础概念 ...

    qfedu-Java架构学习路线与大纲

    - 高并发、高性能、高可用业务解决方案设计。 - 系统与平台的性能优化方法。 - 职业生涯规划与发展路径选择。 - **技术专题模块**:课程分为20大章节,涵盖近100个技术专题模块,每个模块均由业内资深架构师深入...

    10天掌握MongoDB

    MongoDB是一种流行的NoSQL数据库,它以其高性能、高可用性以及易扩展的特性在现代数据库系统中占据了一席之地。本文将从NoSQL的基础概念出发,逐步深入介绍MongoDB的核心特性、架构、安装、数据操作和管理等方面的...

    Oracle学习笔记(传智播客 赵强)

    5. **多表查询与子查询的选择**:当两者都能实现需求时,尽量选择多表查询,因为它只需要对数据库进行一次操作,效率通常更高。 6. **处理NULL值**:在Oracle中,NULL表示无效、未指定或未知的值,它不等于空格或0...

    day2013-0110-webLogic配置和集群(赵强).zip

    总结,"day2013-0110-webLogic配置和集群(赵强)"这个资料包涵盖了WebLogic的基础配置、集群搭建、高可用性设置以及一些高级特性的讲解。对于希望深入理解和操作WebLogic的用户来说,这是一份非常有价值的参考资料。...

    Oracle数据库赵强视频教程【3天】

    教程名称:Oracle 数据库赵强视频教程【3天】教程目录:【】Oracle安装与管理、SQL语句(赵强)【】Orcale存储过程jdbc与Orcale大文本操作等(赵强)【】SQL简单查询触发器视图(赵强)  资源太大,传百度网盘了,链接在...

    oracle内部培训教材(来自传智播客学员)

    其他高可用性解决方案如Data Guard则提供了灾难恢复保障。 十、Oracle存储结构 深入理解Oracle的数据块、区、段、表空间等存储结构,有助于合理规划数据库空间,优化I/O性能。 这份"Oracle内部培训教材"将涵盖以上...

    从零开始oracle

    **联机分析处理(OLAP)**:一种针对决策支持的高性能数据分析方法,用于快速、稳定、一致地执行多维分析查询。 **数据仓库**:用于收集和存储历史数据以供分析使用的数据库。它包含了来自不同源系统的数据,并且...

    信息存储技术的发展赵强.doc

    磁盘阵列通过RAID技术实现容量和速度的提升,同时提高数据的可用性和安全性。此外,大规模集群存储如Google的存储系统,以及对等存储(P2P)网络,利用分布式存储的优势,提供大规模、低成本的数据服务。 随着硬件...

    LoadRunner性能测试巧匠训练营-完整版(带目录)-赵强邹伟伟

    《LoadRunner性能测试巧匠训练营》是一本深入讲解LoadRunner性能测试的教材,由赵强和邹伟伟两位专家共同编著。该资源提供的是完整版,且无需密码即可解压阅读,对于想要学习和提升LoadRunner性能测试技能的人来说,...

    二年级数学生活中的大数赵强PPT学习教案.pptx

    数位顺序表的展示则明确指出了个位、十位、百位、千位以及更高的万位等,这是基础数学教育中的关键概念。 此外,教案中可能还包含了练习题目,如填空题,让学生填写相应数量级的数字,以巩固他们对数位和数量级的...

    前端工程化 体系设计与实践 高清完整版

    本书由周爱民老师倾情作序,美团技术总监赵强、搜狐高级技术经理邵充、Facebook软件工程师邓凌飞、ofo前端架构师代学辉联袂力荐。 2.本书系统、全面地介绍了前端工程体系的各个环节,包括设计要点和实践经验。全书...

    java代码-46 赖赵强

    【标题】"java代码-46 赖赵强" 暗示这是一份与Java编程相关的代码示例,可能由一位名为赖赵强的开发者编写或分享。这个标题可能指的是第46个编程练习、问题解决方案或者是某个功能模块的实现。在Java开发中,代码...

Global site tag (gtag.js) - Google Analytics