阿里云服务器手动实现mysql双机热备的两种方式
一、概念
1、热备份和备份的区别
热备份指的是:HighAvailable(HA)即高可用,而备份指的是Backup,数据备份的一种。这是两种不同的概念,应对的产品也是两种功能上完全不同的产品。热备份主要保障业务的连续性,实现的方法是故障点的转移。而备份,主要目的是为了防止数据丢失,而做的一份拷贝,所以备份强调的是数据恢复而不是应用的故障转移。
2、什么是双机热备?
双机热备从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务。
从狭义上讲,双机热备就是使用互为备份的两台服务器共同执行同一服务,其中一台主机为工作机(PrimaryServer),另一台主机为备份主机(StandbyServer)。在系统正常情况下,工作机为应用系统提供服务,备份机监视工作机的运行情况(一般是通过心跳诊断,工作机同时也在检测备份机是否正常),当工作机出现异常,不能支持应用系统运营时,备份机主动接管工作机的工作,继续支持关键应用服务,保证系统不间断的运行。双机热备针对的是IT核心服务器、存储、网络路由交换的故障的高可用性解决方案。
好,下面给大家介绍阿里云服务器实现mysql双机热备,具体内容如下所示:
阿里云服务器由于不支持keepalive虚拟ip,导致无法通过keepalive来实现mysql的双机热备。我们这里要实现阿里云的双机热备有两种方式:
1,购买阿里云的云数据库高级版,自带从库,主库故障自动切换到从库
2这里主要是讲第二种方式,两台阿里云服务器,分别部署mysql,实现mysql的主主同步。这里就不着重讲mysql的主主同步了,大家可以自行百度,有需要的,以后可能会出一篇文章。假设现在已经实现了mysql主主同步的情况下,如何处理
因为使用的是springboot,所以需要处理下yml文件,然后加了个发送邮件给多个人,这里主机跑的定时任务,备机需要的话,也可以相应的跑一下
因为我是使用docker部署的mysql,所以使用的dockerps查看mysql的状态,如果普通部署的可以使用ps或者直接登录mysql看能否成功来判断
#coding:utf8
importsubprocess
fromemail.mime.textimportMIMEText
importsmtplib
importos
#因为这里用的Java的springboot,如果切换备机,需要修改部分yml文件
YML_PATH=''
NEW_YML=''
msg_from=''#发送方邮箱
passwd=''#填入发送方邮箱的授权码
msg_to=[]
defcheck_mysql():
res=subprocess.Popen('dockerps|grepmysql',stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
stdout,stderr=res.communicate()
ifstdout:
res_status=subprocess.Popen("dockerps|grepmysql|awk'{print$7}'",stdout=subprocess.PIPE,
stderr=subprocess.PIPE,shell=True)
out,err=res_status.communicate()
ifout.strip()=="Up":
print'mysqlisok'
else:
print'mysqlisbroken,switchstandbymachine'
flag=judge_mysql_string()
ifflag:
print'已经连接备机,无需切换'
else:
switch_mysql()
else:
print'mysqlisbroken,switchstandbymachine'
flag=judge_mysql_string()
ifflag:
print'已经连接备机,无需切换'
else:
switch_mysql()
defswitch_mysql():
print'---copyyml----'
subprocess.call('cp{}{}'.format(NEW_YML,YML_PATH),shell=True)
subprocess.call('dockerrestarttomcat',shell=True)
subject='mysql主机故障'
info='mysql主机故障,已经切换到备机,请查看主机问题,及时修复,如需切换回去,'\
content='{}'.format(info)
send_email(subject,content)
print'----endswitch---'
defsend_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())
exceptExceptionase:
printe
finally:
s.quit()
defjudge_mysql_string():
withopen(os.path.join(YML_PATH,'application.yml'),'r')asf:
res=f.read()
if'yourip'inres:
returnTrue
else:
returnFalse
check_mysql()
总结
以上所述是小编给大家介绍的阿里云服务器手动实现mysql双机热备的两种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!