您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL 同步复制及高可用方案总结

时间:2020-05-15 09:59:41  来源:  作者:

1.前言

MySQL作为应用程序的数据存储服务,要实现mysql数据库的高可用。必然要使用的技术就是数据库的复制,如果主节点出现故障可以手动的切换应用到从节点,这点相信运维同学都是知道,并且可以实现的。但是这种情况只是手动的切换,对可用性有要求的业务需要分别实现主库和从库的高可用,保障在数据库出现down机的情况下,可以自动实现数据库的故障转移,保障应用的可用性和用户体验。

本文将会对一些常用的数据库高可用方案进行介绍,根据你不同的场景,选择合适的高可用方案即可。

2.MMM高可用方案


2.1.Mysql-MMM介绍

MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的)。

2.2.组件

mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行。

mmm_agentd:运行在每个mysql服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。

mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令。

mysql-mmm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,监管会将VIP迁移至其他mysql。

在整个监管过程中,需要在mysql中添加相关授权用户,以便让mysql可以支持监理机的维护。授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm的备份工具则还要添加一个mmm_tools用户。

2.3.架构

正常工作时:

MySQL 同步复制及高可用方案总结

 

主节点故障时:

MySQL 同步复制及高可用方案总结

 

2.4.MMM优点

(1)高可用性,扩展性好,出现故障自动转移,对于主主同步,在同一时间只提供一台数据库写操作,保证数据的一致性。

(2)配置简单,容易操作。

2.5.MMM缺点

(1)需要一台备份服务器,浪费资源

(2)需要多个虚拟IP

(3)agent可能意外终止,引起裂脑。

3.MHA介绍


MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

3.1.MHA架构介绍

该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失(配合mysql半同步复制效果更佳),但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

注意:目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。

3.2.MHA架构图

正常工作时架构图:

MySQL 同步复制及高可用方案总结

 

主库down机时架构:

MySQL 同步复制及高可用方案总结

 

3.3.故障转移过程

(1)从宕机崩溃的master保存二进制日志事件(binlog events);

(2)识别含有最新更新的slave;

(3)应用差异的中继日志(relay log)到其他的slave;

(4)应用从master保存的二进制日志事件(binlog events);

(5)提升一个slave为新的master;

(6)使其他的slave连接新的master进行复制;

(7)在新的master启动vip地址,保证前端请求可以发送到新的master。

3.4.MHA优点

(1)不需要备份服务器

(2)不改变现有环境

(3)操作非常简单

(4)可以进行日志的差异修复

(5)可以将任意slave提升为master

3.5.MHA缺点

(1)需要全部节点做ssh秘钥

(2)MHA出现故障后配置文件会被修改,如果再次故障转移需要重新修改配置文件。

(3)自带的脚本还需要进一步补充完善,且用perl开发,二次开发困难。

4.DRBD+(heartbeat,corosync)


4.1.方案简介

本方案采用Heartbeat或者corosync双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证(如果可以尽量放到分布式存储上面)。默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自动切换到备机上继续提供服务,当主数据库修复完毕,又将服务切回继续由主mysql提供服务。

4.2.组件

Heartbeat,corosync作为心跳检测机制,监控primary节点的状态。当主节点宕掉之后,迅速提升secondary节点为新的主节点,并切换IP;

drbd负责数据同步

4.3.架构图
MySQL 同步复制及高可用方案总结

 

4.4.数据同步过程

mysql进行刷盘时,会通过不同的sync方式,最终将数据写入disk;

drbd收到刷盘成功的信息后,将对应的磁盘块位置,和变更动作,通过网络传递至secondary节点;

secondary的drbd接收到变更信息后,将这些信息落盘;

4.5.切换过程

前提:secondary节点的mysql服务不启动;

heartbeat检测到primary的mysql服务停止,则摘掉IP、umount掉数据盘、将primary切换为secondary;

在原来的secondary上,提升drbd同步为primary,挂载数据盘,启动mysql服务、绑定IP;

从库跟着IP和端口自动进行迁移;

4.6.方案优点

(1)历史悠久、安全性高、稳定性高、可用性高、出现故障自动切换。

(2)数据一致性强

4.7.方案缺点

(1)需要一台备份服务器,浪费资源

(2)不方便扩展

(3)无论drbd还是headbetart,corosync都可能发生裂脑

5.Mysql route介绍


5.1.什么是mysql route

MySQL Router是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品。其架构图和功能如下。

MySQL 同步复制及高可用方案总结

 

(1)Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应用是透明的。应用程序把MySQL Router当作是普通的mysql实例,把查询发给MySQL Router,而MySQL Router会把查询结果返回给前端的应用程序。

(2)从数据库服务器故障,业务可以正常运行。由MySQL Router来进行自动下线不可用服务器。程序配置不需要任何修改。

(3)主数据库故障,由MySQL Router来决定主从自动切换,业务可以正常访问。程序配置不需要做任何修改。

5.2.读写分离原理

MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有查询发往主库,把连接只读端口的select查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序。

5.3.Mysql router用途

MySQL Router的主要用途是读写分离,主主故障自动切换,负载均衡,连接池等。

5.4.Mysql router主主故障自动切换的坑

Mysql router主主故障切换功能经过测试没有问题,但是有一个比较大的坑需要注意,主库发生切换之后,从库的连接的master服务器地址不会发生改变,需要自己写脚本进行判断。

5.5.优点

(1)基于DAL层实现mysql的高可用。

(2)可以同时实现主主故障切换和读写分离。

(3)插件式架构允许用户进行额外的功能扩展。

5.6.缺点

(1)高可用功能需要进一步完善:存在主库切换之后,从库不会自动切换主库地址的坑。

(2)读写情况使用不同端口,需要修改应用程序。

6.mysql Cluster


国内用的非常少,主要因为一下三点:

(1)需要更改存储引擎

(2)付费

(3)国内几乎没有使用案例

优点:

高可用,可用率达99.999%

7.结束语

上面的高可用方案,只是我自己比较熟悉的,而且也是应用比较多的。mysql毕竟发展了有20多年了,各种高可用方案还是很多的,其他的高可用方案各位钥匙有兴趣,可以自己研究。



Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  Tags: MySQL  点击:(7)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Tags: MySQL  点击:(31)  评论:(0)  加入收藏
数据库对象是数据库的组成部分,常见的有以下几种:表(Table )、索引(Index)、视图(View)、图表(Diagram)、缺省值(Default)、规则(Rule)、触发器(Trigger)、存储过程(Stored Procedure)、 用户(User)等。命名规范是指数据库对象如数据库(SCH...【详细内容】
2021-11-04  Tags: MySQL  点击:(41)  评论:(0)  加入收藏
1.1 什么是约束约束字面意思就是限制,比如我们每一个人的身份证号都是唯一的,不可能出现两个人,身份证是一样的,那么这里的唯一性我们就称之为一种约束,再比如:我们每个人都是有性...【详细内容】
2021-10-18  Tags: MySQL  点击:(97)  评论:(0)  加入收藏
如图所示,我们已经在macOS中安装完成了MySQL 服务器。 Configuration配置信息,如图所示。 专栏 Java程序员的macOS手册 作者:软件架构 19.8币 12人已购 查看 但是,如何使用My...【详细内容】
2021-10-12  Tags: MySQL  点击:(57)  评论:(0)  加入收藏
1.MySQL读写分离概念:MYSQL读写分离的原理其实就是让Master数据库处理事务性增、删除、修改、更新操作(CREATE、INSERT、UPDATE、DELETE),而让Slave数据库处理SELECT操作,MYSQL读...【详细内容】
2021-10-11  Tags: MySQL  点击:(32)  评论:(0)  加入收藏
不啰嗦,直接上代码查询首字母:SELECTELT(INTERVAL(CONV(HEX(LEFT(CONVERT(`name` USING gbk),1)),16,10),0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0...【详细内容】
2021-10-09  Tags: MySQL  点击:(83)  评论:(0)  加入收藏
如果你使用过mysql数据库,对它的存储引擎:innodb,一定不会感到陌生。众所周知,在mysql8以前,默认的存储引擎是:myslam。但mysql8之后,默认的存储引擎已经变成了:innodb,它是我们建表...【详细内容】
2021-09-17  Tags: MySQL  点击:(50)  评论:(0)  加入收藏
在之前的博客中,我写了一系列的文章,比较系统的学习了 MySQL 的事务、隔离级别、加锁流程以及死锁,我自认为对常见 SQL 语句的加锁原理已经掌握的足够了,但看到热心网友在评论中提出的一个问题我还是彻底被问蒙了。他的问...【详细内容】
2021-09-16  Tags: MySQL  点击:(58)  评论:(0)  加入收藏
加班原因是上线,解决线上数据库存在重复数据的问题,发现了程序的bug,很好解决,有点问题的是,修正线上的重复数据。线上库有6个表存在重复数据,其中2个表比较大,一个96万+、一个30万...【详细内容】
2021-09-16  Tags: MySQL  点击:(68)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(7)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(18)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(17)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(21)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(28)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条