防止办事器宕机时My-SQL数据损掉的几种筹划

发布时间:2017-07-07 22:00 来源:互联网 以后栏目:web技巧类

   这篇文章重要简介了防止办事器宕机时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的作者都说他们在facebook的临盆情况中应用了semi-synchronous(这里),所以我认为真心没须要担心它的性能成绩,除非你的营业量级曾经完全超出了facebook或许谷歌。在这篇文章外面曾经提到,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连接天然断开

  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、