当前位置: 首页 > Linux

MySQL同步复制和高可用解决方案总结

时间:2023-04-07 03:24:23 Linux

1.前言Mysql作为应用程序的数据存储服务,必须实现mysql数据库的高可用。必须使用的技术是数据库的复制。如果主节点出现故障,可以手动切换到从节点。这个相信运维同学都知道,也能实现。但是,这种情况只是手动切换。对可用性有需求的业务需要分别实现主库和从库的高可用,保证数据库宕机时能够自动进行故障转移,保证应用的可用性和用户体验。本文将介绍一些常用的数据库高可用解决方案。根据您的不同场景,您可以选择合适的高可用方案。2.MMM高可用性解决方案2.1。Mysql-MMM简介MMM(Master-MasterreplicationmanagerforMysql,Mysqlmaster-masterreplicationmanager)是一组灵活的脚本程序,基于perl实现,用于监控和故障转移mysql复制,可以管理mysqlMaster的配置-Master复制(同时只有一个节点可写)。2.2.组件mmm_mond:监控进程,负责所有监控工作,确定并处理所有节点角色活动。该脚本需要在主管计算机上运行。mmm_agentd:运行在各个mysql服务器上的agent进程,完成监控探测工作,进行简单的远程服务设置。此脚本需要在受监管机器上运行。mmm_control:一个简单的脚本,它提供了管理mmm_mond进程的命令。mysql-mmm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP和多个可读VIP。通过supervisory管理,将这些IP绑定到可用的mysql上。当某个mysql宕机时,supervisor会把vip迁移到其他mysql上。在整个监控过程中,需要在mysql中添加相关的授权用户,使mysql能够支持监控机的维护。授权用户包括一个mmm_monitor用户和一个mmm_agent用户,如果要使用mmm备份工具,需要添加一个mmm_tools用户。2.3.架构图正常工作时:主节点故障时:2.4.MMM的优点(1)可用性高,扩展性好,故障自动转移。对于master-master同步,同一时间只提供一次数据库写操作,保证数据的一致性。(2)配置简单,操作方便。2.5.MMM的缺点(1)需要备份服务器,浪费资源(2)需要多个虚拟IP(3)Agent可能会意外终止,造成脑裂。3.MHA介绍MHA(MasterHighAvailability)是目前MySQL高可用方面比较成熟的解决方案。它是由日本DeNA公司youshimaton(现供职于Facebook)开发的。是一套优秀的MySQL高可用环境。用于故障转移和主从提升的高可用性软件。在MySQL故障转移过程中,MHA可以在0~30秒内自动完成数据库的故障转移操作,并且在故障转移过程中,MHA可以最大程度保证数据的一致性,实现真正意义上的高可用。3.1.MHA架构介绍本软件由两部分组成:MHAManager(管理节点)和MHANode(数据节点)。MHAManager可以部署在一台独立的机器上管理多个主从集群,也可以部署在一个从节点上。MHANode运行在每台MySQL服务器上,MHAManager会定时检测集群中的master节点。当master出现故障时,它可以自动将拥有最新数据的slave提升为新的master,然后将所有其他slave重定向到新的master。大师。整个故障转移过程对应用程序是完全透明的。MHA自动故障转移过程中,MHA会尝试从宕机的主服务器上保存二进制日志,最大程度保证数据不丢失(最好配合mysql半同步复制),但并不总是这样可行的。比如主服务器硬件出现故障或者无法通过ssh访问,MHA无法保存二进制日志,只会进行故障转移,丢失最新的数据。有了MySQL5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制相结合。如果只有一个slave收到了最新的二进制日志,MHA可以将最新的二进制日志应用到所有其他slave服务器上,从而保证所有节点的数据一致性。注:目前MHA主要支持一主多从的架构。要构建MHA,一个复制集群中至少要有三台数据库服务器,一主两从,即一台作为Master,一台作为备份Master,一台作为数据库服务器。从库上看,因为至少需要三台服务器,所以出于机器成本的考虑,淘宝也在此基础上进行了改造。目前淘宝TMHA已经支持一主一从。3.2.MHA架构图正常运行的架构图:主库Down架构:3.3。FailoverProcess(1)从崩溃的master上保存二进制日志事件(binlogevents);(2)识别出最新更新的slave;(3)将差异中继日志(relaylog)应用到其他slave;(4)应用从master保存的二进制日志事件(binlogevents);(5)将一个slave提升为一个新的master;(6)使用Otherslaves连接到新的master进行复制;(7)在新master上启动VIP地址,保证前端请求能发到新master上。3.4.MHA的优点(1)不需要备份服务器(2)不改变现有环境(3)操作非常简单(4)可以进行日志的差异修复(5)可以将任意slave提升为master3.5。MHA的缺点(1)所有节点都需要sshkeys。(2)MHA故障后会修改配置文件,如果再次故障转移需要重新修改配置文件。(3)内置脚本有待进一步补充完善,使用perl开发,二次开发困难。4.DRBD+(心跳、corosync)4.1。方案介绍本方案采用Heartbeat或corosync双机热备软件保证数据库的高稳定性和连续性,数据一致性由工具DRBD保证(如果可能的话放在分布式存储上面)。默认情况下,只有一个mysql在工作。当主mysql服务器出现问题时,系统会自动切换到备用服务器继续提供服务。当主库修复后,服务将切换回继续由主mysql服务器提供。4.2.Heartbeat和corosync组件作为心跳检测机制,用于监控主节点的状态。当主节点宕机时,迅速将副节点升级为新的主节点,并切换IP;drbd负责数据同步4.3。架构图4.4。数据同步过程mysql在刷盘时,会采用不同的同步方式,最终将数据写入磁盘;drbd收到磁盘刷写成功的消息后,通过网络将相应的磁盘块位置和变化动作传递给secondary节点;secondarydrbd收到变化信息后,将信息放到磁盘上;4.5.切换过程前提:从节点的mysql服务没有启动;heartbeat检测到primary的mysql服务停止,则移除IP,卸载数据盘,将primary切换为secondary;在原来的secondary上,升级drbd同步到primary,并挂载数据盘,启动mysql服务,绑定IP;随IP和端口自动从库中迁移;4.6.方案优势(1)历史悠久,安全性高,稳定性高,可用性高,故障自动切换。(2)数据一致性强4.7.方案的缺点(1)需要备份服务器,浪费资源(2)不方便扩展(3)无论drbd还是headbetart,corosync都可能脑裂5.Mysql路由介绍5.1.什么是mysqlrouteMySQLRouter是应用客户端和dbserver之间的一个轻量级代理程序,它可以对后端数据库实例进行检测、分析和转发查询,并将结果返回给客户端。是mysql-proxy的替代品。其架构图和功能如下。(1)路由器实现读写分离。程序不直接连接数据库IP,而是固定连接mysqlrouter。MySQLRouter对前端应用程序是透明的。应用程序将MySQLRouter当作一个普通的mysql实例,向MySQLRouter发送查询,MySQLRouter将查询结果返回给前端应用程序。(2)从数据库服务器故障来看,业务可以正常运行。不可用的服务器由MySQLRouter自动下线。程序配置不需要任何修改。(3)如果主库出现故障,MySQLRouter会判断主从自动切换,业务可以正常访问。程序配置不需要任何修改。5.2.读写分离原理MySQLRouter接受前端应用请求,根据不同端口区分读写,将所有连接到读写端口的查询发送到主数据库,发送连接到读写端口的select查询仅以轮询方式端口到多个从库,从而达到读写分离的目的。读写返回的结果会交给MySQLRouter,再由MySQLRouter返回给客户端应用程序。5.3.Mysqlrouter目的MySQLRouter的主要目的是读写分离,自动master-masterfailover,负载均衡,连接池等。5.4.Mysqlrouter的master-masterfailover自动切换的坑Mysqlrouter的master-masterfailover功能经测试没有任何问题,但是有一个比较大的坑需要注意。主库切换后,连接从库的主服务器地址不会出现。要改变,需要自己写脚本来判断。5.5.优点(1)基于DAL层实现mysql的高可用。(2)Master-Master故障转移和读写分离可以同时实现。(3)插件架构允许用户进行额外的功能扩展。5.6.缺点(1)高可用功能有待进一步完善:主库切换后,从库不会自动切换主库地址。(2)读写使用不同的端口,需要修改应用程序。6.MysqlCluster在国内很少用,主要是以下三点:(1)需要换存储引擎(2)付费(3)在国内几乎没有用例优势:高可用,可用率99.999%6.1。结束语高可用方案只是我比较熟悉,而且应用也很广泛。毕竟mysql已经发展了20多年了,高可用的方案还是很多的。如果您对其他高可用方案感兴趣,可以自行研究。版权声明:作者:西门飞冰,90后IT男,一直在北京工作,热爱运动、探险、旅游。作者原创投稿,版权归原作者所有。除非无法确认,否则我们会注明作者和出处。如有侵权请告知,我们将立即删除并致歉,谢谢。微信关注农民工技术之路公众号对话回复关键字:1024即可获取最新技术干货:包括系统运维、数据库、redis、MogoDB、电子书、Java基础课程,Java实战项目,架构师综合教程,架构师实战项目,大数据,Docker容器,ELKStack,机器学习,BAT面试精讲视频等。

最新推荐
猜你喜欢