2012-09-03 77 views
3

的情況:MongoDB的:添加新的碎片,以集羣添加負載集羣

以前,我有三臺機器:10.10.10.5,10.10.10.6和10.10.10.7

10.10.10.5運行:

  • 配置數據庫
  • mongoS
  • shard3,shard4 mongod的過程(這些是主要在它們的碎片)

10.10.10.6運行:

  • mongoS
  • shard3 shard4 mongod的過程(這些是在它們的碎片次級)

10.10.10.7運行:

  • mongoS
  • shard3,shard4 mongod進程(這些是仲裁員)

我的應用程序連接到10.10.10.6 mongoS。

一切運行良好約一年。然後,10.5和10.6經歷了非常沉重的負荷,特別是10.6。 CPU使用率和平均負載非常高,因此我計劃在羣集中添加兩臺新機器。

我創建了兩個分片:shard1和shard2。新機10.10.10.8運行:

  • shard1(主),shard2(二次)
  • mongoS

新機10.10.10.9運行:

  • shard1(二次),shard2(初級)
  • mongoS

給老成員10.10.10.7我還添加了shard1,shard2仲裁者。

問題是,當我添加兩臺新機器(使用addShard命令)時,大約5個小時後他們完成了遷移(雖然我無法確定),然後10.10.10.6主機再次具有極端高負載,平均負載約90.5(4 cpus)。

同時有很多寫入和讀取請求到10.10.10.6 mongoS應用程序,但很少有數據或沒有數據寫入新的兩臺機器。我使用iostat來查找兩臺新機器中幾乎沒有io字節。

10.10.10.6爲什麼如此高負載?

此前,即使在高峯時間,最高負荷約爲30。5

所以,你們可以提出一些建議,如何解決負載問題並讓新機器啓動並運行?

編輯:我的環境的更多信息

10.5,10.6,10.7,10.8,10.9都具有相同的種源:4CPUS,6G紀念品,150G磁盤空間,所述netio是光纖。

Shard3 datasize = 16g和Shard4 datasize 15g。

我使用1.8.2

回答

3

編輯:經過討論聊天

預計會有一些開銷增加新的碎片時,至少在最初階段。這是因爲塊遷移需要發生,並且這些將使用CPU,磁盤和網絡I/O。這會爲您的環境增加一些額外的負載。

如果您的閱讀首選項設置爲從輔助閱讀中讀取,則10.6服務器可能會很快變得過載,因爲它試圖跟上兩個副本集的複製(這會因塊遷移而增加)以及來自應用本身。有可能通過增加更多的次級服務器來減少這種影響,但是您需要在嚴格模仿您的生產環境的環境中進行測試。

添加更多的碎片可能會有所幫助,但您需要徹底測試。看起來,當你之前添加碎片時,塊遷移沒有完成,所以新碎片並沒有像應該做的那樣幫助加載。如果將來要再次添加碎片,請通過檢查db.getSiblingDB("config").locks.find({"_id":'balancer'})db.printShardingStatus()的輸出以確定碎片的數量在所有碎片中相等,以確保碎塊已完成遷移。

一些更普遍的注意事項:

  • 在生產上是不可取的只是一個單一的 配置服務器上運行。如果你失去了這個單一的配置服務器, 集羣將變得不可用。查看更多詳細信息herehere

  • 一般來說不建議在同一臺計算機上運行兩個 mongod實例。兩個進程將爭奪他們共享的資源,當MongoDB使用內存映射文件時尤其如此。

  • 通過使用一些內置工具,您可以確定哪些查詢和進程導致的加載最多 。 mongostatmongotop編輯:MongoTop在1.8.2中不可用是兩個命令行實用程序,允許您使用 軌道使用mongodb。在控制檯內部,您還可以運行 db.currentOp()以獲取有關當前 操作的更多信息。您可以通過從 控制檯發出 db.getSiblingDB("config").locks.find({"_id":'balancer'})來確定平衡器在做什麼(是否 它正在進行平衡器輪)。

  • 您正在運行一個非常舊的MongoDB版本。你應該計劃更新,如果不是最新的穩定版本(2.2.0)或最新的版本(2.0.7),則更新到你所在分支機構的最後一個穩定版本(1.8.5)。自從您正在使用該版本以來,已經對該產品進行了多次修復和改進,這將帶來許多好處。

+0

追加一個小問題,你認爲仲裁器neccesary我用命令:配置= {_ ID: 'shard3',成員:[{_ ID:0,主機: '服務器5:27019',優先:1},{_ id:1,host:'server6:27019'},{_ id:2,host:'server7:27019',arbiterOnly:true}]} server7擁有150g disckspace,所以如果我改變sever7如果更好地分擔10.6的閱讀壓力,從仲裁者到中等。 – Jack

+0

您是否會將10.7上的所有仲裁進程轉換爲次級進程?如果這樣會有很大的開銷。如果將讀取首選項設置爲次級,則在該節點上擁有兩個輔助節點可能會幫助讀取壓力。這是因爲每個輔助可能是一個閱讀目標,而不僅僅是你現在擁有的單一目標。 –

+0

親愛的安德烈,我還在廣告下添加​​了一條新評論,你看到了嗎? 謝謝 – Jack