以下是精彩視頻內容整理,分享內容分為以下四個方面:
1.數據庫容災的基本原理和方法;
2.主流數據庫容災技術;
3.數據庫容災體系中的陷阱;
4.數據庫容災體系建設。
一、數據庫容災的基本原理和方法
二月底互聯網界發生了一次比較嚴重的刪庫事件(微盟刪庫事件),使得300萬註冊用戶、7萬付費用戶受到影響,市場損失達到了15個億,涉及到了幾百T的數據,由於數據被破壞掉,無法進行常規恢復,數據的恢復週期長達7天,對涉事公司的影響非常大。那麼,我們怎麼去做好防範工作,避免類似的事情發生或者及時做出應對,使得損失最小化呢?
在做出應對之前,我們要了解數據安全風險都有哪些類型。常見的數據安全風險主要包括硬件故障、軟件缺陷、人為問題和環境問題。
- 硬件故障:硬盤損壞、電腦硬件損壞、交換機故障等;
- 軟件故障:軟件Bug、數據庫Bug、業務層代碼Bug、黑客攻擊等;
- 人為問題:運維或研發等人員誤操作,或者惡意破壞;
- 環境問題:自然災害、人禍等;
面對這麼多潛在的數據安全風險之後,我們怎麼去防範呢?常用的措施主要包括以下。
(1)數據庫備份
數據庫備份是最常用的數據庫容災方法。在備份之前,我們一般會對數據做一些冗餘。
數據庫有一個很明顯的特點就是時時刻刻都有數據在寫入,因此在備份數據庫的過程中也會有數據寫入,造成一些數據不會被備份,就是說我們只是備份了某一個時刻的數據庫狀態,好像給數據庫拍了一個照片,這就是快照備份;因為數據庫在變化的時候會不斷地產生日誌,如果我們對所有的日誌進行備份,就可以把數據庫的每一次變化都備份下來,不會有數據遺漏,好像給數據庫拍了一個視頻,在需要的時候我們可以將恢復到任意一個時刻,這種備份方法是日誌備份。基於快照備份和日誌備份,我們就可以做到任一時間點的數據恢復。
(2)數據庫複製
備份就相當於一個靜態文件,如果數據庫出現故障我們要進行數據的恢復,一般這個時間會比較長,可能是幾小時甚至幾天的時間才能完成這個工作,而業務系統一般難以承受如此長的故障時間,因此我們可以採用數據庫複製的方法。數據庫的複製就是我們在數據庫建設的時候多個實例,任何操作都會在主實例和備實例上同時進行,這樣同一份數據就有兩份甚至多份同時存在,那麼在主實例出現某些問題,比如宕機、OS重啟等,我們可以快速的切換到備實例上,就不會對業務造成影響,達到數據庫快速恢復的效果。
(3)計算資源和存儲資源容災
在做系統架構的時候我們還會用到集群的方式,在這種方式中我們的計算資源和存儲資源是分離的,那麼我們可以在計算資源層面和存儲層面分別做相應的容災技術。比如在存儲層面在多份存儲、做存儲的鏡像等;計算層面可以單獨做成一個集群,當其中一臺服務器出現故障的時候,任何其他一臺服務器都可以進行業務接管,來保障業務系統的高可用。
上面介紹的三種方案其實主要是備份和備庫,這裡我們需要注意的是兩者之間是有區別的,並不是做了其中之一就行了,兩者在功能上還是有些差異的。備庫就好像一個替身,在主庫出現問題的時候可以快速切換,但有的問題並不能通過備庫來解決,比如主庫上發生了誤操作把數據刪除了,這個操作會同步到和備庫,導致備庫的數據也被刪除;備份是就是對同一數據庫數據的多次備份,在出現問題的時候可以用來恢復數據,就好像時間旅行,可以回到過去,取回歷史上存在的數據。但是數據恢復的週期可能會比較長。備份和備庫兩者互相補充,是數據庫容災最基本的兩種手段。這裡面有如下幾個概念在設置容災方案的時候需要注意:
- RPO:Recovery Point Object,指的是當數據庫在某一個時間點發生故障以後所能恢復的數據與故障點之間的數據差異,用來衡量數據的丟失程度。
- RTO:Recovery Time Object,指的是數據庫出現故障之後恢復所需要的時間,用來衡量業務恢復時間。
- 業務可用性:指的是一年中業務的持續時間比例,一般用幾個9來衡量,比如業務可用性達到4個9,就是可用率99.99%,那麼一年中業務的停機時間就是52分鐘左右。
- 數據可用性:指的是數據庫中數據的可用比例,一般是要求100%的可用性,因為部分數據的不可用可能對業務造成嚴重的後果。
二、主流數據庫容災技術
(一)Oracle高可用方案(RAC,DataGuard)
Oracle是一個使用非常廣泛的商業數據庫,它的高可用方案如下圖所示,主要是通過集群加上備庫的方式,同時還要有相應的存儲資源的備份。需要注意的是在其方案中備庫與主庫一般是異地存儲的,這樣子在出現數據庫安全風險的時候能將損失降低到最小。
(二)MySQL高可用方案(Replication,Cluster)
MySQL也是一種使用非常廣泛的數據庫,其容災技術的高可用方案一般通過複製和集群兩種方式,如上圖所示。其中MYSQL的複製指的是傳統的複製,包括異步複製和半同步複製兩種,就是相同的操作會在主庫和備庫上都進行,當主庫主線問題的時候可以切換到備庫上,但是在異步複製的情況下數據可能會存在延遲。5.7版本之後,我們可以採用集群方式(InnoDB Cluster),其底層是組複製的形式,其數據複製了多份實例。
(三)SQL Server高可用方案(Mirror,Cluster)
SQL Server是windows下面經常用到的一種數據庫,其容災技術的高可用方案主要有鏡像(Mirror)和集群(WSFC)兩種方式。鏡像的模式與備庫方式類似,就是數據存儲兩份,主庫上面的數據會同時傳輸到鏡像實例上。主實例發生異常時,可以啟用鏡像。SQL Server的集群方式指的是WSFC方式,是windows下的一種集群,在這種模式下它的數據只有一份,存儲在共享存儲上面,但是服務器是主、備模式的集群,主服務器出現故障的時候可以切換到備份服務器上,不會影響業務的運行,如下圖所示。
在SQL Server 2012之後有了一種更加先進的集群方式——AlwaysOn。AlwaysOn實際上是鏡像加上集群兩種方式集合起來的一種數據庫容災技術,首先它的數據會存儲多份,主庫的數據會通過日誌傳輸到多個備庫上,多個數據庫組成一個可用性組;其次,多個數據庫會承擔不同的角色,比如主數據庫承擔讀寫的角色,備庫在出現問題的時候再進行切換,某些備庫還可以設置只讀屬性,來承擔業務擴展的角色;在服務器層面,其多個節點組成一個windows集群,多節點之間可以進行容災的切換,如下圖所示。