阿里云服務器手動實現(xiàn)mysql雙機熱備的兩種方式
一、概念
1、熱備份和備份的區(qū)別
熱備份指的是:High Available(HA)即高可用,而備份指的是Backup,數(shù)據(jù)備份的一種。這是兩種不同的概念,應對的產(chǎn)品也是兩種功能上完全不同的產(chǎn)品。熱備份主要保障業(yè)務的連續(xù)性,實現(xiàn)的方法是故障點的轉(zhuǎn)移。而備份,主要目的是為了防止數(shù)據(jù)丟失,而做的一份拷貝,所以備份強調(diào)的是數(shù)據(jù)恢復而不是應用的故障轉(zhuǎn)移。
2、什么是雙機熱備?
雙機熱備從廣義上講,就是對于重要的服務,使用兩臺服務器,互相備份,共同執(zhí)行同一服務。當一臺服務器出現(xiàn)故障時,可以由另一臺服務器承擔服務任務,從而在不需要人工干預的情況下,自動保證系統(tǒng)能持續(xù)提供服務。
從狹義上講,雙機熱備就是使用互為備份的兩臺服務器共同執(zhí)行同一服務,其中一臺主機為工作機(Primary Server),另一臺主機為備份主機(Standby Server)。在系統(tǒng)正常情況下,工作機為應用系統(tǒng)提供服務,備份機監(jiān)視工作機的運行情況(一般是通過心跳診斷,工作機同時也在檢測備份機是否正常),當工作機出現(xiàn)異常,不能支持應用系統(tǒng)運營時,備份機主動接管工作機的工作,繼續(xù)支持關(guān)鍵應用服務,保證系統(tǒng)不間斷的運行。雙機熱備針對的是IT核心服務器、存儲、網(wǎng)絡路由交換的故障的高可用性解決方案。
好,下面給大家介紹阿里云服務器實現(xiàn)mysql雙機熱備,具體內(nèi)容如下所示:
阿里云服務器由于不支持keepalive虛擬ip,導致無法通過keepalive來實現(xiàn)mysql的雙機熱備。我們這里要實現(xiàn)阿里云的雙機熱備有兩種方式:
1,購買阿里云的云數(shù)據(jù)庫高級版,自帶從庫,主庫故障自動切換到從庫
2這里主要是講第二種方式,兩臺阿里云服務器,分別部署mysql,實現(xiàn)mysql的主主同步。這里就不著重講mysql的主主同步了,大家可以自行百度,有需要的,以后可能會出一篇文章。假設(shè)現(xiàn)在已經(jīng)實現(xiàn)了mysql主主同步的情況下,如何處理
因為使用的是springboot,所以需要處理下yml文件,然后加了個發(fā)送郵件給多個人,這里主機跑的定時任務,備機需要的話,也可以相應的跑一下
因為我是使用docker部署的mysql,所以使用的docker ps
查看mysql的狀態(tài),如果普通部署的可以使用ps或者直接登錄mysql看能否成功來判斷
# coding: utf8 import subprocess from email.mime.text import MIMEText import smtplib import os #因為這里用的Java的springboot,如果切換備機,需要修改部分yml文件 YML_PATH = '' NEW_YML = '' msg_from = '' # 發(fā)送方郵箱 passwd = '' # 填入發(fā)送方郵箱的授權(quán)碼 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 '已經(jīng)連接備機,無需切換' else: switch_mysql() else: print 'mysql is broken, switch standby machine' flag = judge_mysql_string() if flag: print '已經(jīng)連接備機,無需切換' 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主機故障,已經(jīng)切換到備機,請查看主機問題,及時修復,如需切換回去,' \ 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()
總結(jié)
以上所述是小編給大家介紹的阿里云服務器手動實現(xiàn)mysql雙機熱備的兩種方式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
MySQL InnoDB行記錄存儲結(jié)構(gòu)分析
工作中我們基本上都是用MySQL的InnoDB存儲引擎,但是大家有去了解過它的底層存儲結(jié)構(gòu)嗎,想必絕大部分人不知道或者說不知道怎么查相關(guān)知識,剛好來看這篇文章就對了2023-07-07MySQL性能優(yōu)化之路---修改配置文件my.cnf
mysql數(shù)據(jù)庫的優(yōu)化,算是一個老生常談的問題了,網(wǎng)上也有很多關(guān)于各方面性能優(yōu)化的例子,今天我們要談的是MySQL 系統(tǒng)參數(shù)的優(yōu)化即優(yōu)化my.cnf文件2014-06-06自用mysql自帶命令實現(xiàn)數(shù)據(jù)庫備份還原的方法
本文章介紹了都是mysql常用的命令一些數(shù)據(jù)導入導出的命令了,只要我們撐握這些命令就可以方法快速的給我們的數(shù)據(jù)庫進行備份還原了2012-04-04MySQL查看數(shù)據(jù)庫狀態(tài)命令詳細講解
在工作中,有時候我們需要了解MySQL服務器的狀態(tài)信息,下面這篇文章主要給大家介紹了關(guān)于MySQL查看數(shù)據(jù)庫狀態(tài)命令的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-03-03