Mongodb叢集之分區儲存

來源:互聯網
上載者:User

標籤:mongodb   資料庫   

上節咱們遺留了兩個問題還沒解決:

  • 從節點每個上面的資料都是對資料庫全部拷貝,從節點壓力會不會過大?
  • 資料壓力大到機器支撐不了的時候是否會自動擴充

在系統早期,資料量還小的時候不會引起太大的問題,但是隨著資料量持續增多,後續遲早會出現一台機器硬體瓶頸問題的。而mongodb主打的就是海量資料架構,“分區”就用這個來解決這個問題。

分區,是將一個邏輯資料拆分到不同的伺服器。每個拆分的資料都是獨立的,

 


分區好處:


1分區使得叢集中每個切片操作資料量減少,同時叢集的操作能力增加也提高了輸送量

2分區減少了每個伺服器需要儲存的資料量。隨著叢集的的增長每個分區儲存更少的資料

 

如何分區

Mongodb支援通過設定檔做分區叢集

我們通過一張圖可以看出

 

分區叢集由三部分組成:Router(mongos)config Server, shard (Replica Sets,複本集)


Shard: 這就是分區了,儲存資料,用於提供高可用性和一致性。

Mongos:路由伺服器,資料庫叢集的入口,所有請求通過mongos進行協調,不需要在應用程式中添加一個路由選擇,mongos自己便是一個請求分發中心,負責把對象請求轉寄到對應的分區伺服器上。

ConfigServer :顧名思義為設定管理員,儲存所有資料庫元資訊(路由、分區)的配置。mongos本身沒有實體儲存體分區伺服器和資料路由資訊,只是緩衝在記憶體裡,設定管理員則實際儲存這些資料。mongos第一次啟動或者關掉重啟就會從config server 載入配置資訊,以後如果設定管理員資訊變化會通知到所有的 mongos 更新自己的狀態,這樣 mongos就能繼續準確路由。在生產環境通常有多個 config server 設定管理員,因為它儲存了分區路由的中繼資料,這個可不能丟失!就算掛掉其中一台,只要還有存貨,mongodb叢集就不會掛掉。


實戰

 

1 首先準備3各mongodb資料庫,分別作為設定管理員,分區1和分區2,都儲存在一個機器上,對應連接埠不同

2 規劃連接埠,設定管理員 2000,路由伺服器 1000,分區A 8091,分區B 8092, 

3 各個伺服器的配置資訊 

 3.1 首先是建立設定管理員

configuration.confdbpath =J:\java\mongopointcut\conf\databaseport =2000bind_ip=127.0.0.1 Configuration.batmongod --configconfiguration.conf

  3.2建立路由器伺服器,並串連設定管理員,路由器是調用mongos命令

mongos --port 1000--configdb 127.0.0.1:2000connectonMongos.batmongo127.0.0.1:1000/admin

 

3.3建立分區伺服器配置

shardA.confdbpath=J:\java\mongopointcut\pointcut2\databaseport=8092bind_ip=127.0.0.1 connictShartA.batmongod --config shardA.conf loginShartA.batmongo127.0.0.1:8091/admin ShartB.confdbpath=J:\java\mongopointcut\pointcut2\databaseport=8092bind_ip=127.0.0.1 mongod--config ShartB.conf


4登入伺服器

 

4.1 首先登入設定管理員,在登入路由伺服器。在啟動各個分區伺服器

在路由器伺服器中添加分區伺服器。但是mongos本身沒有實體儲存體分區伺服器和資料路由資訊,只是緩衝在記憶體裡,設定管理員則實際儲存這些資料。

 

db.runCommand({addshard:"127.0.0.1:8091",allowLocal:true})db.runCommand({addshard:"127.0.0.1:8092",allowLocal:true})


 

這裡要注意的是,在addshard中,我們也可以添加複本集,這樣能達到更高的穩定性

 

4.2片已經叢集了,但是mongos不知道如何切分資料

  開啟資料庫分區功能,命令很簡單 enablesharding(),這裡我就開啟foobar資料庫。

 指定集合中分區的片鍵,這裡我就指定為bar.id欄位,也就是片鍵,在mogondb中設定片鍵

 

通過查看設定管理員,可以看到


 

5查看效果

 我們添加90萬條的資料

function add(){   vari=0;   for(;i<200000;i++){  db.bar.insert({"age":i+10,"name":"jim"})  }} 

通過printshardingSttus查看分區情況

 

mongos> showcollectionsbarpersonsystem.indexesmongos>db.bar.stats(){        "sharded" : true,        "systemFlags" : 1,        "userFlags" : 1,        "ns" :"foobar.bar",        "count" :931672,  //總計條數        "numExtents" : 19,        "size" : 104347264,        "storageSize" : 144752640,        "totalIndexSize" : 36334144,        "indexSizes" : {                "_id_" : 36334144        },        "avgObjSize" : 112,        "nindexes" : 1,        "nchunks" : 7,        "shards" : {                "shard0000" : {                        "ns" :"foobar.bar",                       "count" : 352282, //分區1                        "size" :39455584,                        "avgObjSize": 112,                        "storageSize": 58441728,                                             "userFlags" : 1,                       "totalIndexSize" : 13441344,                        "indexSizes": {                               "_id_" : 13441344                        },                        "ok" : 1                },                "shard0001" : {                        "ns" :"foobar.bar",                       "count" : 579390,  //分區2                        "size" :64891680,                        "avgObjSize": 112,                                               "totalIndexSize" : 22892800,                        "indexSizes": {                               "_id_" : 22892800                        },                        "ok" : 1                }        },        "ok" : 1}

可以看到資料分到倆個分區中,shard1352282,shard2 579390,總數931672,已經成功。

 

小結: 


  通過分區的測試我們認識到分區儲存減少了資料庫的拷貝,同時增加了叢集的輸送量,同時分區也是複本集的一種增強,它是在複本集的基礎上進行改善的。

 

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Mongodb叢集之分區儲存

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.