Mongodb的Replica Sets + Sharding架構

來源:互聯網
上載者:User

轉載自 http://www.cnblogs.com/spnt/

MongoDB的Sharding機制解決了海量儲存和動態擴容的問題,但離生產環境的高可靠,高可用還有距離,Sharding在單點出現故障時就無能為力了。但是MongoDB的複本集卻可以很輕鬆的處理單點故障,所以就有了Replica Sets + Sharding的高可用,高安全的架構。

  架構如下:

      1,shard伺服器:使用Replica Sets確保每個資料節點都具有備份、自動容錯轉移、自動回復的能力。

      2,設定管理員:使用使用3個設定管理員確保中繼資料完整性

      3,路由進程:使用3個路由進程實現平衡,提高用戶端接入效能,架構如下

3個分區進程:shard11,shard12,shard13組成一個複本集,提供Sharding中shard1的功能。

3個分區進程:shard21,shard22,shard23組成一個複本集,提供Sharding中shard2的功能。

3個設定管理員進程和3個路由器進程

--------------------------------------------------------------------------------------------

現在我們開始搭建整個架構(因為沒那麼多機器,我還是用本地的目錄來類比機器)

主機  ip 服務及連接埠

ServerA

mongodb1

mongodb2

mongodb3

mongodb4  

127.0.0.1

mongod shard11:10000

mongod shard21:20000

mongod config 1:30000

mongos :40000

ServerB

mongodb5

mongodb6

mongodb7

mongodb4  

127.0.0.1 

mongod shard12:10001

mongod shard22:20001

mongod config 2:30001

mongos :40000

ServerC

mongodb9

mongodb8

mongodb11

mongodb4 

 127.0.0.1  

mongod shard13:10002

mongod shard23:20002

mongod config 3:30002

mongos :40000

1,啟動Shard1進程並配置Replica Sets

 啟動mongod shard11進程,複本集名稱:shard1

啟動mongod shard12進程,並設定複本集:shard1

啟動mongod shard13進程,並設定複本集:shard1

  把這三個進程配置成複本集,新開一個cmd,用來執行各種非啟動命令,串連到上面三個進程中的任何一個,把他們配置成複本集,操作如下

 

2,啟動Shard2進程並配置Replica Sets

啟動mongod shard21進程,複本集名稱:shard2

啟動mongod shard22進程,並設定複本集:shard2

啟動mongod shard23進程,並設定複本集:shard2

把這三個進程配置成複本集,操作如下

 

到此兩個複本集夠成的分區已經配置完成,下面配置Config server和Route process

3,配置3個Config Server

 

4配置Route Process

chunk大小為1M,方便我們測試效果。

5配置分區的表和片鍵

我用的還是Friends庫中的FriendUser表來做分區,片鍵是_id,因為cmd寬度太小了添加分區的命令顯示不完全,我手動把他們列出來

   添加分區

    db.runCommand({addshard:"shard1/127.0.0.1:10000,127.0.0.1:10001,127.0.0.1:10002"})

    db.runCommand({addshard:"shard2/127.0.0.1:20000,127.0.0.1:20001,127.0.0.1:20002"})

 

 

到此整個構架已經配置完成了,我們來驗證下配置的情況,我通過用戶端添加10000條資料到資料庫中

可以看到分區已經執行。

------------------------------------------------------------------------------------------------

現在做下容災的測試,我停掉shard11,看看結果會如何。

開啟shard11的 cmd視窗,Ctrl+C停止進程

查看下狀態

狀態完好,我在插入20000條資料,看看效果

可以看到依然可以運行。

這裡會出現這種情況:當有三台機器做複本集的時候,只能是一太伺服器當掉,當有兩台當掉的時候,第三台不能由從庫變為主庫。

這裡應該注意複本集的選舉規則: 當主庫當掉時,次節點將觸發選舉。 收到複本集大多數成員投票的第一個節點將成為主節點。複本集選舉最重要的功能是複本集的大多數原始成員節點必須參與選舉才能成功。如果您的複本集包含三個 成員,有兩個或三個節點可以相互串連時該複本集可選出一個主節點。如果該複本集中有兩個節點離線,則剩餘的一個節點仍將作為次節點。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.