说简单也简单的MHA高可用介绍
文章目录
前言
一、MHA概述
1.1: 什么是MHA
1.2:MHA场景
1.3:MHA的优点
二、MHA部署实验
2.1:实验思路
2.2:故障模拟
2.3:实验环境
2.3.1:案例需求
2.3.2:实验部署
前言
前面我们阐述了主从复制读写分离的基本原理,那么假如,我们其中一台服务器宕机出现故障之后,服务是不是就已经无法正常进行了你?那么我们应该怎么样解决呢??这时候我们就要用到MHA了
一、MHA概述
1.1:什么是MHA
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。除了failover之外,MHA还支持在线master切换,非常安全和高效,大概只需要(0.5 ~ 2秒)的阻塞写时间。
1.2:MHA场景
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当slave。当然,如果你处于成本考虑,也可以使用两个节点的MHA,一主一从(实测过的)。
总结一下,MHA提供了如下功能:
master自动监控,故障转移一体化(Automated master monitoring and failover)
MHA可以在一个复制组中监控master的状态,如果挂了,就可以自动的做failover
MHA通过所有slave的差异relay-log来保证数据的一致性
MHA在做故障转移,日志补偿这些动作的时候,通常只需要10~30秒
通常情况下,MHA会选择最新的slave作为new master,但是你也可以指定哪些是候选maser,那么新master选举的时候,就从这些host里面挑
导致复制环境中断的一致性问题,在MHA中是不会发生的,请放心使用
- 在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5及以上版本的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。
手工-交互式master故障转移(Interactive manually initiated Master Failover)
- MHA可以配置成手工-交互式方式进行故障转移,不支持监控master的状态
非交互式master故障转移 (Non-interactive master failover)
- 非交互式,自动的故障转移,不提供监控master状态功能,监控可以交给其他组件做(如:Pacemaker heartbeat)
在线master切换 (Online switching master to a different host)
- 如果你有更快,更好的master,计划要将老master替换成新的master,那么这个功能特别适合这样的场景。
1.3:MHA的优点
-
master failover和slave promotion非常快速。
-
自动探测,多重检测,切换过程中支持调用其他脚本的接口。
-
master crash不会导致数据不一致,自动补齐数据,维护数据一致性。
-
不需要修改复制的任何设置,简单易部署,对现有架构无影响。
-
不需要增加很多额外的机器来部署MHA,支持多实例集中管理。
-
没有任何性能影响。
-
支持在线切换。
-
跨存储引擎,支持任何引擎。
二、MHA部署实验
2.1:实验思路
如何搭建MHA以及数据库的搭建,还有主从的配置
MySQL节点上分别安装数据库,MySQL版本用5.7,cmake版本用2.8版本,node版本用0.57以上,0.56无法支持linux7.0版本。因为MHA特别挑版本。这边我们在主节点上做实验
2.2:故障模拟
我们宕掉一台主服务器,查看是不是会地址漂移
2.3:实验环境
2.3.1:案例需求
本案例要求通过 MHA 监控 MySQL 数据库在故障时进行自动切换,不影响业务
2.3.2:实验部署
- 安装编译依赖环境
[root@master mysql]# yum -y install ncurses-devel gcc-c++ perl-Module-Install
- 安装gmake编译软件
[root@master opt]# tar zxvf cmake-2.8.6.tar.gz
[root@master opt]# cd cmake-2.8.6/
[root@master cmake-2.8.6]# ./configure
[root@master cmake-2.8.6]# gmake && gmake install
- 安装MySQL5.7版本,详细过程可以查看我前面的教程
- 修改3台数据库的主配置文件/etc/my.cnf文件,server-id不能一样
####主服务器配置####
server-id = 11
l