阿里云服务器手动实现mysql双机热备的两种方式

吾爱主题 阅读:111 2024-04-05 14:23:17 评论:0

一、概念

1、热备份和备份的区别

  热备份指的是:High Available(HA)即高可用,而备份指的是Backup,数据备份的一种。这是两种不同的概念,应对的产品也是两种功能上完全不同的产品。热备份主要保障业务的连续性,实现的方法是故障点的转移。而备份,主要目的是为了防止数据丢失,而做的一份拷贝,所以备份强调的是数据恢复而不是应用的故障转移。

2、什么是双机热备? 

  双机热备从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务。

  从狭义上讲,双机热备就是使用互为备份的两台服务器共同执行同一服务,其中一台主机为工作机(Primary Server),另一台主机为备份主机(Standby Server)。在系统正常情况下,工作机为应用系统提供服务,备份机监视工作机的运行情况(一般是通过心跳诊断,工作机同时也在检测备份机是否正常),当工作机出现异常,不能支持应用系统运营时,备份机主动接管工作机的工作,继续支持关键应用服务,保证系统不间断的运行。双机热备针对的是IT核心服务器、存储、网络路由交换的故障的高可用性解决方案。

好,下面给大家介绍阿里云服务器实现mysql双机热备,具体内容如下所示:

阿里云服务器由于不支持keepalive虚拟ip,导致无法通过keepalive来实现mysql的双机热备。我们这里要实现阿里云的双机热备有两种方式:

1,购买阿里云的云数据库高级版,自带从库,主库故障自动切换到从库

2这里主要是讲第二种方式,两台阿里云服务器,分别部署mysql,实现mysql的主主同步。这里就不着重讲mysql的主主同步了,大家可以自行百度,有需要的,以后可能会出一篇文章。假设现在已经实现了mysql主主同步的情况下,如何处理

因为使用的是springboot,所以需要处理下yml文件,然后加了个发送邮件给多个人,这里主机跑的定时任务,备机需要的话,也可以相应的跑一下

因为我是使用docker部署的mysql,所以使用的docker ps 查看mysql的状态,如果普通部署的可以使用ps或者直接登录mysql看能否成功来判断

?
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 # coding: utf8 import subprocess from email.mime.text import MIMEText import smtplib import os #因为这里用的Java的springboot,如果切换备机,需要修改部分yml文件 YML_PATH = '' NEW_YML = '' msg_from = '' # 发送方邮箱 passwd = '' # 填入发送方邮箱的授权码 msg_to = [] def check_mysql():   res = subprocess.Popen( 'docker ps |grep mysql' , stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell= True )   stdout, stderr = res.communicate()   if stdout:    res_status = subprocess.Popen( "docker ps |grep mysql| awk '{print $7}'" , stdout=subprocess.PIPE,            stderr=subprocess.PIPE, shell= True )    out , err = res_status.communicate()    if out .strip() == "Up" :     print 'mysql is ok'    else :     print 'mysql is broken, switch standby machine'     flag = judge_mysql_string()     if flag:      print '已经连接备机,无需切换'     else :      switch_mysql()   else :    print 'mysql is broken, switch standby machine'    flag = judge_mysql_string()    if flag:     print '已经连接备机,无需切换'    else :     switch_mysql() def switch_mysql():   print '---copy yml----'   subprocess.call( 'cp {} {}' .format(NEW_YML, YML_PATH), shell= True )   subprocess.call( 'docker restart tomcat' , shell= True )   subject = 'mysql主机故障'   info = 'mysql主机故障,已经切换到备机,请查看主机问题,及时修复,如需切换回去,' \   content = '<html><meta charset="UTF-8"><body><p style="color: red">{}</p> </body></html>' .format(info)   send_email(subject, content)   print '----end switch---' def send_email(subject, content):   msg = MIMEText(content, 'html' , 'utf-8' )   msg[ 'Subject' ] = subject   msg[ 'From' ] = msg_from   msg[ 'To' ] = ',' . join (msg_to)   try:    s = smtplib.SMTP_SSL( "smtp.qq.com" , 465)    s.login(msg_from, passwd)    s.sendmail(msg_from, msg_to, msg.as_string())   except Exception as e:    print e   finally:    s.quit() def judge_mysql_string():   with open (os.path. join (YML_PATH, 'application.yml' ), 'r' ) as f:    res = f. read ()    if 'your ip' in res:     return True    else :     return False check_mysql()

总结

以上所述是小编给大家介绍的阿里云服务器手动实现mysql双机热备的两种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

原文链接:https://blog.csdn.net/qq_29306999/article/details/102501742

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容