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