2011-08-30 47 views
30

我想在EC2上爲我的生產部署mongoDB。但是,我無法在網上找到足夠的信息來幫助解答我的架構問題。在EC2上部署MongoDB進行生產的建議做法?

  1. 一般來說,什麼應該是初始簇w/N碎片?
  2. 添加額外碎片的部署計劃應該是什麼?
  3. 什麼應該是故障轉移策略(當一個或多個節點發生故障時會發生什麼)?
  4. 災難恢復策略應該是什麼?我正在考慮在美國東部和美國西部的其他節點設立一些節點,如this powerpoint file說。

回答非常感謝。

回答

23
  1. 從啓用分片開始,但將分片數量限制爲您實際需要的 。啓用分片功能意味着已有 mongos守護進程,請選擇相關 集合的分片鍵,並儘可能使查詢成爲有針對性的,而不是全局 。從這一點開始,當負載增加時增加碎片。 可能的例外情況是,當您期待大量流量涌入 啓動時,在這種情況下,您希望同時添加更多分片和預分割 並將塊預先移至適當的分片,因爲塊平衡是一個緩慢的過程。
  2. 沒有這樣的計劃是必要的。碎片可以在飛行中添加和刪除。 請注意,刪除碎片涉及到它們的退役。從該點開始, 將在所有塊被移動到其他碎片之前花費(顯着)的時間量,以便實例可以被移除。
  3. 副本集允許這樣做。如果您的耐用性要求不是 超級關鍵,您可以通過在單個實例上託管 多個仲裁者而不是執行完整的3 成員複製來實現一定的成本效率。另請注意,使用「slaveOk」 標誌,複製將提高最終一致性兼容查詢的讀取性能 。此外,您可以考慮通過使用磁盤級故障轉移(例如RAID10)以較低的開銷實現類似級別的耐用性 。 很明顯,這並沒有發現完整的實例失敗。
  4. 地理數據中心拆分總是一個好主意,但請注意 複製性能將受到嚴重影響。策略 對此沒有任何其他數據庫不同。

附加說明:

  • EC2網絡層被限制爲每秒100k的數據包。對於小型高吞吐量查詢,這將很快成爲瓶頸。
  • RAID您的EBS卷。在單個EBS捲上運行將會導致非常不穩定的性能。隨着更多捲成爲RAID設置的一部分,這變得更加穩定。一定有!
  • 使用高內存實例。我們已經看到顯着的性能 這裏的改進,因爲只有很多你可以做的關於權利 平衡你的索引,並保持相關的數據在內存中。保留 注意你的故障/秒在mongostat。這些是頁面錯誤,因此mongo不得不打開磁盤換出頁面的次數。
6

溫斯頓,克里斯蒂娜·喬多羅的 「縮放MongoDB的」 是你想要什麼:

http://oreilly.com/catalog/0636920018308

據我瞭解,

1)你想副本集的3個或更多(一些奇數)每個分片的實例,加上每個分片中的一些時間延遲實例作爲備份

2)簡單地將它們添加到集羣中 - Mongo將緩慢地將分片移動到新節點上,直到集羣被重新平衡

3)副本集通常會很好地處理故障轉移;但是,您可能需要將Mongo的仲裁實例添加到運行應用程序前端的服務器 - 這些仲裁者將投票支持其餘實例成爲初選,以防許多節點停止運行,並且有助於確保任何可以訪問的Mongo實例您的前端服務器將能夠接管主要角色

4)將時間延遲實例添加到每個副本集是一個好主意,尤其是如果(如您所說)在地理上分佈,或者如果它們在幾個託管服務提供商(例如,如果您的主服務器在亞馬遜上,您可能需要在Rackspace上進行備份)。如果副本集的大部分發生故障,剩餘的節點將不會自動選擇新的主節點,但是您可以在發生這種災難時手動執行此操作。

8

myNoSQL是我最喜歡的NoSQL博客,最近發佈了一篇名爲Running MongoDB in the Cloud的文章,列出了幾篇關於在Amazon雲中部署MongoDB的文章。

  • 的MongoDB在Amazon EC2上使用EBS卷
  • 的MongoDB在EC2上
  • 的MongoDB在亞馬遜雲
  • 設置的MongoDB副本集在Amazon EC2上
  • 的MongoDB和亞馬遜:爲什麼EBS?
  • 亞馬遜EBS VS SSD:價格,性能,服務質量
  • 多租戶和雲存儲性能
1

1)我想用幾個碎片,除非你知道你肯定需要更多的開始。
2)添加更多分片的棘手部分是重新平衡所花費的時間。根據您的數據和負載情況,整個分片可能需要幾天才能重新平衡。因此,您希望在低負載時間安排分片添加
3)每個分片應至少有一個2 + 1副本集,副本分佈在可用區域內。
4)如果您對災難恢復感興趣,應該在各個區域而不是跨可用區域分佈副本。更多信息在這裏 - EC2 best practices。另外請記住,如果您在各地區分發副本,請正確配置副本集的優先級。