成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

故障中學習Mongodb write concern

IT那活兒 / 805人閱讀
故障中學習Mongodb write concern

點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了!!!





故障現(xiàn)象



某客戶一套Mongodb分片集群數(shù)據(jù)庫在上線前,準備導入數(shù)據(jù)數(shù)據(jù)進行壓力測試,但是根據(jù)業(yè)務方的要求,源端和目標端的庫名發(fā)生了變化。
維護人員在使用mongorestore導入數(shù)據(jù)指定了錯誤的數(shù)據(jù)庫名,當發(fā)現(xiàn)的時候導入了大概80%的數(shù)據(jù),此時中斷了數(shù)據(jù)導入,然后執(zhí)行db.dropDatabase()刪除數(shù)據(jù)庫并重新導入,此時發(fā)現(xiàn)了如下問題:

1)dropDatabase操作被阻塞,操作界面一直無響應。10min后超時退出。


2)新開啟的mongorestore會話沒法導入數(shù)據(jù)。


以上現(xiàn)象可以看出數(shù)據(jù)庫中,肯定存在阻塞會話,在mongos和數(shù)據(jù)分片的primary節(jié)點上檢查,均沒有發(fā)現(xiàn)阻塞進程,并且數(shù)據(jù)庫日志也未發(fā)現(xiàn)異常。





故障排查



這時檢查從節(jié)點日志,發(fā)現(xiàn)在其中一個分片(數(shù)據(jù)庫主分片)的secondary節(jié)點上可看出數(shù)據(jù)庫正在創(chuàng)建索引。


由上圖可以看出,數(shù)據(jù)庫正在執(zhí)行background創(chuàng)建索引,但是background建索引的方式并不會阻塞會話,該方式之后在global/database/collection三個級別加意向鎖,見下圖:


加了意向鎖,與要執(zhí)行dropDatabase()的庫是同一個庫,而新導入數(shù)據(jù)的是另一個庫,為什么也被阻塞了?

我們繼續(xù)檢查,發(fā)現(xiàn)如下會話存在問題:


該會話持有一個全局獨占鎖,從會話信息上可看出此會話是是一個系統(tǒng)會話,負責復制集的同步。

但是不管建索引還是上圖會話中的全局獨占鎖,都是發(fā)生在secondary節(jié)點上,并且mongodb的復制是讀取的primary節(jié)點的oplog,是異步的。

為什么會出現(xiàn)本文開始的阻塞呢 ??

此時我們查閱官方文檔可發(fā)現(xiàn)如下:

1)mongorestore命令的writeconcern默認值是majority。



2)dropDatabase()命令的writeconcern默認值同樣是majority。


在Mongodb復制集架構下,Writeconcern是Mongodb的寫入安全機制,其決定了一個寫操作落到多少個節(jié)點上才算成功,格式如下:

{ w: , j: , wtimeout: }

1)w選項表示要寫入的mongodb實例的數(shù)量,其取值包含如下:

  • 0:發(fā)起寫操作,不關心是否寫入成功。

  • 1-集群最大數(shù)據(jù)節(jié)點數(shù):寫操作需要復制到指定節(jié)點數(shù)才算成功。取值1是mongodb的默認值。

  • majority:寫操作需要被復制到大多數(shù)節(jié)點上才上成功。

  • tags:寫操作需要被復制到指定標簽的節(jié)點上才算成功,一般用于多數(shù)據(jù)中心指定節(jié)點標簽的情況下。

2)j選項表示要寫入journal中,才進行數(shù)據(jù)確認,wtimeout表示超時時間,單位為毫秒,表示寫入要求的全部節(jié)點的超時時間,若不設置則應用會等待直到全部寫入為止,若設置了時間,則超過時間未寫入就會報錯。


上圖表示writeconcern配置為2時,當需要寫入一主一從兩個節(jié)點時,才會想客戶端返回確認信息,在這種三節(jié)點的PSS架構中,配置w:majority也是相同的效果。如果配置w:1,則只需寫入Primary節(jié)點后就像客戶端返回確認信息。

writeconcen的配置可以在數(shù)據(jù)庫端進行默認配置,也可以在驅動上進行配置(連接串上配置),也可以在代碼上進行靈活配置,這個可以根據(jù)某個數(shù)據(jù)的重要程度來決定。

注意事項:

  • 針對PSS架構,設置majority是較優(yōu)的選擇,保證數(shù)據(jù)安全性的同時延遲時間較短,PSA架構則不使用majority,因為從庫故障的時候會導致寫入失敗或者報錯。

  • 不要設置writeconcern等于總結點數(shù),因為一但有一個節(jié)點故障,就會導致寫入報錯或者失敗,跟PSA架構設置majority情形相同。

  • witeconcern雖然會增加寫操作延遲時間,但是并不會顯著增加集群壓力,因此無論是否等待,寫操作最終都會復制到所有節(jié)點上。設置writeconcern只是讓寫操作等待復制后再返回。

  • 應對重要數(shù)據(jù)應用{w:majority},普通數(shù)據(jù)可以應用{w:1}以確保最佳性能。

通過writeconcern的學習,就可以對此次故障作出解釋,原因是:

  • 發(fā)現(xiàn)導入數(shù)據(jù)寫入的庫錯誤后,終止了mongorestore進程,但是主分片的從節(jié)點依然在后臺創(chuàng)建大表的索引,終止mongorestore并不能立即取消建索引操作。

  • mongodb的復制是串行的,由于創(chuàng)建索引操作長時間未完成,所以復制同步線程就在該從節(jié)點上加了全局鎖,因為兩個操作的writeconcern配置均為{w:majority}從而導致了dropDatabase和mongorestore操作被阻塞。

  • dropDatabase有超時時間,所以在前文的報錯截圖中可以看到writeConcernFailed,而mongorestore沒有默認超時時間,所以一直無法寫入數(shù)據(jù)。





故障處理



此次故障的解決方案是使用如下命令刪除數(shù)據(jù)庫:

use database

db.runCommand( { dropDatabase: 1,writeConcern: {w:1} } )

關閉從節(jié)點,刪除數(shù)據(jù)目錄,進行重新初始化,就可以跳過在從庫創(chuàng)建索引。同時mongorestore也可以添加參數(shù)--writeConcern={w:1}執(zhí)行數(shù)據(jù)導入。




本文作者:劉運彬

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/129548.html

相關文章

  • MongoDB - write concern concept

    摘要:對于多文檔操作來說,并未提供多文檔事物或隔離。在間隔過期之前,不會回滾或撤消已做出的修改。僅在將數(shù)據(jù)提交到后才告知客戶端。為了降低操作延遲,也增加了它提交數(shù)據(jù)至日志的頻率。 本文翻譯自 write concern。 注意,本文內容適用于MongoDB Manual 3.0.2及以上版本。 Whats write concern 所謂的寫關注就是當向客戶端報告寫操作的成功...

    callmewhy 評論0 收藏0
  • MongoDB - Write Concern Reference

    摘要:版本中的修改在主從部署中,把視作與是等效的。這會確保如果意外關閉了,數(shù)據(jù)也不會丟失。當這些寫操作返回時,不會撤銷在寫關注超過時限之前已經(jīng)成功執(zhí)行的數(shù)據(jù)修改。 Write Concern Reference 本文翻譯自 write concern reference。 注意,本文內容適用于MongoDB Manual 3.0.2及以上版本。 寫關注就是當向客戶端報告寫操作...

    ARGUS 評論0 收藏0
  • MongoDB筆記(1)- MongoDB簡介、數(shù)據(jù)類型及幫助命令

    摘要:數(shù)據(jù)模型取決于數(shù)據(jù)庫類型。僅支持位浮點數(shù),所以位整數(shù)會被自動轉換為位浮點數(shù)。位浮點數(shù)中的數(shù)字都是這種類型。數(shù)字只能表示為雙精度數(shù)位浮點數(shù)的另外一個問題是,有些位的整數(shù)并不能精確地表示為位浮點數(shù)。 MongoDB學習筆記(1)- MongoDB簡介及數(shù)據(jù)類型 本文所使用的MongoDB版本為 4.0.10 > db.version(); 4.0.10 一、MongoDB 介紹 1. Mo...

    nihao 評論0 收藏0
  • eBay:使用MongoDB構建關鍵任務的多數(shù)據(jù)中心應用程序

    摘要:曲先生指出,隨著近期的產(chǎn)品功能增多,正在越來越滿足更廣泛的應用需求對添加區(qū)域分片使得能夠為需要跨多個數(shù)據(jù)中心提供分布式永久寫入可用性的應用程序提供服務。 作為世界前十十個全球零售品牌,擁有1.7億活躍買家和10億在線市場,eBay無法承受系統(tǒng)停機帶來的損失。 這就是為什么公司依靠MongoDB作為其核心企業(yè)數(shù)據(jù)平臺標準之一,為運行ebay.com的多個面向客戶的應用程序提供支持。 在今...

    charles_paul 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<