點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了?。。?/strong>
故障現象
1)dropDatabase操作被阻塞,操作界面一直無響應。10min后超時退出。
2)新開啟的mongorestore會話沒法導入數據。
以上現象可以看出數據庫中,肯定存在阻塞會話,在mongos和數據分片的primary節點上檢查,均沒有發現阻塞進程,并且數據庫日志也未發現異常。
故障排查
這時檢查從節點日志,發現在其中一個分片(數據庫主分片)的secondary節點上可看出數據庫正在創建索引。
由上圖可以看出,數據庫正在執行background創建索引,但是background建索引的方式并不會阻塞會話,該方式之后在global/database/collection三個級別加意向鎖,見下圖:
加了意向鎖,與要執行dropDatabase()的庫是同一個庫,而新導入數據的是另一個庫,為什么也被阻塞了?
我們繼續檢查,發現如下會話存在問題:
該會話持有一個全局獨占鎖,從會話信息上可看出此會話是是一個系統會話,負責復制集的同步。
但是不管建索引還是上圖會話中的全局獨占鎖,都是發生在secondary節點上,并且mongodb的復制是讀取的primary節點的oplog,是異步的。
為什么會出現本文開始的阻塞呢 ??
此時我們查閱官方文檔可發現如下:
1)mongorestore命令的writeconcern默認值是majority。
在Mongodb復制集架構下,Writeconcern是Mongodb的寫入安全機制,其決定了一個寫操作落到多少個節點上才算成功,格式如下:
{ w:
1)w選項表示要寫入的mongodb實例的數量,其取值包含如下:
0:發起寫操作,不關心是否寫入成功。
1-集群最大數據節點數:寫操作需要復制到指定節點數才算成功。取值1是mongodb的默認值。
majority:寫操作需要被復制到大多數節點上才上成功。
tags:寫操作需要被復制到指定標簽的節點上才算成功,一般用于多數據中心指定節點標簽的情況下。
2)j選項表示要寫入journal中,才進行數據確認,wtimeout表示超時時間,單位為毫秒,表示寫入要求的全部節點的超時時間,若不設置則應用會等待直到全部寫入為止,若設置了時間,則超過時間未寫入就會報錯。
上圖表示writeconcern配置為2時,當需要寫入一主一從兩個節點時,才會想客戶端返回確認信息,在這種三節點的PSS架構中,配置w:majority也是相同的效果。如果配置w:1,則只需寫入Primary節點后就像客戶端返回確認信息。
writeconcen的配置可以在數據庫端進行默認配置,也可以在驅動上進行配置(連接串上配置),也可以在代碼上進行靈活配置,這個可以根據某個數據的重要程度來決定。
注意事項:
針對PSS架構,設置majority是較優的選擇,保證數據安全性的同時延遲時間較短,PSA架構則不使用majority,因為從庫故障的時候會導致寫入失敗或者報錯。
不要設置writeconcern等于總結點數,因為一但有一個節點故障,就會導致寫入報錯或者失敗,跟PSA架構設置majority情形相同。
witeconcern雖然會增加寫操作延遲時間,但是并不會顯著增加集群壓力,因此無論是否等待,寫操作最終都會復制到所有節點上。設置writeconcern只是讓寫操作等待復制后再返回。
應對重要數據應用{w:majority},普通數據可以應用{w:1}以確保最佳性能。
通過writeconcern的學習,就可以對此次故障作出解釋,原因是:
發現導入數據寫入的庫錯誤后,終止了mongorestore進程,但是主分片的從節點依然在后臺創建大表的索引,終止mongorestore并不能立即取消建索引操作。
mongodb的復制是串行的,由于創建索引操作長時間未完成,所以復制同步線程就在該從節點上加了全局鎖,因為兩個操作的writeconcern配置均為{w:majority}從而導致了dropDatabase和mongorestore操作被阻塞。
dropDatabase有超時時間,所以在前文的報錯截圖中可以看到writeConcernFailed,而mongorestore沒有默認超時時間,所以一直無法寫入數據。
故障處理
此次故障的解決方案是使用如下命令刪除數據庫:
use database
db.runCommand( { dropDatabase: 1,writeConcern: {w:1} } )
關閉從節點,刪除數據目錄,進行重新初始化,就可以跳過在從庫創建索引。同時mongorestore也可以添加參數--writeConcern={w:1}執行數據導入。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129548.html
摘要:對于多文檔操作來說,并未提供多文檔事物或隔離。在間隔過期之前,不會回滾或撤消已做出的修改。僅在將數據提交到后才告知客戶端。為了降低操作延遲,也增加了它提交數據至日志的頻率。 本文翻譯自 write concern。 注意,本文內容適用于MongoDB Manual 3.0.2及以上版本。 Whats write concern 所謂的寫關注就是當向客戶端報告寫操作的成功...
摘要:版本中的修改在主從部署中,把視作與是等效的。這會確保如果意外關閉了,數據也不會丟失。當這些寫操作返回時,不會撤銷在寫關注超過時限之前已經成功執行的數據修改。 Write Concern Reference 本文翻譯自 write concern reference。 注意,本文內容適用于MongoDB Manual 3.0.2及以上版本。 寫關注就是當向客戶端報告寫操作...
摘要:數據模型取決于數據庫類型。僅支持位浮點數,所以位整數會被自動轉換為位浮點數。位浮點數中的數字都是這種類型。數字只能表示為雙精度數位浮點數的另外一個問題是,有些位的整數并不能精確地表示為位浮點數。 MongoDB學習筆記(1)- MongoDB簡介及數據類型 本文所使用的MongoDB版本為 4.0.10 > db.version(); 4.0.10 一、MongoDB 介紹 1. Mo...
摘要:曲先生指出,隨著近期的產品功能增多,正在越來越滿足更廣泛的應用需求對添加區域分片使得能夠為需要跨多個數據中心提供分布式永久寫入可用性的應用程序提供服務。 作為世界前十十個全球零售品牌,擁有1.7億活躍買家和10億在線市場,eBay無法承受系統停機帶來的損失。 這就是為什么公司依靠MongoDB作為其核心企業數據平臺標準之一,為運行ebay.com的多個面向客戶的應用程序提供支持。 在今...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20