Mongodb數據分片的實現


副本集實現了網站的安全備份和故障的無縫轉移,但是並不能實現數據的大容量存儲,畢竟物理硬件是有極限的,這個時候就需要做分布式部署,把數據保存到其他機器上。Mongodb的分片技術就很完美的實現了這個需求。

 理解Mongodb的分片技術即Sharding架構

      什么是Sharding?說白了就是把海量數據水平擴展的集群系統,數據分表存儲在Sharding的各個節點上。

      Mongodb的數據分開分為chunk,每個chunk都是collection中的一段連續的數據記錄,一般為200MB,超出則生成新的數據塊。

     構建Sharding需要三種角色,

          shard服務器(Shard Server):Shard服務器是存儲實際數據的分片,每個Shard可以是一個mongod實例,也可以是一組mongod實例構成的Replica Sets,為了實現每個Shard內部的故障自動切換,MongoDB官方建議每個Shard為一組Replica Sets。

          配置服務器(Config Server):為了將一個特定的collection存儲在多個Shard中,需要為該collection指定一個Shard key,決定該條記錄屬於那個chunk,配置服務器可以存儲以下信息:

                                                1,所有Shard節點的配置信息

                                                2,每個chunk的Shard key范圍

                                                3,chunk在各Shard的分布情況

                                                4,集群中所有DB和collection的Shard配置信息

          路由進程(Route Process):一個前端路由,客戶端由此接入,首先詢問配置服務器需要到那個Shard上查詢或保存記錄,然后連接相應Shard執行操作,最后將結果返回客戶端。客戶端只需 將原本發給mongod的查詢活更新請求原封不動的發給路由器進程,而不必關心所操作的記錄存儲在那個Shard上。

 

   構建Sharding

     由上面分析可得出,構建一個Sharding至少需要4個mongodb進程,兩個Shard Server(做分片),一個Config Server,一個Route Process,然后安排如下

             進程                端口     文件目錄

            Shard Server1    2000    mongodb5

            Shard Server2    2001    mongodb6

            Config Server     30000    mongodb7

           Route Process     40000    mongodb8

      

  現在開始配置:

      1,啟動Shard Server

 

 

這里啟動只多了一個命令:shardsvr,用這個命令就表示這個進程是Shard進程。


2,啟動Config Server

啟動Config Server用的是configsvr命令

3,啟動Route Process

    

這里設置chunk大小為1M,方便測試分片效果

4,配置Sharding

所有進程都啟動好以后,剩余的就是把他們串成串兒了

 新開個cmd,然后連接到路由器進程中,使用addshard添加到路由器中

 

通過上面兩次操作,整個架構已經串成了一串,但是,別着急,架構還不知道分片的數據庫和片鍵呢

指定分片的數據庫是Friends,然后指定按照表FriendUserAttach中的_id分片。

至此整個系統配置完畢。

驗證分片情況,我是用程序插入的數據,因為表是我實際所用的表,在cmd里插入就太麻煩了,這里我用客戶端驅動插入10000條數據

 

用use命令切換到Friends數據庫,然后stats查看當前狀態

字段說明:sharded為true,說明此表是經過分片處理的

              shards部分有兩個Shard Server分別是:"shard0000" 和 "shard0001"。"shard0000"的字段count為1016,表明此Shard Server上分布的數據量是1016條,size表示此Shard Server上分布的數據庫大小,單位為b。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM