问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何有效防止数据中心系统宕机

发布网友 发布时间:2022-04-20 21:07

我来回答

2个回答

热心网友 时间:2022-04-08 02:08

  这篇文章主要介绍了防止服务器宕机时MySQL数据丢失的几种方案,结合实践介绍了Replication和Monitor以及Failover这三个项目的应用,需要的朋友可以参考下   对于多数应用来说,MySQL都是作为最关键的数据存储中心的,所以,如何让MySQL提供HA服务,是我们不得不面对的一个问题。当master当机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master当机并进行相应的故障转移处理,都是需要我们好好思考的。这里,笔者将结合这段时间做的MySQL proxy以及toolsets相关工作,说说我们现阶段以及后续会在项目中采用的MySQL HA方案。   Replication   要保证MySQL数据不丢失,replication是一个很好的解决方案,而MySQL也提供了一套强大的replication机制。只是我们需要知道,为了性能考量,replication是采用的asynchronous模式,也就是写入的数据并不会同步更新到slave上面,如果这时候master当机,我们仍然可能会面临数据丢失的风险。   为了解决这个问题,我们可以使用semi-synchronous replication,semi-synchronous replication的原理很简单,当master处理完一个事务,它会等待至少一个支持semi-synchronous的slave确认收到了该事件并将其写入relay-log之后,才会返回。这样即使master当机,最少也有一个slave获取到了完整的数据。   但是,semi-synchronous并不是100%的保证数据不会丢失,如果master在完成事务并将其发送给slave的时候崩溃,仍然可能造成数据丢失。只是相比于传统的异步复制,semi-synchronous replication能极大地提升数据安全。更为重要的是,它并不慢,MHA的作者都说他们在*的生产环境中使用了semi-synchronous(这里),所以我觉得真心没必要担心它的性能问题,除非你的业务量级已经完全超越了*或者google。在这篇文章里面已经提到,MySQL 5.7之后已经使用了Loss-Less Semi-Synchronous replication,所以丢数据的概率已经很小了。   如果真的想完全保证数据不会丢失,现阶段一个比较好的办法就是使用gelera,一个MySQL集群解决方案,它通过同时写三份的策略来保证数据不会丢失。笔者没有任何使用gelera的经验,只是知道业界已经有公司将其用于生产环境中,性能应该也不是问题。但gelera对MySQL代码侵入性较强,可能对某些有代码洁癖的同学来说不合适了:-)   我们还可以使用drbd来实现MySQL数据复制,MySQL官方文档有一篇文档有详细介绍,但笔者并未采用这套方案,MHA的作者写了一些采用drdb的问题,在这里,仅供参考。   在后续的项目中,笔者会优先使用semi-synchronous replication的解决方案,如果数据真的非常重要,则会考虑使用gelera。   Monitor   前面我们说了使用replication机制来保证master当机之后尽可能的数据不丢失,但是我们不能等到master当了几分钟才知道出现问题了。所以一套好的监控工具是必不可少的。   当master当掉之后,monitor能快速的检测到并做后续处理,譬如邮件通知管理员,或者通知守护程序快速进行failover。   通常,对于一个服务的监控,我们采用keepalived或者heartbeat的方式,这样当master当机之后,我们能很方便的切换到备机上面。但他们仍然不能很即时的检测到服务不可用。笔者的公司现阶段使用的是keepalived的方式,但后续笔者更倾向于使用zookeeper来解决整个MySQL集群的monitor以及failover。   对于任何一个MySQL实例,我们都有一个对应的agent程序,agent跟该MySQL实例放到同一台机器上面,并且定时的对MySQL实例发送ping命令检测其可用性,同时该agent通过ephemeral的方式挂载到zookeeper上面。这样,我们可以就能知道MySQL是否当机,主要有以下几种情况:   机器当机,这样MySQL以及agent都会当掉,agent与zookeeper连接自然断开   MySQL当掉,agent发现ping不通,主动断开与zookeeper的连接   Agent当掉,但MySQL未当   上面三种情况,我们都可以认为MySQL机器出现了问题,并且zookeeper能够立即感知。agent与zookeeper断开了连接,zookeeper触发相应的children changed事件,监控到该事件的管控服务就可以做相应的处理。譬如如果是上面前两种情况,管控服务就能自动进行failover,但如果是第三种,则可能不做处理,等待机器上面crontab或者supersivord等相关服务自动重启agent。   使用zookeeper的好处在于它能很方便的对整个集群进行监控,并能即时的获取整个集群的变化信息并触发相应的事件通知感兴趣的服务,同时协调多个服务进行相关处理。而这些是keepalived或者heartbeat做不到或者做起来太麻烦的。   使用zookeeper的问题在于部署起来较为复杂,同时如果进行了failover,如何让应用程序获取到最新的数据库地址也是一个比较麻烦的问题。   对于部署问题,我们要保证一个MySQL搭配一个agent,幸好这年头有了docker,所以真心很简单。而对于第二个数据库地址更改的问题,其实并不是使用了zookeeper才会有的,我们可以通知应用动态更新配置信息,VIP,或者使用proxy来解决。   虽然zookeeper的好处很多,但如果你的业务不复杂,譬如只有一个master,一个slave,zookeeper可能并不是最好的选择,没准keepalived就够了。   Failover   通过monitor,我们可以很方便的进行MySQL监控,同时在MySQL当机之后通知相应的服务做failover处理,假设现在有这样的一个MySQL集群,a为master,b,c为其slave,当a当掉之后,我们需要做failover,那么我们选择b,c中的哪一个作为新的master呢?   原则很简单,哪一个slave拥有最近最多的原master数据,就选哪一个作为新的master。我们可以通过show slave status这个命令来获知哪一个slave拥有最新的数据。我们只需要比较两个关键字段Master_Log_File以及Read_Master_Log_Pos,这两个值代表了slave读取到master哪一个binlog文件的哪一个位置,binlog的索引值越大,同时pos越大,则那一个slave就是能被提升为master。这里我们不讨论多个slave可能会被提升为master的情况。   在前面的例子中,假设b被提升为master了,我们需要将c重新指向新的master b来开始复制。我们通过CHANGE MASTER TO来重新设置c的master,但是我们怎么知道要从b的binlog的哪一个文件,哪一个position开始复制呢?   GTID   为了解决这一个问题,MySQL 5.6之后引入了GTID的概念,即uuid:gid,uuid为MySQL server的uuid,是全局唯一的,而gid则是一个递增的事务id,通过这两个东西,我们就能唯一标示一个记录到binlog中的事务。使用GTID,我们就能非常方便的进行failover的处理。   仍然是前面的例子,假设b此时读取到的a最后一个GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:23,而c的为3E11FA47-71CA-11E1-9E33-C80AA9429562:15,当c指向新的master b的时候,我们通过GTID就可以知道,只要在b中的binlog中找到GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:15这个event,那么c就可以从它的下一个event的位置开始复制了。虽然查找binlog的方式仍然是顺序查找,稍显低效暴力,但比起我们自己去猜测哪一个filename和position,要方便太多了。   google很早也有了一个Global Transaction ID的补丁,不过只是使用的一个递增的整形,LedisDB就借鉴了它的思路来实现failover,只不过google貌似现在也开始逐步迁移到MariaDB上面去了。   MariaDB的GTID实现跟MySQL 5.6是不一样的,这点其实比较麻烦,对于我的MySQL工具集go-mysql来说,意味着要写两套不同的代码来处理GTID的情况了。后续是否支持MariaDB再看情况吧。   Pseudo GTID   GTID虽然是一个好东西,但是仅限于MySQL 5.6+,当前仍然有大部分的业务使用的是5.6之前的版本,笔者的公司就是5.5的,而这些数据库至少长时间也不会升级到5.6的。所以我们仍然需要一套好的机制来选择master binlog的filename以及position。   最初,笔者打算研究MHA的实现,它采用的是首先复制relay log来补足缺失的event的方式,但笔者不怎么信任relay log,同时加之MHA采用的是perl,一个让我完全看不懂的语言,所以放弃了继续研究。   幸运的是,笔者遇到了orchestrator这个项目,这真的是一个非常神奇的项目,它采用了一种Pseudo GTID的方式,核心代码就是这个   复制代码 代码如下:   create database if not exists meta;   drop event if exists meta.create_pseudo_gtid_view_event;   delimiter ;;   create event if not exists   meta.create_pseudo_gtid_view_event   on schele every 10 second starts current_timestamp   on completion preserve   enable   do   begin   set @pseudo_gtid := uuid();   set @_create_statement := concat('create or replace view meta.pseudo_gtid_view as select '', @pseudo_gtid, '' as pseudo_gtid_unique_val from al');   PREPARE st FROM @_create_statement;   EXECUTE st;   DEALLOCATE PREPARE st;   end   ;;   delimiter ;   set global event_scheler := 1;   它在MySQL上面创建了一个事件,每隔10s,就将一个uuid写入到一个view里面,而这个是会记录到binlog中的,虽然我们仍然不能像GTID那样直接定位到一个event,但也能定位到一个10s的区间了,这样我们就能在很小的一个区间里面对比两个MySQL的binlog了。   继续上面的例子,假设c最后一次出现uuid的位置为s1,我们在b里面找到该uuid,位置为s2,然后依次对比后续的event,如果不一致,则可能出现了问题,停止复制。当遍历到c最后一个binlog event之后,我们就能得到此时b下一个event对应的filename以及position了,然后让c指向这个位置开始复制。   使用Pseudo GTID需要slave打开log-slave-update的选项,考虑到GTID也必须打开该选项,所以个人感觉完全可以接受。   后续,笔者自己实现的failover工具,将会采用这种Pseudo GTID的方式实现。   在《MySQL High Availability》这本书中,作者使用了另一种GTID的做法,每次commit的时候,需要在一个表里面记录gtid,然后就通过这个gtid来找到对应的位置信息,只是这种方式需要业务MySQL客户端的支持,笔者不很喜欢,就不采用了。   后记   MySQL HA一直是一个水比较深的领域,笔者仅仅列出了一些最近研究的东西,有些相关工具会尽量在go-mysql中实现。   更新   经过一段时间的思考与研究,笔者又有了很多心得与收获,设计的MySQL HA跟先前有了很多不一样的地方。后来发现,自己设计的这套HA方案,跟*这篇文章几乎一样,加之最近跟*的人聊天听到他们也正在大力实施,所以感觉自己方向是对了。   新的HA,我会完全拥抱GTID,比较这玩意的出现就是为了解决原先replication那一堆问题的,所以我不会考虑非GTID的低版本MySQL了。幸运的是,我们项目已经将MySQL全部升级到5.6,完全支持GTID了。   不同于fb那篇文章将mysqlbinlog改造支持semi-sync replication协议,我是将go-mysql的replication库支持semi-sync replication协议,这样就能实时的将MySQL的binlog同步到一台机器上面。这可能就是我和fb方案的唯一区别了。   只同步binlog速度铁定比原生slave要快,毕竟少了执行binlog里面event的过程了,而另外真正的slaves,我们仍然使用最原始的同步方式,不使用semi-sync replication。然后我们通过MHA监控整个集群以及进行故障转移处理。   以前我总认为MHA不好理解,但其实这是一个非常强大的工具,而且真正看perl,发现也还是看的懂得。MHA已经被很多公司用于生产环境,经受了检验,直接使用绝对比自己写一个要划算。所以后续我也不会考虑zookeeper,考虑自己写agent了。

热心网友 时间:2022-04-08 03:26

当启动Binlog后,事务会产生Binlog Event,这些Event被看做事务数据的一部分。因此要保证事务的Binlog Event和InnoDB引擎中的数据的一致性。所以带Binlog的CrashSafe要求MySQL宕机重启后能够保证:

- 所有已经提交的事务的数据仍然存在。

- 所有没有提交的事务的数据自动回滚。

- 所有已经提交了的事务的Binlog Event也仍然存在。

- 所有没有提交事务没有记录Binlog Event。

这些要求很好理解,如果重启后数据还在,但是Binlog Event没有了,就没办法复制到其他节点上了。如果重启后,数据没了,但是Binlog Event还在,那么不存在的数据就会被复制到其他节点上,从而导致主从的不一致。

为了保证带Binlog的CrashSafe,MySQL内部使用的两阶段提交(Two Phase Commit)。
数据中心宕机,应对的主要措施与方法有哪些

1. 数据分散减少风险:在定制数据中心战略时,应该清楚的知道,所有数据放在一起,会存在非常大的风险。可以把主要数据放在一个位置,并将备份的数据放在量一个位置。这样每年备份一次,可以减少宕机对企业造成的损失。2.了解失败的案例:了解数据中心的宕机案例、处理失败案例的方法和采取的防范措施。3.学...

数据采集与处理子系统哪家好?

作为深圳市简测智能技术有限公司的工作人员,我无法推荐具体的数据采集与处理子系统品牌。目前市场上有很多品牌,例如Maxwell、HBM、Cavotec等,它们都有各自的特点和优势。选择适合自己需求的品牌需要综合考虑多个因素,例如数据采集的精度、速度、可靠性、可扩展性、易用性、价格等。建议您可以参考相关行业的技术文献和用户评价,或者咨询专业的技术顾问,以选择最适合自己需求的品牌。数据采集与处理子系统建议咨询一下深圳市简测智能技术有限公司,深圳市简测智能技术有限公司是一家专注于结构健康监测领域的高新技术企业,公司可提供包括传感器子系统,数据采集与处理子系统,损伤识别、安全评定及预警子系统等全方位端到端解决...

服务器宕机会有什么样的后果?安全可靠的服务器要怎么选择?

防止由于服务器宕机可能导致的数据丢失问题的解决办法有:一、数据备份与“多云”如果是物理机,要做好数据备份,比如做raid;如果是选择的公有云,则最好把数据分存在不同的服务商那里。二、web服务器配置优化 对Web服务器进行配置优化,比如:调整内存数量、线程数量等;提供多个能提供相同服务的Web服务...

华为服务备机是什么情况

这种措施通常情况下是在主数据中心发生故障或关键系统宕机时启用,目的是为了防止业务中断时间过长,给企业带来更大的损失。当然,在实际应用中,具体的实施细节可能因地区、行业和企业需求而有所不同。

夏季机房,IT经理如何确保安全运维?

小结:数据中心制冷系统强化,需CIO依据内部设施布局进行慎重建设。    选择合适的服务器设备除了通过强化数据中心制冷系统外,从硬件基础设施出发同样能做到节能降耗、平台正常运转功效。面对极端环境或特殊应用的需求,设备生产商精益求精,针对高温环境推出耐高温服务器或自带降温技术设备的整体解决方案,例如戴尔PowerEdge...

宕机了是什么意思?

定期监控网站和服务功能的运行状态,及时识别、报告和解决故障问题,是避免宕机的关键。除此之外,同时还需要进行防火墙设置、安全加密等安全措施,以保障网络安全,避免恶意攻击和黑客攻击。同时,采用多个云服务提供商和地理位置不同的数据中心,能够减少单一失效点,并增加数据备份和复原的能力。对于关键业务...

如何最大化服务器正常运行时间

常规性的预防维护措施或许是支撑服务器可靠运行最容易,也最少痛苦的方法。“系统的正常运行时间只能和整个系统中最弱组件的正常运行时间一样长,”Beddoe说。长此以往地执行各项基本任务——升级系统软件、提供有条件的电力,保证适当的冷却环境——方能在不突破预算的前提下让数据中心的服务器无故障地运行...

混合云的安全问题

公有云提供商提供重要的资源,以确保其基础架构在终端用户需要时有效且可访问。尽管云提供商进了最大努力,问题仍不可避免。大量宣传的宕机事件突出了将应用运转在单一数据中心且没有在其他数据中心进行故障恢复的风险。云架构师需要跨数据中心的冗余来减缓单一数据中心宕机的影响。缺少冗余对于混合云来说可...

数据中心宕机到底有多可怕

主要看其中的应用的重要性。A级数据中心宕机会造成社会的不稳定。当然,有些数据中心宕机可能造成巨大的经济损失,例如金融行业的数据中心。有些数据中心的宕机可能威胁到人身的安全,例如航空导航系统的数据中心。

CDCPCDCP详细介绍

检查电力分布系统,以防止宕机。 运用新技术和方法,提高数据中心冷却能力和效率。 设计高可靠、可扩展的网络架构,并学习如何确保安装人员使用合适的测试技术。 与设备供应商合作,制定有效维护合同,确保最佳保障。 设置有效监控系统,确保正确信息传送给正确人员。 确保实施适当的安全手段,包...

关于勒索病毒的防范有什么建议?

1、采用高强度的密码,避免使用弱口令密码,并定期更换密码。2、定期对系统数据进行备份,尤其是关键业务数据,有条件可以选择实时备份;3、备份不等同于容灾,备份保护好数据之后,要通过容灾实现业务的连续性。一旦遭受意外系统宕机,可以实现任意时间点的数据恢复,保障业务的连续性;4、不要打开或者点击...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
如果一个人处处忍让别人,却一点也不为自己想会怎样? ...星猫的,主题曲中有一句是“我是一只猫,快乐的星猫”。求这主题曲的... 快乐星猫的歌词是什么? 什么中医保健好操作又舒服效果好,像拔火罐艾灸什么的? Etc,出现了乱扣费的现象,怎么解决?我的etc都被多扣了200块钱,不... 第三次全国人口普查第三次人口普查 杨明清历程 普拉夫人口 为什么会有中期人口统计 香港人口普查历史 电脑蓝屏的相关代码 英语打击乐器用哪个打击 电脑蓝屏只显示鼠标 初三英语单词 我的索爱X10i root后用re管理器在系统文件中删除什... 索爱NEO MT15I SONY s39h 内存不足怎么弄啊,快烦死了 怎么我手机现在一打开照相机,按下拍照键就自动跳... CrashMonitor是什么意思 报价单如何写 excel报价单样本,外贸报价单模板 求报价单样本 微信小程序报价单样本 衣服去铁锈小妙招 每日学点小窍门:教你如何去除金属的铁锈 除锈有什么简单方法 衣服去铁锈小妙招? 防锈、除锈小妙招 用什么方法有效去锈? 去铁锈小妙招 求会计英语的专业词汇 翻译成英语 凤凰国标教材 牛津高中英语 模块4 按照UNIT划分的... 急急,高人帮帮忙,关于电脑的英语. qq浏览器如何取消屏蔽的推荐 如何关闭qq浏览器游戏推广 手机版QQ浏览器如何取消热词推荐????? Qq游览器自动推荐的直播达人怎么关掉? QQ浏览器怎么删除推荐网址 电脑怎么删掉QQ浏览器推荐? 每次ie浏览器打开新窗口都会弹出推荐QQ浏览器怎么... QQ浏览器下载软件时候老是会蹦出来推荐的其他软件... QQ浏览器右下角弹出的广告怎么取消? 强烈建议关闭 qq浏览器 搜索栏 推荐功能 怎么关闭qq浏览器的上网导航给的那些东西(推荐新... 怎么去掉QQ浏览器顶端的广告? QQ浏览器总有弹窗广告,如何解决? 一进入QQ浏览器就是看点怎么解? QQ浏览器首页的这些个视频如何才可以关闭啊? 苹果手机qq浏览器怎么关闭消息通知
  • 焦点

最新推荐

猜你喜欢

热门推荐