Activemq數據安全機制——Activemq中的KahaDB消息日誌的恢復機制

  KahaDB 支持多種機制在系統異常關閉後重啓並恢復。包括檢測數據文件丟失和還原損壞的metadata。這些特性並不能完全保證系統異常關閉不造成消息丟失。如果需要保證系統的高可靠性,建議部署到容災系統上。例如RAID磁盤陣列中。 

當broker正常關閉時, KahaDB message store會將所有的緩存數據刷到文件系統中。尤其是這些數據: 
1、所有未處理的日誌數據 
2、所有緩存的metadata 
最後meta store中的信息與journal數據文件中的數據保持一致性。 

正常情況下,在系統恢復時優先讀取journal中的數據。因爲metacache中的索引信息是週期性的更新到meta store中的。當系統異常關閉時,可能journal中有的數據meta store中並沒有不存在索引。但是KahaDB在恢復時會先讀取meta store中的數據,然後再讀取journal有但是meta store不存在的數據(因爲KahaDB根據meta store中的索引信息快速定位到metastore沒有但是journal文件中包含的數據,然後根據這些數據重新在meta store中建立索引信息) 

KahaDB會在更新metadata store之前,保存更新操作的概要信息到重做日誌(db.redo)中。減少系統異常關閉時的風險。因爲重做日誌非常小,所以在系統異常關閉時能快速寫入。當系統恢復時會判斷重做日誌中的信息是否需要更新到metadata中。 

如果 metadata store 已被不可挽回的損壞了,可以刪除metadata store文件(db.data)來強制恢復;只不過這個時候,broker會讀取所有的journal文件來重建metadata store,需要一段比較長的時間。 

KahaDB可以檢測是否有journal文件丟失,如果有丟失,默認將會拋出一個異常然後關閉。便於管理員調查丟失的journal文件,並手動還原。可以通過設置ignoreMissingJournalfiles爲true,讓broker在啓動時忽略這些丟失的journal文件。 

KahaDB同樣可以檢測journal文件的完整性。不過這些特性需要明確的配置來啓用。 
Xml代碼  收藏代碼
  1. <persistenceAdapter>  
  2.   <kahaDB directory="activemq-data"  
  3.           journalMaxFileLength="32mb"  
  4.           checksumJournalFiles="true"  
  5.           checkForCorruptJournalFiles="true"  
  6.           />  
  7. </persistenceAdapter>  


KahaDB的各個可配置屬性: 

屬性 默認值 描述
directory activemq-data 保存message store數據文件的目錄
indexWriteBatchSize 1000 批量更新索引的閥值,當要更新的索引到達這個索引時,批量更新到metadata store中
indexCacheSize 10000 指定metadata cache的大小
enableIndexWriteAsync false 寫入索引文件到metadata store中的方式是否採用異步寫入
journalMaxFileLength 32mb 消息持久數據文件的大小
enableJournalDiskSyncs true 如果爲true,保證使用同步寫入的方式持久化消息到journal文件中
cleanupInterval 30000 清除(清除或歸檔)不再使用的journal 文件的時間週期(毫秒)。
checkpointInterval 5000 寫入索引信息到metadata store中的時間週期(毫秒)
ignoreMissingJournalfiles false 是否忽略丟失的journal文件。如果爲false,當丟失了journal文件時,broker啓動時會拋異常並關閉
checkForCorruptJournalFiles false 如果爲true,broker在啓動的時候會檢測journal文件是否損壞,若損壞便嘗試恢復它。
checksumJournalFiles false 如果爲true。KahaDB爲journal文件生產一個checksum,以便能夠檢測journal文件是否損壞。
archiveDataLogs false 如果爲true,當達到cleanupInterval週期時,會歸檔journal文件而不是刪除
directoryArchive null 指定歸檔journal文件存放的路徑
databaseLockedWaitDelay 10000 在使用主從數據庫備份時,等待獲取DB上的lock的延遲時間。
maxAsyncJobs 10000 等待寫入journal文件的任務隊列的最大數量。應該大於或等於最大併發producer的數量。配合並行存儲轉發屬性使用。
concurrentStoreAndDispatchTransactions false 如果爲true,轉發消息的時候同時提交事務
concurrentStoreAndDispatchTopics false 如果爲true,轉發Topic消息的時候同時存儲消息的message store中。
concurrentStoreAndDispatchQueues true

如果爲true,轉發Queue消息的時候同時存儲消息到message store中。



原文鏈接:http://berdy.iteye.com/blog/813300

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章