MHA的介绍和测试(一)
MHA的介绍
MySQL的MHA:MySQL的高级可用性管理器和工具
MHA的主要目标是在短(通常为10-30秒)的停机时间内自动化主故障转移和slave升级,
不受复制一致性问题的困扰,不需要花费大量的新服务器,没有性能损失,
没有复杂性(易于安装),并且不改变现有的部署。
MHA还提供了一种调度在线主切换的方式:
将当前正在运行的主切换到一个新的主服务器,
在几秒钟内(0.5-2秒)的停机时间(仅阻塞写入)。
MHA提供了以下功能,并且在许多部署中都很有用,
比如高可用性、数据完整性、几乎不间断的主维护。
自动主监视和故障转移MHA有一个功能,
可以在现有的复制环境中监控MySQL主服务器,检测主故障,并自动执行主故障转移。
即使一些slave服务器 没有收到最新的中继日志事件,
MHA也会自动识别来自最新slave服务器的不同的中继日志事件,
并将不同的事件应用于其他的slave服务器。所以所有的从服务器都是一致的。
MHA通常可以在几秒内进行故障转移(9-12秒,以检测主故障,可以选择7-10秒来关闭主机,
以避免出现分裂的大脑,在向新主人应用微分传递日志时需要几秒钟,
所以总的停机时间通常是10-30秒)。
另外,您可以在配置文件中定义一个特定的从服务器作为一个主服务器,做备份(设置优先级)。
由于MHA修复了在从服务器之间的一致性,您可以将任何一个从服务器变成主服务器,
而一致性问题(可能导致突然的复制失败)将不会发生。交互式(手动)主故障转移,
您也可以使用MHA进行故障转移,而不是用于监视主机。
您可以使用MHA进行主故障转移交互。
还支持非交互式主故障恢复非交互式主故障转移(不监视主机,而是自动进行故障转移)。
这个特性非常有用,特别是当您已经使用了一个监控MySQL master的软件时。
例如,您可以使用起搏器(心跳)检测主故障和虚拟ip地址接管,
并使用MHA进行主故障转移和从升级。
在许多情况下,在线切换主机到不同的主机,有必要将现有的主机迁移到不同的机器上
(例如,当前的主机在RAID控制器或RAM中有h/w问题,您想用更快的机器来替换)。
这不是主崩溃,但是需要进行主维护来实现这一点。
计划的主维护会导致停机(至少您不能写master),所以应该尽可能快地完成。
另一方面,您应该非常小心地阻塞/杀死当前运行的会话,
因为不同主人之间的一致性问题可能会发生
(i.i。e“更新主1,更新主2,提交主1,在主2上犯错误”将导致数据不一致)。
快速主开关和优美的阻塞写入都是必需的。
MHA提供了一种方法来实现这一点。
您可以在编写器块的0.5-2秒内优雅地切换大师。
在许多情况下,0.5-2秒的作者停机时间是可以接受的,
您甚至可以在不分配计划维护窗口的情况下切换主人。
这意味着您可以采取一些措施,比如升级到更高版本、更快的机器等等
MHA高可用集群测试:
manager:192.168.133.141
master1: 192.168.133.138
master2:192.168.133.139 (为master1的备用)
slave2: 192.168.133.140
从MHA自动failover,我们手动failover,在线切换三种方式来介绍MHA的工作情况
自动failover模拟操作步骤
1 使用sysbench生成测试数据
yum install sysbench -y
2 主库(192.168.133.138)上进行sysbench数据生成,在sbtest库下生成sbtest表,共100W记录
sysbench --test=oltp --oltp-table-size=1000000
--oltp-read-only=off --init-rng=on --num-threads=16
--max-requests=0 --oltp-dist-type=uniform --max-time=1800
--mysql-user=root --mysql-socket=/tmp/mysql.sock
--mysql-password=123456 --db-driver=mysql --mysql-table-engine=innodb
--oltp-test-mode=complex prepare
3 停掉slave sql线程,模拟主从延时,另外一台slave我们没有停止io线程,所以还在继续接收日志。
stop slave io_thread;
4模拟sysbench压力测试
主库上(192.168.133.138)进行压力测试,持续时间为3分钟,产生大量的binlog
sysbench --test=oltp --oltp-table-size=1000000
--oltp-read-only=off --init-rng=on --num-threads=16
--max-requests=0 --oltp-dist-type=uniform --max-time=180
--mysql-user=root --mysql-socket=/tmp/mysql.sock
--mysql-password=123456 --db-driver=mysql --mysql-table-engine=innodb
--oltp-test-mode=complex run
5开启master2(192.168.0.60)上的IO线程,追赶落后于master的binlog
start slave io_thread;
6杀掉主库mysql进程,模拟主库发生故障,进行自动failover操作
pkill -9 mysqld
7查看MHA切换日志,了解整个切换过程,在192.168.133.141上查看日志
cat /var/log/masterha/app1/manager.log
看到最后的Master failover to 192.168.0.60(192.168.0.60:3306) completed successfully.
说明备选master现在已经上位了。
包括以下的步骤
1.配置文件检查阶段,这个阶段会检查整个集群配置文件配置
2.宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作(这个我这里还没有实现,需要研究)
3.复制dead maste和最新slave相差的relay log,并保存到MHA Manger具体的目录下
4.识别含有最新更新的slave
5.应用从master保存的二进制日志事件(binlog events)
6.提升一个slave为新的master进行复制
7.使其他的slave连接新的master进行复制
切换后监控会停止
masterha_check_status --conf=/etc/masterha/app1.cnf
*******************************************************************
********************************************************************
#####################################################################
在线迁移考虑问题:
1.自动识别master和slave的问题(master的机器可能会切换),
如果采用了vip的方式,基本可以解决这个问题。
2.负载均衡的问题(可以定义大概的读写比例,每台机器可承担的负载比例,
当有机器离开集群时,需要考虑这个问题)
MHA需要满足的条件:
1.所有slave的IO线程都在运行
2.所有slave的SQL线程都在运行
3.所有的show slave status的输出中
Seconds_Behind_Master参数小于或者等于running_updates_limit秒,
如果在切换过程中不指定running_updates_limit,那么默认情况下running_updates_limit为1秒。
4.在master端,通过show processlist输出,
没有一个更新花费的时间大于running_updates_limit秒
****************************************************************************************
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
****************************************************************************************
步骤:
停掉MHA监控
masterha_stop --conf=/etc/masterha/app1.cnf
进行在线切换操作(模拟在线切换主库操作,
原主库变为slave,另一个提升为新的主库)
masterha_master_switch --conf=/etc/masterha/app1.cnf
--master_state=alive --new_master_host=192.168.0.60
--new_master_port=3306 --orig_master_is_new_slave
--running_updates_limit=10000
--orig_master_is_new_slave 切换时加上此参数是将原master变为slave节点,
如果不加此参数,原来的 master 将不启动
--running_updates_limit=10000,故障切换时,
候选master如果有延迟的话, mha 切换不能成功,
加上此参数表示延迟在此时间范围内都可切换(单位为s),
但是切换的时间长短是由recover 时relay 日志的大小决定
由于在线进行切换需要调用到master_ip_online_change这个脚本,
但是由于该脚本不完整,需要自己进行相应的修改,
脚本中new_master_password这个变量获取不到,导
致在线切换失败,所以进行了相关的硬编码,
直接把mysql的root用户密码赋值给变量new_master_password,
这个脚本还可以管理vip
**************************************************************************
***************************************************************************
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
四.修复宕机的Master
通常情况下自动切换以后,原master可能已经废弃掉,
待原master主机修复后,如果数据完整的情况下,
可能想把原来master重新作为新主库的slave,
这时我们可以借助当时自动切换时刻的MHA日志来完成对原master的修复
grep -i "All other slaves should start" manager.log
Mon Apr 21 22:28:33 2014 - [info]
All other slaves should start replication from here.
Statement should be:
CHANGE MASTER TO MASTER_HOST='192.168.133.139', MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000022', MASTER_LOG_POS=506,
MASTER_USER='backup', MASTER_PASSWORD='backup';
获取上述信息后,直接在修复后的master上执行change master to相关操作,重新作为从库。
MHA的介绍和测试(一)的更多相关文章
- Caffe介绍与测试及相关Hi35xx平台下caffe yolox的使用参考
这一篇我大概讲讲Caffe框架下MNIST的实现与基于Hi35xx平台下caffe yolox的运用等,供大家参考 1.Caffe介绍与测试 caffe全称Caffe Convolutional Ar ...
- Centos 7 Puppet之foreman介绍安装测试
一.简介 1.前言(引用一下网上的资料) 随着企业的 Linux 系统数量越来越多,管理问题便成为一个相对麻烦并需要急 迫解决的问题,这里有 2 个 Key Message:1)统一管控体系非常重要, ...
- H5介绍与测试设计
近期的项目中接触的基本都为H5的测试工作,从项目初期评审到测试工作的完成过程中,遇到了很多问题是与APP测试方法不太相同的地方,在此希望总结测试过程遇到的问题及新思路给之后会接触到H5测试的同学. 这 ...
- Freemodbus介绍及测试
Freemodbus 1.5 Freemodbus文档1:模块 Freemodbus文档2:寄存器 Freemodbus文档3:配置 Freemodbus文档4:工具函数 Freemodbus文档5: ...
- 017:磁盘I/0介绍和测试
一. 磁盘 1. 磁盘的访问模式 顺序访问 顺序的访问磁盘上的块: 一般经过测试后,得到该值的单位是MB/s,表示为磁盘带宽,普通硬盘在 50~ 100 MB/s 随机访问 随机的访问磁盘上的块 也可 ...
- JUnit学习之hamcrest、testSuite介绍及测试原则
[转自] http://huihai.iteye.com/blog/1994270 上一节说了junit的一些基本概念,主要使用assert做一些基本的判断.但很多时候使用assert做判断,并不方便 ...
- mysql MHA高可用测试
[环境介绍] 系统环境:Red Hat Enterprise Linux 7 + 5.7.18 + MHA version 0.57 [测试步骤:自动切换] 当前数据库状态: 系统 IP 主机名 备注 ...
- MySQL MHA 搭建&测试(环境:CentOS7 + MySQL5.7.23)
MySQL MHA架构介绍: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Face ...
- USB系列之七:ASPI介绍及命令测试
在以前的一篇博文<关于构建DOS下编程平台的总结>中曾经介绍了一种在DOS下驱动U盘的方法,我们大致回顾一下.在config.sys中加入两个驱动程序,就可以驱动U盘:device = a ...
随机推荐
- SetForegroundWindow、SetActiveWindow、SetFocus 如何将一个某个窗口提到最顶层
http://hi.baidu.com/gookings/item/2b7912ca8d5b3625a0b50aa2 SetForegroundWindow 函数功能:该函数将创建指定窗口的线程设置到 ...
- (转)ASIC设计中各个阶段需要注意的问题——节选
ASIC 的复杂性不断提高,同时工艺在不断地改进,如何在较短的时间内开发一个稳定的可重用的ASIC芯片的设计,并且一次性流片成功,这需要一个成熟的ASIC 的设计方法和开发流程.本文结合NCveril ...
- ajax传给springMVC数据编码集问题
前台 ajax: $.ajax("${pageContext.request.contextPath}/hello",// 发送请求的URL字符串. { dataType : &q ...
- 洛谷 P2292 [HNOI2004]L语言
题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...
- java中的堆与栈
Java 中的堆和栈 Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配 . 当在一段代码块定义一个变量时,Java就在栈中 ...
- JavaWeb项目实现图片验证码
一.什么是图片验证码? 可以参考下面这张图: 我们在一些网站注册的时候,经常需要填写以上图片的信息. 这种图片验证方式是我们最常见的形式,它可以有效的防范恶意攻击者采用恶意工具,调用“动态验证码短信获 ...
- layuiadmin更新echarts
发现layuiadmin中echarts版本有些老了,对其中的echarts进行了更新: 查询当前echarts版本: console.log(echarts.version); 1.前往echart ...
- 关于“xx.xx已被OS X使用,无法打开”的问题
Mac电脑上的文件拷贝到移动硬盘,有时候会出现“xx.xx已被OS X使用,无法打开”的问题. 解决办法: 1.打开终端(或在Mac搜索里面输入Terminal); 2.在终端里输入 xattr -l ...
- C#获得DataTable的key值
//获得dataTable的key值 List<string> keyList = new List<string>(); ; i < dt.Columns.Count; ...
- vue 封装分页组件
分页 一般都是调接口, 接口为这种格式 {code: 0, msg: "success",…} code:0 data:{ content:[{content: "11& ...