1. 程式人生 > >Ceph中出現unfound object的情況和處理

Ceph中出現unfound object的情況和處理

在上週的ceph-devel 郵件列表中,有人提到了在測試的環境中出現了 unfound object 的狀態,本文試圖分析這種情況發生的原理。

首先介紹一下什麼是 unfoud object ? unfoud object 物件就是 完成了peering 過程,各個副本達成了一致的狀態。 簡單的說,就是在副本中確定了物件的正確的版本。 在recovery 過程中,要去確定該正確的版本物件 所在的osd上的位置,如果沒有找到 擁有該正確 版本的 osd,該物件就被標記為 unfoud object。

通過上述分析可知,unfoud object 就是完成了peering 過程,但在 recovery 過程中找不到該物件正確版本所在的osd,無法恢復。

場景1

一個pg,兩副本,其acting set 為 [osd1,osd2]
此時pg處於recovery狀態,osd1上有 缺失的物件 (missing object),等待恢復。 osd2 上有完整的物件,正常情況下從osd2上同步osd1上缺失的物件即可。 這時候osd2 down掉後。 pg 重新開始peering,acting set 為[osd1,osd3],
osd1儲存了權威的日誌記錄,peering可以完成。在恢復階段,osd1上有缺失的物件無法恢復, 這些缺失的物件就處於 unfound object狀態。

這種情況發生的實質就是: pg只有兩副本,在rocovery 狀態中,只有osd2是一個完整的副本。如果唯一一個擁有完整副本的osd2 也down 了, 必然出現unfoud 物件。

場景2
當有request被阻塞時, 剔除以osd。

pool 的size 為3 , min_size 為2 。給叢集新增負載,使叢集會出現 “requests are blocked > 32 sec” 的提示。 此時剔除一個盤,其方法如下:
移除節點操作如下:
ceph osd out osd.id
service ceph osd.1 stop
ceph osd crush remove osd.id 和host
ceph rm osd.id
ceph auth del osd.id

分析如下:

pg 的acting set 為 [osd1, osd2, osd3],當執行 ceph osd out osd.1時:
該pg上物件objA:

 osd1     objA(22) objA(23)   已完成
 osd2     objA(22) objA(23)   正在完成
 osd3     objA(22) objA(23    正在完成

此時,osd1完成的物件objA 的版本22 和 23 的操作。而副本osd2和osd3 的物件objA的 22 和 23 操作都沒有完成。

osd1被標記為out後,osd2 和 osd3 首先都收到了 monitor傳送來的 osdmap的變化。 pg的 acting set 變為[osd2, osd3, osd4], pg開始觸發peering,在peering的過程中能夠從osd1上獲取pg log(由於osd標記為out,可以繼續訪問到), 確定物件ojbA的版本為23.

當recovery 時, osd1 被停止,物件objA的23版本資料無法讀出,就標記為unfound object。

從上可知,objA的23版本只在以 osd1上存在一個唯一副本。它參與了peering 過程,從而獲取了該物件的權威版本,但是隨時把該osd down後,就無法獲取資料導致。

有以上原因分析可知:
1)當管理員縮容時,建議標記為osd out後,等待ceph叢集處於clean 狀態,確定請求沒有被阻塞時,才能停止osd

2)當有 request are blocked 的情況下,osd失效導致產生 unfound object。 在這種情況,正如情況2 中的例子,無論是版本22,或者23,資料都沒有應答給客戶端。所以最終結果是版本22或者23或者最後一次寫入成功的版本都可以接受。

相關推薦

Ceph出現unfound object情況處理

在上週的ceph-devel 郵件列表中,有人提到了在測試的環境中出現了 unfound object 的狀態,本文試圖分析這種情況發生的原理。 首先介紹一下什麼是 unfoud object ? unfoud object 物件就是 完成了peering 過

vim 檢視編輯檔案,出現.swp檔案的情況處理方法

對應的翻譯是: E325: 注意 發現交換檔案 ".catalina.sh.swp"             所有者:      

特征出現缺失值的常用處理方法

span 特征 應該 OS cnblogs -s cti and HR 中文論文:三種常用的缺失值填充方法 https://wenku.baidu.com/view/94cb418f4693daef5ef73dd8.html 聊聊奇異值分解在缺失值填補中的應用 http

系統出現大量不可中斷殭屍程序該怎麼辦?

一:等待io(比如等待磁碟響應),可讓cpu使用率升高。 當iowait升高是,程序得不到硬體的響應,長時間不可中斷,可以通過ps ,top ,處於D狀態, R是running,D是不可中斷,通常是與硬體互動。Z是殭屍程序,實際上已經結束,但是沒有回收資源,比如程序描述符,pid等。 S是可中斷,I是空

js陣列出現次數最多第二多的元素

整型陣列中出現次數最多和第二多的元素 用雜湊陣列 function f(arr){ var i; var length=arr.length; var hash=[]

5種TCP連線出現RST的情況。連線復位Reset a connection.

應該沒有人會質疑,現在是一個網路時代了。應該不少程式設計師在程式設計中需要考慮多機、區域網、廣域網的各種問題。所以網路知識也是避免不了學習的。而且筆者一直覺得TCP/IP網路知識在一個程式設計師知識體系中必需佔有一席之地的。 在TCP協議中RST表示復位,用來異常的關閉連線,在TCP的設計中它是

selenium+python 自動化測試,下載檔案過程出現對話方塊問題的處理

近來,學習selenium ,下載檔案過程中,瀏覽器會彈出對話方塊。遇到這種情況,筆者綜合網上的教程,寫出注意事項。 筆者的環境是:win 7 64位 +python 3.6 +Firefox 50.0.1 +selenium 3.0.2 第一步:需要下載某個檔案,例如下載

安裝例項出現的ORA-27123ORA-12532的錯誤

在裝資料庫軟體的過程中沒有出現過異常,順利安裝結束。在裝資料庫例項的時候報了ORA-27123和ORA-12532的錯誤。安裝的伺服器是惠普伺服器256G記憶體,具體型號不得而知。 錯誤一:O

java記憶體溢位的常見情況處理方式總結

注:建議如果是面試,只用說第一部分就OK,個人見解,視情況而定。一:總結:建議面試時可以簡略說java.lang.OutOfMemoryError這個錯誤是開發中經常遇到的錯誤,產生該錯誤的原因大都出於

深入分析noedjs爬蟲出現的亂碼情況

       上一篇文章中分析了目前沒有能夠解決的亂碼的三種情況,今天就這三種情況分析一下背後的原因。        1,網頁原始碼中的編碼方式和抓包得到的編碼方式不一致問題,這個有可能是故意為之,為了反爬蟲之類的。當然也有可能是在配置伺服器的時候出錯了。

Java 記憶體溢位(java.lang.OutOfMemoryError)的常見情況處理方式總結

http://outofmemory.cn/c/java-outOfMemoryError java.lang.OutOfMemoryError這個錯誤我相信大部分開發人員都有遇到過,產生該錯誤的原因大都出於以下原因:JVM記憶體過小、程式不嚴密,產生了過多的垃圾。

.Net 記憶體溢位(System.OutOfMemoryException)的常見情況處理方式總結

在什麼情況下會出現OutOfMemonryException呢? 在我們試圖新建一個物件時,而垃圾收集器又找不到任何可用記憶體時被丟擲,這種情況下我們是可以捕獲該異常的; 另一種情況是,CLR需要記憶體時,而卻系統卻不能提供,也會丟擲該異常. 但此時,我們的應用程式是不能

Java 內存溢出(java.lang.OutOfMemoryError)的常見情況處理方式總結

lang 詳細 對象的引用 logic root 常見 gic a-out 重復 java.lang.OutOfMemoryError這個錯誤我相信大部分開發人員都有遇到過,產生該錯誤的原因大都出於以下原因:JVM內存過小、程序不嚴密,產生了過多的垃圾。 導致OutOfMe

cephrbd的增量備份恢復

ceph中rbd的增量備份和恢復 ceph的文件地址:Ceph Documentation ​ 在調研OpenStack中虛機的備份和恢復時,發現OpenStack和ceph緊密結合,使用ceph做OpenStack的後端簡直是不要太爽,於是調研了使用ceph中的塊裝置rbd來對虛機進行增量備份和恢復。以下是

雲桌面使用經常出現的一些問題該如何去判斷處理

雲桌面雲桌面啟動顯示器不亮和了黑屏1首選檢查雲終端和顯示器是否通電電源開關是否打開的2檢查顯示器後面的雲終端的狀態指示燈是否有長亮的,不亮的話是雲終端沒通電的重新插拔下電源的3從其他可用的雲桌面上更換顯示器雲終端電源測試判斷是否為硬件故障的出現大批雲桌面無法登錄問題1首選先檢查看服務器是否已經全部正常啟動的,

boostasio網路庫多執行緒併發處理實現,以及asio在多執行緒模型執行緒的排程情況執行緒安全。

1、實現多執行緒方法: 其實就是多個執行緒同時呼叫io_service::run         for (int i = 0; i != m_nThreads; ++i)         {             boost::shared_ptr<boost::

app崩潰的原因 提前測試流程/方法 出現崩潰後怎麼定位處理 總結(持續更新

首先,崩潰有幾種情況: 閃退 提示停止執行 無響應 ( 不同情況雖然沒有嚴格意義上區分開引起原因,但是都有側重。在之後的工作中,我會實時補充統計。) 1.介面返回值 [直接原因]:ap

uCOS-II任務優先級的判定處理方法

www 一行 con blog 方法 cloud 問題 找到 引入 轉載請註明原文出處,http://www.cnblogs.com/flyingcloude/p/6992346.html 在uCOS-II中,最多有64個優先級,把這64個優先級每8個分成一組,總

40.@返回字符串出現次數最多的那個字符次數2

script 最大 spl 技術分享 char 獲取 code java log 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U

golangtcp socket粘包問題處理

enc pack 獲取 人工 過程 reader 主動 exit ase 轉自:http://www.01happy.com/golang-tcp-socket-adhere/ 在用golang開發人工客服系統的時候碰到了粘包問題,那麽什麽是粘包呢?例如我們和客戶端約定數據