存儲冷備
⑴ 不同系統之間的雙機熱備和雙機冷備各自優缺點以及具體製作方法,越詳細越好.雙機冷備A機切B機時都切什麼
1。不同系統沒有什麼關系,結果都是一樣。
2。雙機熱備隨時保障數據安全,數據可以恢復到故障前那一點。唯一的缺點是
當主機全部故障或者機房事故,那麼就沒喲任何數據留下了。
3。冷備份只能保障備份點那時的數據安全,而且比較麻煩,需要定時備份,備份失效或者未成功,會導致冷備份無效。但是數據可以任意安全轉移,而且不受事故影響。
4。雙機熱備除了開始設置的時候需要設置相應的磁碟陣列和RAID系列,之後都不需要做任何事情。硬體冗餘可以保障硬碟出現故障時,數據互補,及時更換硬碟,數據就可以補充以及同步。
5。不需要什麼切換,在線更換硬碟或者其他設備。
6。冷備份需要資料庫正常時備份數據,否則無效。
7。伺服器需要熱備和冷備份相輔相成。才可以最安全。
------------------------
1、熱備份是指在正常情況下,兩余度同時工作,當某一餘度出現故障時,系統可切除故障余度,啟用單余度方式,降級工作.本系統採用熱備份方式 2、有時,我們將在線的備份稱為熱備份,而將離線數據備份稱為冷備份,以區別兩種不同的備份概念.它們能將更多的數據壓縮到現有內存中,從而減少訪問硬碟(稱為虛擬內存)的辦法來解決問題 3、磁碟鏡像是一種在其中寫往物理驅動器的信息也被寫入第二個物理驅動器的一種方法,也稱為熱備份.它不同於硬碟之間的定時拷貝,作鏡像是由智能控制器和一些軟體自動地進行的 電氣設備的四種狀態 運行狀態-----指開關閘刀均在合閘位置,所有的繼電保護和自動控制裝置均已投入,控制,信號,合閘,保護電源均送上 熱備用狀態-----指開關斷開而閘刀仍在合閘位置,其它同運行狀態 冷備用狀態-----指開關閘刀均斷開,一次設備停電.控制,信號電源斷開,設備自身的保護投入,跳其它設備的壓板退出,其它設備跳該設備的壓板退出 檢修狀態-----指在冷備用的基礎上拉開被檢修設備兩側的合閘電源並根據檢修需要在檢修設備各側裝接地線,掛標示牌和裝設安全遮欄.
1. 不能出錯,否則後果嚴重 2. 若熱備份不成功,所得結果不可用於時間點的恢復 3. 因難於維護,所以要特別仔細小心,不允許「以失敗告終」。
---------------------------------------
冷備份的優點是: 1、 是非常快速的備份方法(只需拷文件) 2、 容易歸檔(簡單拷貝即可) 3、 容易恢復到某個時間點上(只需將文件再拷貝回去) 4、 能與歸檔方法相結合,做資料庫「最佳狀態」的恢復。 5、 低度維護,高度安全。 但冷備份也有如下不足: 1、 單獨使用時,只能提供到「某一時間點上」的恢復。 2、 再實施備份的全過程中,資料庫必須要作備份而不能作其他工作。也就是說,在冷備份過程中,資料庫必須是關閉狀態。 3、 若磁碟空間有限,只能拷貝到磁帶等其他外部存儲設備上,速度會很慢。 4、 不能按表或按用戶恢復。
⑵ linux 雙機冷備
最簡單的,兩台伺服器配置成一樣,備機關掉,網線拔下(為保險,斷開存儲連接),切換的時候,關掉主機,啟動備機就是了
為了提高切換速度,可以兩台都運行,IP不同;共享卷組加tag(配置好lvm.conf,增加volume_list選項),防止同時訪問。切換的時候關主機,備機改IP,將共享卷組tag刪除,改為自己能激活的tag,然後激活卷組,掛載文件系統,啟動應用。相關命令:
vgchange -an sharevg
vgchange --deltag host1 /dev/sharevg
vgchange --addtag host2 /dev/sharevg
vgchange -ay sharevg
⑶ Oracle ASM環境下怎麼進行資料庫冷備
昨天碰到一客戶,資料庫使用的是WIN2008+RAC+ASM。由於EMC存儲問題,導致ASM實例出問題,讀不出數據,進而導致RAC出問題。折騰了2個小時,終於將ASM實例啟動,將RAC轉換成單節點。可悲的是,ASM磁碟組讀取錯誤:select 表格出錯,exp、expdp出錯...
⑷ 一個磁碟陣列能做多套系統的磁碟陣列的冷備嗎
做基於存儲底層的 多對1的復制。如IBM的 remote mirror,EMC的 mirror view,HDS的 ture等。但是前提是存儲牌子是一樣的。
如果不是同牌子的分兩種,一種是用EMC的SAN COPY之類的軟體
2.用存儲虛擬化的硬體把異構環境的存儲統一管理。
⑸ 大數據時代下的三種存儲架構
大數據時代下的三種存儲架構_數據分析師考試
大數據時代,移動互聯、社交網路、數據分析、雲服務等應用的迅速普及,對數據中心提出革命性的需求,存儲基礎架構已經成為IT核心之一。政府、軍隊軍工、科研院所、航空航天、大型商業連鎖、醫療、金融、新媒體、廣電等各個領域新興應用層出不窮。數據的價值日益凸顯,數據已經成為不可或缺的資產。作為數據載體和驅動力量,存儲系統成為大數據基礎架構中最為關鍵的核心。
傳統的數據中心無論是在性能、效率,還是在投資收益、安全,已經遠遠不能滿足新興應用的需求,數據中心業務急需新型大數據處理中心來支撐。除了傳統的高可靠、高冗餘、綠色節能之外,新型的大數據中心還需具備虛擬化、模塊化、彈性擴展、自動化等一系列特徵,才能滿足具備大數據特徵的應用需求。這些史無前例的需求,讓存儲系統的架構和功能都發生了前所未有的變化。
基於大數據應用需求,「應用定義存儲」概念被提出。存儲系統作為數據中心最核心的數據基礎,不再僅是傳統分散的、單一的底層設備。除了要具備高性能、高安全、高可靠等特徵之外,還要有虛擬化、並行分布、自動分層、彈性擴展、異構資源整合、全局緩存加速等多方面的特點,才能滿足具備大數據特徵的業務應用需求。
尤其在雲安防概念被熱炒的時代,隨著高清技術的普及,720P、1080P隨處可見,智能和高清的雙向需求、動輒500W、800W甚至上千萬更高解析度的攝像機面市,大數據對存儲設備的容量、讀寫性能、可靠性、擴展性等都提出了更高的要求,需要充分考慮功能集成度、數據安全性、數據穩定性,系統可擴展性、性能及成本各方面因素。
目前市場上的存儲架構如下:
(1)基於嵌入式架構的存儲系統
節點NVR架構主要面向小型高清監控系統,高清前端數量一般在幾十路以內。系統建設中沒有大型的存儲監控中心機房,存儲容量相對較小,用戶體驗度、系統功能集成度要求較高。在市場應用層面,超市、店鋪、小型企業、政法行業中基本管理單元等應用較為廣泛。
(2)基於X86架構的存儲系統
平台SAN架構主要面向中大型高清監控系統,前端路數成百上千甚至上萬。一般多採用IPSAN或FCSAN搭建高清視頻存儲系統。作為監控平台的重要組成部分,前端監控數據通過錄像存儲管理模塊存儲到SAN中。
此種架構接入高清前端路數相對節點NVR有了較高提升,具備快捷便利的可擴展性,技術成熟。對於IPSAN而言,雖然在ISCSI環節數據並發讀寫傳輸速率有所消耗,但其憑借擴展性良好、硬體平台通用、海量數據可充分共享等優點,仍然得到很多客戶的青睞。FCSAN在行業用戶、封閉存儲系統中應用較多,比如縣級或地級市高清監控項目,大數據量的並發讀寫對千兆網路交換提出了較大的挑戰,但應用FCSAN構建相對獨立的存儲子系統,可以有效解決上述問題。
面對視頻監控系統大文件、隨機讀寫的特點,平台SAN架構系統不同存儲單元之間的數據共享冗餘方面還有待提高;從高性能伺服器轉發視頻數據到存儲空間的策略,從系統架構而言也增加了隱患故障點、ISCSI帶寬瓶頸導致無法充分利用硬體數據並發性能、接入前端數據較少。上述問題催生了平台NVR架構解決方案。
該方案在系統架構上省去了存儲伺服器,消除了上文提到的性能瓶頸和單點故障隱患。大幅度提高存儲系統的寫入和檢索速度;同時也徹底消除了傳統文件系統由於供電和網路的不穩定帶來的文件系統損壞等問題。
平台NVR中存儲的數據可同時供多個客戶端隨時查詢,點播,當用戶需要查看多個已保存的視頻監控數據時,可通過授權的視頻監控客戶端直接查詢並點播相應位置的視頻監控數據進行歷史圖像的查看。由於數據管理伺服器具有監控系統所有監控點的錄像文件的索引,因此通過平台CMS授權,視頻監控客戶端可以查詢並點播整個監控系統上所有監控點的數據,這個過程對用戶而言也是透明的。
(3)基於雲技術的存儲方案
當前,安防行業可謂「雲」山「物」罩。隨著視頻監控的高清化和網路化,存儲和管理的視頻數據量已有海量之勢,雲存儲技術是突破IP高清監控存儲瓶頸的重要手段。雲存儲作為一種服務,在未來安防監控行業有著客觀的應用前景。
與傳統存儲設備不同,雲存儲不僅是一個硬體,而是一個由網路設備、存儲設備、伺服器、軟體、接入網路、用戶訪問介面以及客戶端程序等多個部分構成的復雜系統。該系統以存儲設備為核心,通過應用層軟體對外提供數據存儲和業務服務。
一般分為存儲層、基礎管理層、應用介面層以及訪問層。存儲層是雲存儲系統的基礎,由存儲設備(滿足FC協議、iSCSI協議、NAS協議等)構成。基礎管理層是雲存儲系統的核心,其擔負著存儲設備間協同工作,數據加密,分發以及容災備份等工作。應用介面層是系統中根據用戶需求來開發的部分,根據不同的業務類型,可以開發出不同的應用服務介面。訪問層指授權用戶通過應用介面來登錄、享受雲服務。其主要優勢在於:硬體冗餘、節能環保、系統升級不會影響存儲服務、海量並行擴容、強大的負載均衡功能、統一管理、統一向外提供服務,管理效率高,雲存儲系統從系統架構、文件結構、高速緩存等方面入手,針對監控應用進行了優化設計。數據傳輸可採用流方式,底層採用突破傳統文件系統限制的流媒體數據結構,大幅提高了系統性能。
高清監控存儲是一種大碼流多並發寫為主的存儲應用,對性能、並發性和穩定性等方面有很高的要求。該存儲解決方案採用獨特的大緩存順序化演算法,把多路隨機並發訪問變為順序訪問,解決了硬碟磁頭因頻繁尋道而導致的性能迅速下降和硬碟壽命縮短的問題。
針對系統中會產生PB級海量監控數據,存儲設備的數量達數十台上百台,因此管理方式的科學高效顯得十分重要。雲存儲可提供基於集群管理技術的多設備集中管理工具,具有設備集中監控、集群管理、系統軟硬體運行狀態的監控、主動報警,圖像化系統檢測等功能。在海量視頻存儲檢索應用中,檢索性能尤為重要。傳統文件系統中,文件檢索採用的是「目錄-》子目錄-》文件-》定位」的檢索步驟,在海量數據的高清視頻監控,目錄和文件數量十分可觀,這種檢索模式的效率就會大打折扣。採用序號文件定位可以有效解決該問題。
雲存儲可以提供非常高的的系統冗餘和安全性。當在線存儲系統出現故障後,熱備機可以立即接替服務,當故障恢復時,服務和數據回遷;若故障機數據需要調用,可以將故障機的磁碟插入到冷備機中,實現所有數據的立即可用。
對於高清監控系統,隨著監控前端的增加和存儲時間的延長,擴展能力十分重要。市場中已有友商可提供單純針對容量的擴展櫃擴展模式和性能容量同步線性擴展的堆疊擴展模式。
雲存儲系統除上述優點之外,在平台對接整合、業務流程梳理、視頻數據智能分析深度挖掘及成本方面都將面臨挑戰。承建大型系統、構建雲存儲的商業模式也亟待創新。受限於寬頻網路、web2.0技術、應用存儲技術、文件系統、P2P、數據壓縮、CDN技術、虛擬化技術等的發展,未來雲存儲還有很長的路要走。
以上是小編為大家分享的關於大數據時代下的三種存儲架構的相關內容,更多信息可以關注環球青藤分享更多干貨
⑹ B站分布式KV存儲實踐
在B站的業務場景中,存在很多種不同模型的數據,有些數據關系比較復雜像:賬號、稿件信息。有些數據關系比較簡單,只需要簡單的kv模型即可滿足。此外,又存在某些讀寫吞吐比較高的業務場景,該場景早期的解決方案是通過MySQL來進行數據的持久化存儲,同時通過redis來提升訪問的速度與吞吐。但是這種模式帶來了兩個問題,其一是存儲與緩存一致性的問題,該問題在B站通過canal非同步更新緩存的方式得以解決,其二則是開發的復雜度,對於這樣一套存儲系統,每個業務都需要額外維護一個任務腳本來消費canal數據進行緩存數據的更新。基於這種場景,業務需要的其實是一個介於Redis與MySQL之間的提供持久化高性能的kv存儲。此外對象存儲的元數據,對數據的一致性、可靠性與擴展性有著很高的要求。
基於此背景,我們對自研KV的定位從一開始就是構建一個高可靠、高可用、高性能、高拓展的系統。對於存儲系統,核心是保證數據的可靠性,當數據不可靠時提供再高的可用性也是沒用的。可靠性的一個核心因素就是數據的多副本容災,通過raft一致性協議保證多副本數據的一致性。
分布式系統,如何對數據進行分片放置,業界通常有兩種做法,一是基於hash進行分區,二是基於range進行分區,兩種方式各有優缺點。hash分區,可以有效防止熱點問題,但是由於key是hash以後放置的,無法保證key的全局有序。range分區,由於相鄰的數據都放在一起,因此可以保證數據的有序,但是同時也可能帶來寫入熱點的問題。基於B站的業務場景,我們同時支持了range分區和hash分區,業務接入的時候可以根據業務特性進行選擇。大部分場景,並不需要全局有序,所以默認推薦hash分區的接入方式,比如觀看記錄、用戶動態這些場景,只需要保證同一個用戶維度的數據有序即可,同一個用戶維度的數據可以通過hashtag的方式保證局部有序。
整個系統核心分為三個組件:
Metaserver用戶集群元信息的管理,包括對kv節點的健康監測、故障轉移以及負載均衡。
Node為kv數據存儲節點,用於實際存儲kv數據,每個Node上保存數據的一個副本,不同Node之間的分片副本通過raft保證數據的一致性,並選出主節點對外提供讀寫,業務也可以根據對數據一致性的需求指定是否允許讀從節點,在對數據一致性要求不高的場景時,通過設置允許讀從節點可以提高可用性以及降低長尾。
Client模塊為用戶訪問入口,對外提供了兩種接入方式,一種是通過proxy模式的方式進行接入,另一種是通過原生的SDK直接訪問,proxy本身也是封裝自c++的原生SDK。SDK從Metaserver獲取表的元數據分布信息,根據元數據信息決定將用戶請求具體發送到哪個對應的Node節點。同時為了保證高可用,SDK還實現了重試機制以及backoff請求。
集群的拓撲結構包含了幾個概念,分別是Pool、Zone、Node、Table、Shard 與Replica。
基於不同的業務場景,我們同時支持了range分區和hash分區。對於range場景,隨著用戶數據的增長,需要對分區數據進行分裂遷移。對於hash分區的場景,使用上通常會根據業務的數據量做幾倍的冗餘預估,然後創建合適的分片數。但是即便是幾倍的冗餘預估,由於業務發展速度的不可預測,也很容易出現實際使用遠超預估的場景,從而導致單個數據分片過大。
之所以不在一開始就創建足夠的分片數有兩個原因:其一,由於每一個replica都包含一個獨立的engine,過多的分片會導致數據文件過多,同時對於批量寫入場景存在一定的寫扇出放大。其二,每一個shard都是一組raftgroup,過多的raft心跳會對服務造成額外的開銷,這一點後續我們會考慮基於節點做心跳合並優化減少集群心跳數。
為了滿足業務的需求場景,我們同時支持了range和hash兩種模式下的分裂。兩種模式分裂流程類似,下面以hash為例進行說明。
hash模式下的分裂為直接根據當前分片數進行倍增。分裂的流程主要涉及三個模塊的交互。
metaserver
分裂時,metaserver會根據當前分片數計算出目標分片數,並且下發創建replica指令到對應的Node節點,同時更新shard分布信息,唯一不同的是,處於分裂中的shard狀態為splitting。該狀態用於client流量請求路由識別。當Node完成數據分裂以後上報metaserver,metaserver更新shard狀態為normal從而完成分裂。
Node
node收到分裂請求以後,會根據需要分裂的分片id在原地拉起創建一個新的分片。然後對舊分片的數據進行checkpoint,同時記錄舊分片checkpoint對應的logid。新分片創建完成後,會直接從舊分片的checkpoint進行open,然後在非同步復制logid之後的數據保證數據的一致性。新分片載入完checkpoint後,原來的舊分片會向raftgroup提交一條分裂完成日誌,該日誌處理流程與普通raft日誌一致。分裂完成後上報分裂狀態到metaserver,同時舊分片開始拒絕不再屬於自己分片的數據寫入,client收到分片錯誤以後會請求metaserver更新shard分布。
完成分裂以後的兩個分片擁有的兩倍冗餘數據,這些數據會在engine compaction的時候根據compaction_filter過濾進行刪除。
Client
用戶請求時,根據hash(key) % shard_cnt 獲取目標分片。表分裂期間,該shard_cnt表示分裂完成後的最終分片數。以上圖3分片的分裂為例:
hash(key) = 4, 分裂前shard_cnt為3,因此該請求會被發送到shard1. 分裂期間,由於shard_cnt變為6,因此目標分片應該是shard4, 但是由於shard4為splitting,因此client會重新計算分片從而將請求繼續發送給shard1. 等到最終分裂完成後,shard4狀態變更為Normal,請求才會被發送到shard4.
分裂期間,如果Node返回分片信息錯誤,那麼client會請求metaserver更新分片分布信息。
類似於MySQL的binlog,我們基於raftlog日誌實現了kv的binlog. 業務可以根據binlog進行實時的事件流訂閱,同時為了滿足事件流回溯的需求,我們還對binlog數據進行冷備。通過將binlog冷備到對象存儲,滿足了部分場景需要回溯較長事件記錄的需求。
直接復用raftlog作為用戶行為的binlog,可以減少binlog產生的額外寫放大,唯一需要處理的是過濾raft本身的配置變更信息。learner通過實時監聽不斷拉取分片產生的binlog到本地並解析。根據learner配置信息決定將數據同步到對應的下游。同時binlog數據還會被非同步備份到對象存儲,當業務需要回溯較長時間的事件流的時候,可以直接指定位置從S3拉取歷史binlog進行解析。
基於上述提到的binlog能力,我們還基於此實現了kv的多活。learner模塊會實時將用戶寫入的數據同步到跨數據中心的其他kv集群。對於跨數據中心部署的業務,業務可以選擇就近的kv集群進行讀取訪問,降低訪問延時。
kv的多活分為讀多活和寫多活。對於讀多活,機房A的寫入會被非同步復制到機房B,機房B的服務可以直接讀取本機房的數據,該模式下只有機房A的kv可以寫入。對於寫多活,kv在機房A B 都能同時提供寫入並且進行雙向同步,但是為了保證數據的一致性,需要業務上做數據的單元化寫入,保證兩個機房不會同時修改同一條記錄。通過將用戶劃分單元,提供了寫多活的能力。通過對binlog數據打標,解決了雙向同步時候的數據回環問題。
對於用戶畫像和特徵引擎等場景,需要將離線生成的大量數據快速導入KV存儲系統提供用戶讀取訪問。傳統的寫入方式是根據生成的數據記錄一條條寫入kv存儲,這樣帶來兩個問題。其一,大批量寫入會對kv造成額外的負載與寫入帶寬放大造成浪費。其次,由於寫入量巨大,每次導入需要花費較長的時間。為了減少寫入放大以及導入提速,我們支持了bulk load的能力。離線平台只需要根據kv的存儲格式離線生成對應的SST文件,然後上傳到對象存儲服務。kv直接從對象存儲拉取SST文件到本地,然後直接載入SST文件即可對外提供讀服務。bulk load的另外一個好處是可以直接在生成SST後離線進行compaction,將compaction的負載offload到離線的同時也降低了空間的放大。
由於LSM tree的寫入特性,數據需要被不斷的compaction到更底層的level。在compaction時,如果該key還有效,那麼會被寫入到更底層的level里,如果該key已經被刪除,那麼會判斷當前level是否是最底層的,一條被刪除的key,會被標記為刪除,直到被compaction到最底層level的時候才會被真正刪除。compaction的時候會帶來額外的寫放大,尤其當value比較大的時候,會造成巨大的帶寬浪費。為了降低寫放大,我們參考了Bitcask實現了kv分離的存儲引擎sparrowdb.
sparrowdb 介紹
用戶寫入的時候,value通過append only的方式寫入data文件,然後更新索引信息,索引的value包含實際數據所在的data文件id,value大小以及position信息,同時data文件也會包含索引信息。與原始的bitcask實現不一樣的是,我們將索引信息保存在 rocksdb。
更新寫入的時候,只需要更新對應的索引即可。compaction的時候,只需將索引寫入底層的level,而無需進行data的拷貝寫入。對於已經失效的data,通過後台線程進行檢查,當發現data文件里的索引與rocksdb保存的索引不一致的時候,說明該data已經被刪除或更新,數據可以被回收淘汰。
使用kv存儲分離降低了寫放大的問題,但是由於kv分離存儲,會導致讀的時候多了一次io,讀請求需要先根據key讀到索引信息,再根據索引信息去對應的文件讀取data數據。為了降低讀訪問的開銷,我們針對value比較小的數據進行了inline,只有當value超過一定閾值的時候才會被分離存儲到data文件。通過inline以及kv分離獲取讀性能與寫放大之間的平衡。
在分布式系統中,負載均衡是繞不過去的問題。一個好的負載均衡策略可以防止機器資源的空閑浪費。同時通過負載均衡,可以防止流量傾斜導致部分節點負載過高從而影響請求質量。對於存儲系統,負載均衡不僅涉及到磁碟的空間,也涉及到機器的內存、cpu、磁碟io等。同時由於使用raft進行主從選主,保證主節點盡可能的打散也是均衡需要考慮的問題。
副本均衡
由於設計上我們會盡量保證每個副本的大小盡量相等,因此對於空間的負載其實可以等價為每塊磁碟的副本數。創建副本時,會從可用的zone中尋找包含副本數最少的節點進行創建。同時考慮到不同業務類型的副本讀寫吞吐可能不一樣導致CPU負載不一致,在挑選副本的時候會進一步檢查當前節點的負載情況,如果當前節點負載超過閾值,則跳過該節點繼續選擇其他合適的節點。目前基於最少副本數以及負載校驗基本可以做到集群內部的節點負載均衡。
當出現負載傾斜時,則從負載較高的節點選擇副本進行遷出,從集群中尋找負載最低的節點作為待遷入節點。當出現節點故障下線以及新機器資源加入的時候,也是基於均值計算待遷出以及遷入節點進行均衡。
主從均衡
雖然通過最少副本數策略保證了節點副本數的均衡,但是由於raft選主的性質,可能出現主節點都集中在部分少數節點的情況。由於只有主節點對外提供寫入,主節點的傾斜也會導致負載的不均衡。為了保證主節點的均衡,Node節點會定期向metaserver上報當前節點上副本的主從信息。
主從均衡基於表維度進行操作。metaserver會根據表在Node的分布信息進行副本數的計算。主副本的數量基於最樸素簡單的數學期望進行計算: 主副本期望值 = 節點副本數 / 分片副本數。下面為一個簡單的例子:
假設表a包含10個shard,每個shard 3個replica。在節點A、B、C、D的分布為 10、5、6、9. 那麼A、B、C、D的主副本數期望值應該為 3、1、2、3. 如果節點數實際的主副本數少於期望值,那麼被放入待遷入區,如果大於期望值,那麼被放入待遷出區。同時通過添加誤差值來避免頻繁的遷入遷出。只要節點的實際主副本數處於 [x-δx,x+δx] 則表示主副本數處於穩定期間,x、δx 分別表示期望值和誤差值。
需要注意的是,當對raft進行主從切換的時候,從節點需要追上所有已提交的日誌以後才能成功選為主,如果有節點落後的時候進行主從切換,那麼可能導致由於追數據產生的一段時間無主的情況。因此在做主從切換的時候必須要檢查主從的日誌復制狀態,當存在慢節點的時候禁止進行切換。
3.7 故障檢測&修復
一個小概率的事件,隨著規模的變大,也會變成大概率的事件。分布式系統下,隨著集群規模的變大,機器的故障將變得愈發頻繁。因此如何對故障進行自動檢測容災修復也是分布式系統的核心問題。故障的容災主要通過多副本raft來保證,那麼如何進行故障的自動發現與修復呢。
健康監測
metaserver會定期向node節點發送心跳檢查node的健康狀態,如果node出現故障不可達,那麼metaserver會將node標記為故障狀態並剔除,同時將node上原來的replica遷移到其他健康的節點。
為了防止部分node和metaserver之間部分網路隔離的情況下node節點被誤剔除,我們添加了心跳轉發的功能。上圖中三個node節點對於客戶端都是正常的,但是node3由於網路隔離與metaserver不可達了,如果metaserver此時直接剔除node3會造成節點無必要的剔除操作。通過node2轉發心跳探測node3的狀態避免了誤剔除操作。
除了對節點的狀態進行檢測外,node節點本身還會檢查磁碟信息並進行上報,當出現磁碟異常時上報異常磁碟信息並進行踢盤。磁碟的異常主要通過dmesg日誌進行採集分析。
故障修復
當出現磁碟節點故障時,需要將原有故障設備的replica遷移到其他健康節點,metaserver根據負載均衡策略選擇合適的node並創建新replica, 新創建的replica會被加入原有shard的raft group並從leader復制快照數據,復制完快照以後成功加入raft group完成故障replica的修復。
故障的修復主要涉及快照的復制。每一個replica會定期創建快照刪除舊的raftlog,快照信息為完整的rocksdb checkpoint。通過快照進行修復時,只需要拷貝checkpoint下的所有文件即可。通過直接拷貝文件可以大幅減少快照修復的時間。需要注意的是快照拷貝也需要進行io限速,防止文件拷貝影響在線io.
過期數據淘汰
在很多業務場景中,業務的數據只需要存儲一段時間,過期後數據即可以自動刪除清理,為了支持這個功能,我們通過在value上添加額外的ttl信息,並在compaction的時候通過compaction_filter進行過期數據的淘汰。level之間的容量呈指數增長,因此rocksdb越底層能容納越多的數據,隨著時間的推移,很多數據都會被移動到底層,但是由於底層的容量比較大,很難觸發compaction,這就導致很多已經過期的數據沒法被及時淘汰從而導致了空間放大。與此同時,大量的過期數據也會對scan的性能造成影響。這個問題可以通過設置periodic_compaction_seconds 來解決,通過設置周期性的compaction來觸發過期數據的回收。
scan慢查詢
除了上面提到的存在大批過期數據的時候可能導致的scan慢查詢,如果業務存在大批量的刪除,也可能導致scan的時候出現慢查詢。因為delete對於rocksdb本質也是一條append操作,delete寫入會被添加刪除標記,只有等到該記錄被compaction移動到最底層後該標記才會被真正刪除。帶來的一個問題是如果用戶scan的數據區間剛好存在大量的delete標記,那麼iterator需要迭代過濾這些標記直到找到有效數據從而導致慢查詢。該問題可以通過添加 CompactOnDeletionCollector 來解決。當memtable flush或者sst compaction的時候,collector會統計當前key被刪除的比例,通過設置合理的 deletion_trigger ,當發現被delete的key數量超過閾值的時候主動觸發compaction。
delay compaction
通過設置 CompactOnDeletionCollector 解決了delete導致的慢查詢問題。但是對於某些業務場景,卻會到來嚴重的寫放大。當L0被compaction到L1時候,由於閾值超過deletion_trigger ,會導致L1被添加到compaction隊列,由於業務的數據特性,L1和L2存在大量重疊的數據區間,導致每次L1的compaction會同時帶上大量的L2文件造成巨大的寫放大。為了解決這個問題,我們對這種特性的業務數據禁用了CompactOnDeletionCollector 。通過設置表級別參數來控製表級別的compaction策略。後續會考慮優化delete trigger的時機,通過只在指定層級觸發來避免大量的io放大。
compaction限速
由於rocksdb的compaction會造成大量的io讀寫,如果不對compaction的io進行限速,那麼很可能影響到在線的寫入。但是限速具體配置多少比較合適其實很難確定,配置大了影響在線業務,配置小了又會導致低峰期帶寬浪費。基於此rocksdb 在5.9以後為 NewGenericRateLimiter 添加了 auto_tuned 參數,可以根據當前負載自適應調整限速。需要注意的是,該函數還有一個參數 RateLimiter::Mode 用來限制操作類型,默認值為 kWritesOnly,通常情況該模式不會有問題,但是如果業務存在大量被刪除的數據,只限制寫可能會導致compaction的時候造成大量的讀io。
關閉WAL
由於raft log本身已經可以保證數據的可靠性,因此寫入rocksdb的時候可以關閉wal減少磁碟io,節點重啟的時候根據rocksdb里保存的last_apply_id從raft log進行狀態機回放即可。
降副本容災
對於三副本的raft group,單副本故障並不會影響服務的可用性,即使是主節點故障了剩餘的兩個節點也會快速選出主並對外提供讀寫服務。但是考慮到極端情況,假設同時出現兩個副本故障呢? 這時只剩一個副本無法完成選主服務將完全不可用。根據墨菲定律,可能發生的一定會發生。服務的可用性一方面是穩定提供服務的能力,另一方面是故障時快速恢復的能力。那麼假設出現這種故障的時候我們應該如何快速恢復服務的可用呢。
如果通過創建新的副本進行修復,新副本需要等到完成快照拷貝以後才能加入raft group進行選舉,期間服務還是不可用的。那麼我們可以通過強制將分片降為單副本模式,此時剩餘的單個健康副本可以獨自完成選主,後續再通過變更副本數的方式進行修復。
RaftLog 聚合提交
對於寫入吞吐非常高的場景,可以通過犧牲一定的延時來提升寫入吞吐,通過log聚合來減少請求放大。對於SSD盤,每一次寫入都是4k刷盤,value比較小的時候會造成磁碟帶寬的浪費。我們設置了每5ms或者每聚合4k進行批量提交。該參數可以根據業務場景進行動態配置修改。
非同步刷盤
有些對於數據一致性要求不是非常高的場景,服務故障的時候允許部分數據丟失。對於該場景,可以關閉fsync通過操作系統進行非同步刷盤。但是如果寫入吞吐非常高導致page cache的大小超過了 vm.diry_ratio ,那麼即便不是fsync也會導致io等待,該場景往往會導致io抖動。為了避免內核pdflush大量刷盤造成的io抖動,我們支持對raftlog進行非同步刷盤。
透明多級存儲,和緩存結合,自動冷熱分離,通過將冷數據自動搬遷到kv降低內存使用成本。
新硬體場景接入,使用SPDK 進行IO提速,使用PMEM進行訪問加速。
參考文獻
[1] Bitcask A Log-Structured Hash Table for Fast Key/Value Data
[2] Lethe: A Tunable Delete-Aware LSM Engine
⑺ Oracle ASM環境下怎麼進行資料庫冷備
昨天碰到一客戶,資料庫使用的是WIN2008+RAC+ASM。由於EMC存儲問題,導致ASM實例出問題,讀不出數據,進而導致RAC出問題。折騰了2個小時,終於將ASM實例啟動,將RAC轉換成單節點。可悲的是,ASM磁碟組讀取錯誤:select 表格出錯,exp、expdp出錯,rman拷貝出錯。趕到客戶現場,繼續折騰,終於修復錯誤。簡要步驟如下 1、同一主機下面建另一實例,用於運行DBMS_FILE_TRANSFER 2、在該實例上運行DBMS_FILE_TRANSFER,拷貝數據文件,控制文件,日誌文件 引用 CREATE DIRECTORY source_dir AS '+DATADG/ORADATA'; CREATE DIRECTORY dest_dir AS '/tmp';BEGIN DBMS_FILE_TRANSFER.COPY_FILE( source_directory_object => 'source_dir', source_file_name => 'user01.dbf', destination_directory_object => 'dest_dir', destination_file_name => 'user01.dbf'); END; /二是使用ASM提供的ftp特性 1、同一主機下面建另一實例,用於傳輸ftp 2、用ftp傳輸相關文件附:DBMS_FILE_TRANSFER使用限制 # The user must have read privilege on the source directory object and write privilege on the destination directory object. # The procere converts directory object names to uppercase unless they are surrounded by double quotes. # Files to be copied must be multiples of 512 bytes in size. # Files to be copied must be equal to or less than 2 terabytes in size. # File transfers are not transactional. # Files are copied as binary, so no character conversions are performed. # File copies can be monitored using the V$SESSION_LONGOPS view ++++++++++++++++++++++++++ 據一同事反映,Oracle 11g提供了ASM cp命令,允許在ASM磁碟組和操作系統文件之間互相拷貝。
⑻ 資料庫熱備和冷備的區別是什麼
資料庫熱備:一般用於保證服務正常不間斷運行,用兩台機器作為服務機器,一台用於實際資料庫操作應用,另外一台實時的從前者中獲取數據以保持數據一致.如果當前的機器熄火,備份的機器立馬取代當前的機器繼續提供服務
冷備:.冷備份指在資料庫關閉後,進行備份,適用於所有模式的資料庫.
熱備是指與目標設備共同運轉,當目標設備發生故障或停機時,熱備設備立即承擔起故障設備的工作任務;冷備是指當目標設備發生故障或停機後,冷備設備才開始由停機等待狀態進入啟動運轉狀態,並承擔起故障設備的工作任務
拓展資料:
資料庫(Database)是按照 數據結構來組織、 存儲和管理數據的倉庫,它產生於距今六十多年前,隨著 信息技術和市場的發展,特別是二十世紀九十年代以後, 數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。資料庫有很多種 類型,從最簡單的存儲有各種數據的 表格到能夠進行海量 數據存儲的大型資料庫系統都在各個方面得到了廣泛的應用。
⑼ 14.數據倉庫常見的存儲優化方法有哪些
存儲優化管理的方式包括數據壓縮、數據重分布、存儲治理項優化、生命周期管理等方法。
數據壓縮
在分布式文件系統中,會將數據存儲3份,這意味著存儲1TB的邏輯數據,實際上會佔用3TB的物理空間。使用盤古RAIDfile格式的文件,將存儲比從1:3提高至1:1.5。這樣做的缺點是數據塊損壞時的修復時間比原來更長,讀的性能也有損失。數據重分布
由於每個表的數據分布不同,插入順序不同,導致壓縮效果有很大的差異,通過修改表的數據重分布(distributeby,sortby欄位)進行數據重分布,能夠對表進行優化處理。存儲治理項優化:
存儲治理項優化是指在元數據的基礎上,診斷、加工成多個存儲治理優化項。目前已有的存儲治理優化項有未管理表、空表、最近62天未訪問表、數據無更新無任務表等。生命周期管理策略
根本目的:用最少的存儲成本滿足最大的業務需求,使數據價值最大化。
a)周期性刪除策略:針對無效的歷史數據進行定期清理。
b)徹底刪除策略:無用表數據或者ETL過程產生的臨時數據,以及不需要保留的數據,可以進行及時刪除,包括刪除元數據。
c)永久保留策略:重要且不可恢復的底層數據和應用數據需要永久保留。
d)極限存儲策略:超高壓縮重復鏡像數據。
e)冷數據管理策略:永久保留策略的擴展。永久保留的數據需要遷移到冷數據中心進行永久保存。一般將重要且不可恢復的、佔用存儲空間大於100TB,且訪問頻次較低的數據進行冷備,例如3年以上的日誌數據。
⑽ 電氣上什麼叫熱備什麼叫冷備
雙機熱備特指基於高可用系統中的兩台伺服器的熱備(或高可用),因兩機高可用在國內使用較多,故得名雙機熱備。
冷備是指兩個伺服器,一台運行,一台不運行做為備份。這樣一旦運行的伺服器宕機,就把備份的伺服器運行起來。冷備的方案比較容易實現,但冷備的缺點是主機出現故障時備機不會自動接管,需要主動切換服務。
(10)存儲冷備擴展閱讀
組成雙機熱備的方案主要的三種方式分別為:基於共享存儲(磁碟陣列)的方式,全冗餘方式和復制方式。故障隔離,簡單的講,高可用(熱備)就是一種利用故障點轉移的方式來保障業務連續性。其業務的恢復不是在原伺服器,而是在備用伺服器。
雙機冷備技術,可以實現數據的定時自動同步,在2台伺服器運行的時候,自動將數據定時同步到另一台伺服器。當正在提供服務的這台伺服器出現故障後,可以人工手動切換到另一台伺服器,保障系統的連續運行和服務。