MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,它由日本 DeNA 公司 youshimaton(现就职于 Facebook 公司)开发,是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。在 MySQL 故障切换过程中,MHA 能做到在 10~30 秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA 能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
MHA 能够在较短的时间内实现自动故障检测和故障转移,通常在 10-30 秒以内; 在复制 框架中,MHA 能够很好地解决复制过程中的数据一致性问题,由于不需要在现有的 replication 中添加额外的服务器,仅需要一个 manager 节点,而一个 Manager 能管理多套复制,所以能大大地节约服务器的数量; 另外,安装简单,无性能损耗,以及不需要修改现 有的复制部署也是它的优势之处。
MHA 还提供在线主库切换的功能,能够安全地切换当前运行的主库到一个新的主库中 (通过将从库提升为主库),大概 0.5-2 秒内即可完成。
该软件由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)。MHA Manager 可以单独部署在一台独立的机器上管理多个 master-slave 集群,也可以部署在一台 slave 节点上。MHA Node 运行在每台 MySQL 服务器上,MHA Manager 会定时探测集群中的 master 节点,当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master,然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。
在 MHA 自动故障切换过程中,MHA 试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过 ssh 访问,MHA 没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用 MySQL 5.5 的半同步复制,可以大大降低数据丢失的风险。
MHA 可以与半同步复制结合起来。如果只有一个 slave 已经收到了最新的二进制日志,MHA 可以将最新的二进制日志应用于其他所有的 slave 服务器上,因此可以保证所有节点的数据一致性。
目前 MHA 主要支持一主多从的架构,要搭建 MHA, 要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当 master,一台充当备用 master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝 TMHA 已经支持一主一从。
工作原理说明: 1、保存 master 上的所有 binlog 事件 2、找到含有最新 binlog 位置点的 slave 3、通过中继日志将数据恢复到其他的 slave 4、将包含最新 binlog 位置点的 slave 提升为 master 5、将其他从库 slave 指向新的 master 原 slave01 并开启主从复制 6、将保存下来的 binlog 恢复到新的 master 上 |
1、监控所有 node 节点 MHA 功能说明:
2、自动故障切换 (failover)
前提是必须有三个节点存在,并且有两个从库
(1) 选主前提,按照配置文件的顺序进行,但是如果此节点后主库 100M 以上 relay-log 就不会选
(2) 如果你设置了权重,总会切换带此节点;一般在多地多中心的情况下,一般会把权重设置在本地节点。
(3) 选择 s1 为新主
(4) 保存主库 binlog 日志
3、重新构建主从
(1) 将有问题的节点剔除 MHA
进行第一阶段数据补偿,S2 缺失部分补全 90
(2)s1 切换角色为新主,将 s2 指向新主 S1
s2 change master to s1
(3) 第二阶段数据补偿
将保存过来的新主和原有主缺失部分的 binlog,应用到新主。
(4) 虚拟 IP 漂移到新主,对应用透明无感知
(5) 通知管理员故障切换
MHA 软件由两部分组成,Manager 工具包和 Node 工具包,具体的说明如下:
Manager 工具包主要包括以下几个工具:
- masterha_check_ssh #检査 MHA 的 ssh-key^
- masterha_check_repl #检査主从复制情况
- masterha_manger #启动MHA
- masterha_check_status #检测MHA的运行状态^
- masterha_mast er_monitor #检测master是否宕机一
- masterha_mast er_switch #手动故障转移—
- masterha_conf_host #手动添加server倍息一
- masterha_secondary_check #建立TCP连接从远程服务器v
- masterha_stop #停止MHA
Node 工具包主要包括以下几个工具:
- save_binary_1ogs #保存宕机的master的binlog
- apply_diff_relay_logs #识别relay log的差异
- filter_mysqlbinlog #防止回滚事件一MHA已不再使用这个工具
- purge_relay_logs #清除中继曰志一不会阻塞SQL线程
1、自动故障转移
2、主库崩溃不存在数据不一致的情况
3、不需要对当前的 mysql 环境做重大修改
4、不需要添加额外的服务器
5、性能优秀,可以工作再半同步和异步复制框架
6、只要 replication 支持的存储引擎 mha 都支持
在本次的实验中,共需要用到三台主机,系统、软件说明如下。
db01 主机(master)
- [root@db01 ~]# cat /etc/redhat-release
- CentOS release 6.9 (Final)
- [root@db01 ~]# uname -r
- 2.6.32-696.el6.x86_64
- [root@db01 ~]# /etc/init.d/iptables status
- iptables: Firewall is not running.
- [root@db01 ~]# getenforce
- Disabled
- [root@db01 ~]# hostname -I
- 10.0.0.51 172.16.1.51
db02 主机(slave1)
View Code db02 主机环境说明
db03 主机(slave1,MHA Manages、Atlas 节点)
View Code db03 主机环境说明
三台服务器上都全新安装 mysql 5.6.36 :
- [root@db01~]#mysql--version mysql Ver 14.14 Distrib 5.6.36,
- for Linux(x86_64) using EditLine wrapper
关于 mysql 数据库具体的安装方法参考: http://www.cnblogs.com/clsn/p/8038964.html#_label3
来源: https://www.cnblogs.com/clsn/p/8150688.html