網(wǎng)上有很多關(guān)于pos機(jī)備份電池電量低,從爐石傳說數(shù)據(jù)庫故障看云數(shù)據(jù)備份策略的知識,也有很多人為大家解答關(guān)于pos機(jī)備份電池電量低的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)備份電池電量低
前言最近爐石傳說的數(shù)據(jù)庫故障在業(yè)界傳得沸沸揚揚。無論故障起因是掉電宕機(jī)還是人為失誤,最終的影響是極其惡劣的,造成了無法挽回的數(shù)據(jù)丟失。對于越是大規(guī)模的數(shù)據(jù)庫系統(tǒng),如何設(shè)計一個可靠的備份系統(tǒng)越是至關(guān)重要。本文主要以UCloud云數(shù)據(jù)庫產(chǎn)品UDB的備份系統(tǒng)為例,闡述下在海量數(shù)據(jù)庫情況下,備份系統(tǒng)該如何設(shè)計,如何確保備份的安全性,如何避免數(shù)據(jù)庫從刪庫到跑路的窘境。
大型備份系統(tǒng)設(shè)計
大型備份系統(tǒng)設(shè)計考慮因素如果一個DBA只需要維護(hù)一套數(shù)據(jù)庫,那么備份和恢復(fù)無疑是較為簡單的,通常只需要知道怎么使用備份工具進(jìn)行備份和還原就搞定了。而在大公司中,數(shù)據(jù)庫實例數(shù)量往往都是成百上千個,公有云服務(wù)商甚至需要維護(hù)著十萬級別的實例數(shù)量,簡單粗糙的備份系統(tǒng)就顯得有些low了,設(shè)計一個完善的備份系統(tǒng)尤其關(guān)鍵。一個大體量的備份系統(tǒng)需要考慮好這幾個方面:如何根據(jù)業(yè)務(wù)類型選擇備份方式,邏輯備份or物理備份?如何靈活地設(shè)置備份策略,比如備份周期選擇,是否在從庫備份,備份上傳到何處如何確認(rèn)備份是否成功,哪一步驟出了問題如何確認(rèn)成功的備份實際可有效還原需要恢復(fù)時,如何做到一鍵恢復(fù)到指定時間點備份系統(tǒng)設(shè)計架構(gòu)下面以UCloud UDB為例,講述備份系統(tǒng)的一般設(shè)計架構(gòu),來解決上述問題和需求。
UDB備份系統(tǒng)架構(gòu)設(shè)計如下圖所示:
其中Access模塊是業(yè)務(wù)接入模塊。它處理所有來自API或控制臺的備份相關(guān)請求,并將請求轉(zhuǎn)發(fā)到對應(yīng)的實際物理機(jī)去執(zhí)行備份或者恢復(fù)操作;備份機(jī)集群實際存放備份文件,它可能是獨立的物理機(jī)集群,也可能是NFS等其他存儲媒介,甚至是大規(guī)模分布式存儲。
在DB物理機(jī)上進(jìn)行的備份完成后,備份系統(tǒng)會通過復(fù)雜的負(fù)載均衡算法把備份上傳到合適的備份節(jié)點上。以保證對應(yīng)的備份相對均勻地分布在備份機(jī)集群上。
“備份元數(shù)據(jù)”大型備份系統(tǒng)的核心之一,是”備份元數(shù)據(jù)”的結(jié)構(gòu)設(shè)計。備份系統(tǒng)通過與“備份元數(shù)據(jù)”所在的業(yè)務(wù)數(shù)據(jù)庫交互,來決定備份的各種配置。
所謂“備份元數(shù)據(jù)”,即每個數(shù)據(jù)庫實例的備份信息,包括該實例的信息,備份的設(shè)置策略,備份結(jié)果的詳細(xì)信息等。通過這個數(shù)據(jù)庫備份系統(tǒng)將備份元數(shù)據(jù)和常用的與備份相關(guān)的流程串通起來。
通常來說,為了能夠存儲上述的“備份元數(shù)據(jù)”,一個海量的備份系統(tǒng)大致需要這樣做表設(shè)計:一張表A存放實例的備份配置信息,一張表B存放所有實例的詳細(xì)備份記錄。表A和表B通過該數(shù)據(jù)庫實例的唯一ID從業(yè)務(wù)上關(guān)聯(lián)起來。一般這兩張表所要保存的一些信息如下圖所示。
結(jié)合備份系統(tǒng)表設(shè)計和備份系統(tǒng)架構(gòu)設(shè)計圖,大多數(shù)跟備份相關(guān)的業(yè)務(wù)流程就可以更加自動化可配置化。
A表使得每一個DB的實例的備份都可以配置,并且也可以通過備份系統(tǒng)的后臺模塊智能分析一批UDB實例的備份策略并記錄。
而B表的存在,使得每一個備份的情況都能夠進(jìn)行精確跟蹤。備份系統(tǒng)后臺可以定期分析B表的記錄,進(jìn)行后續(xù)的處理,比如給用戶告警。
幾個常見的備份恢復(fù)流程,都可以通過整套后臺系統(tǒng)和核心元數(shù)據(jù)的緊密配合來完成:
◎定時備份和手工備份:Access模塊接收到請求后,通過讀取表A的備份策略,將請求轉(zhuǎn)發(fā)到備份DB所在的物理機(jī)去執(zhí)行,備份完成后通過負(fù)載均衡算法上傳遠(yuǎn)端的NFS或是備份機(jī)集群
◎備份失敗檢測:Access模塊讀取表B的備份詳細(xì)信息和備份失敗原因,將告警發(fā)出,并且經(jīng)過分析之后,可以動態(tài)修改A表該RDS的備份配置。保證RDS的備份成功率
◎下載備份:Access模塊接受到請求后讀取表B的信息,生成一個可下載的url
◎基于時間點的恢復(fù):Access模塊接收到請求后,通過讀取表A的記錄獲取該實例的配置信息,生成一個相同配置的可用資源,再將請求轉(zhuǎn)發(fā)到這個可用資源(即恢復(fù)DB所在的物理機(jī)),在該物理機(jī)上新建出實例。接著通過讀取表B的記錄獲取備份信息,讀取表A的信息解析所需時間段的binlog,將備份和binlog導(dǎo)入新實例即完成恢復(fù)
◎通過備份新建一個RDS實例:步驟同上,略去了獲取和導(dǎo)入binlog
◎通過備份新建一個備庫實例:步驟同上,略去了獲取和導(dǎo)入binlog,改為指定復(fù)制源
UCloud UDB回檔操作整個海量DB的備份系統(tǒng),為了方便用戶自助式的備份恢復(fù)操作,還需要包含一個易用的用戶管理界面,使得用戶在涉及到備份和恢復(fù)相關(guān)的操作都盡可能快捷,用戶通過控制臺界面或者API即可輕松實現(xiàn)備份和恢復(fù)的所有流程。
以UCloud UDB point-in-time回檔為例,云數(shù)據(jù)庫秒級回檔只需要按照以下步驟點幾下即可實現(xiàn)數(shù)據(jù)恢復(fù),假設(shè)定時備份是凌晨3點,9點鐘發(fā)現(xiàn)數(shù)據(jù)庫故障,需要回檔到8:50,操作流程如下:
1 選定實例,選擇數(shù)據(jù)庫回檔功能
2 填入恢復(fù)實例名稱和需要恢復(fù)到的時間點,點擊確定即可
3 回到列表界面,即可看到這個新申請的回檔實例,等初始化完成后回檔就成功了
4 人工確認(rèn)數(shù)據(jù)確實回檔到準(zhǔn)確時間點
可以發(fā)現(xiàn),整個恢復(fù)過程中,用戶只需要做一些配置,后臺就會把剩余的工作全部完成。整個恢復(fù)的體驗更加方便友好。
備份安全性保障
常規(guī)安全性策略
業(yè)界有句話:沒有校驗的備份等于沒有備份。我對這句話也是理解深刻,曾經(jīng)碰到過多次典型的情況比如備份時沒有記錄相應(yīng)的binlog和pos點導(dǎo)致point in time恢復(fù)時不好找準(zhǔn)確的pos點,大大增加了恢復(fù)難度;
再比如mysqldump邏輯備份時沒有考慮到部分表采用utf8mb4字符集,導(dǎo)致恢復(fù)后的數(shù)據(jù)庫亂碼情況等。以UDB為例,大型備份系統(tǒng)主要從以下幾個方面確保備份安全性:
◎備份失敗監(jiān)控,一旦備份失敗就會發(fā)送告警信息
◎定期抽取歷史備份記錄進(jìn)行恢復(fù)測試
◎備份上傳前后的MD5校驗
◎備份過程中的全局讀鎖檢測,卡住時間太長則發(fā)生告警信息
◎備份周期選擇上確保兩次間隔的binlog未過期
◎備份數(shù)據(jù)冗余,本地存一份最新的備份,異地存多天的歷史備份
◎備份機(jī)集群空間檢測和負(fù)載均衡,確保空間富余
◎備份重傳和重試
其中,備份的有效性測試方法大概是這樣的:啟幾個對應(yīng)版本的數(shù)據(jù)庫并行測試,通過備份詳細(xì)記錄表獲取備份后將其傳送到這幾個實例進(jìn)行恢復(fù)測試。
由于實例數(shù)量較大,不可能每天都做恢復(fù)測試,通過讀取上一次校驗時間和校驗結(jié)果計算測試優(yōu)先級。越久沒有做過驗證的備份優(yōu)先級越高,最近校驗結(jié)果為失敗的次數(shù)越多的實例,優(yōu)先級也越高。
備份過程的全局讀鎖檢測,是因為備份過程中為了記錄當(dāng)前的pos點信息,都會執(zhí)行一個flush tables with read lock的操作,但是如果當(dāng)時有長SQL未執(zhí)行完就會導(dǎo)致全局鎖等待,從而阻塞后續(xù)的所有寫請求。
為了使備份不影響業(yè)務(wù),在備份開始后定期會檢測全局鎖等待,檢測到以后kill長連接或者kill當(dāng)前備份線程。
這些備份的常規(guī)檢測都會在備份系統(tǒng)后臺定期全自動執(zhí)行,保證了備份的成功率。
除了上述的考慮,有些特殊情況下光有備份還不夠。假設(shè)一個單實例UDB宕機(jī),由于硬件故障物理機(jī)無法啟動,物理機(jī)恢復(fù)時間茫茫無知。
這種情況下由于無法獲取最實時的binlog,僅僅通過歷史備份只能恢復(fù)到備份時間點,而無法恢復(fù)到故障前的時間點。
所以僅從安全性角度考慮,必要的備庫都是不可忽略的存在。
UDB出于客戶配置靈活,經(jīng)濟(jì)成本的考慮,既支持只創(chuàng)建單實例RDS,也可以創(chuàng)建高可用RDS和跨機(jī)房的master-slave RDS,對于重要的業(yè)務(wù),一般都建議至少配置有備庫。
智能宕機(jī)恢復(fù)方法選擇數(shù)據(jù)庫宕機(jī)有時也會造成數(shù)據(jù)損壞導(dǎo)致無法正常啟動的情況,以MySQL innodb為例,一般這時需要做一次force recovery,但是這時的業(yè)務(wù)恢復(fù)時間評估也顯得尤為重要。
UDB可以智能選擇在這種情況下采用何種恢復(fù)方式,即:
◎基于重新初始化DB+備份+binlog的恢復(fù)
◎force recovery啟動+重新mysqldump+mv損壞數(shù)據(jù)+重新導(dǎo)入
主要基于以下幾點考慮:
◎原數(shù)據(jù)量大小評估,數(shù)據(jù)量越大,重新mysqldump的時間會越長,但同樣的歷史備份傳輸+解壓時間也會越長,需要找到一個平衡點
◎備份時間點到故障時間點的寫入量評估,寫入量越大,使用歷史備份+binlog花的時間也會越長
◎恢復(fù)過程中適當(dāng)提到當(dāng)前RDS的IOPS上限
總結(jié)有效的備份和恢復(fù)策略對于數(shù)據(jù)庫安全的重要性不言而喻,而海量數(shù)據(jù)庫的備份系統(tǒng)設(shè)計和實現(xiàn)卻不是那么簡單的一件事,需要考慮的細(xì)節(jié)還有很多。
希望本文對于有意研發(fā)海量DB備份系統(tǒng)的童鞋有一些幫助。沒有意向自研的童鞋,不妨考慮將數(shù)據(jù)庫遷移上云,讓強(qiáng)大的云數(shù)據(jù)庫為您的數(shù)據(jù)保駕護(hù)航。
獲得更多關(guān)于UCloud UDB產(chǎn)品資訊, 請點擊“閱讀原文”進(jìn)入UDB產(chǎn)品頁面訪問,或者掃描左側(cè)二維碼進(jìn)一步交流
以上就是關(guān)于pos機(jī)備份電池電量低,從爐石傳說數(shù)據(jù)庫故障看云數(shù)據(jù)備份策略的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)備份電池電量低的知識,希望能夠幫助到大家!
