MHA高可用架构与Atlas读写分离
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.1.2 MHA工作原理工作原理说明:
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)通知管理员故障切换
1.1.3 MHA高可用架构图1.1.4 MHA工具介绍
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.1.5 MHA的优点
1、自动故障转移
2、主库崩溃不存在数据不一致的情况
3、不需要对当前的mysql环境做重大修改
4、不需要添加额外的服务器
5、性能优秀,可以工作再半同步和异步复制框架
6、只要replication支持的存储引擎mha都支持
1.2 环境说明在本次的实验中,共需要用到三台主机,系统、软件说明如下。
1.2.1 系统环境说明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)
1 [root@db02 ~]# cat /etc/redhat-release 2 CentOS release 6.9 (Final) 3 [root@db02 ~]# uname -r 4 2.6.32-696.el6.x86_64 5 [root@db02 ~]# /etc/init.d/iptables status 6 iptables: Firewall is not running. 7 [root@db02 ~]# getenforce 8 Disabled 9 [root@db02 ~]# hostname -I 10 10.0.0.52 172.16.1.52View Code db02主机环境说明
db03主机(slave1,MHA Manages、Atlas节点)
1 [root@db03 ~]# cat /etc/redhat-release 2 CentOS release 6.9 (Final) 3 [root@db03 ~]# uname -r 4 2.6.32-696.el6.x86_64 5 [root@db03 ~]# /etc/init.d/iptables status 6 iptables: Firewall is not running. 7 [root@db03 ~]# getenforce 8 Disabled 9 [root@db03 ~]# hostname -I 10 10.0.0.53 172.16.1.53View Code db03主机环境说明 1.2.2 mysql软件说明
三台服务器上都全新安装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
1.3 基于GTID的主从复制配置 1.3.1 先决条件