大資料 MongoDB 3.2.1 分區

來源:互聯網
上載者:User

標籤:root   擴充   mes   環境   故障   man   vim   mongodb分區   status   

MongoDB 分區
  • 在Mongodb裡面存在另一種叢集,就是分區技術,可以滿足MongoDB資料量大量增長的需求。

  • 當MongoDB儲存海量的資料時,一台機器可能不足以儲存資料,也可能不足以提供可接受的讀寫輸送量。這時,我們就可以通過在多台機器上分割資料,使得資料庫系統能儲存和處理更多的資料。
分區的目的

  高資料量和輸送量的資料庫應用會對單機的效能造成較大壓力,大的查詢量會將單機的CPU耗盡,大的資料量對單機的儲存壓力較大,最終會耗盡系統的記憶體而將壓力轉移到磁碟IO上。

解決方案 :有兩個基本的方法: 垂直擴充和水平擴充。
  • 垂直擴充:增加更多的CPU和儲存資源來擴充容量。

  •  水平擴充:將資料集分布在多個伺服器上。水平擴充即分區
分區結構圖(圖片來源於網路) :

MongoDB 分區群集的組成(圖片來源於網路) :MongoDB分區群集的三個主要組件:

Shard:
用於儲存實際的資料區塊,實際生產環境中一個shard server角色可由幾台機器組個一個replica set承擔,防止主機單點故障

Config Server:
mongod執行個體,儲存了整個 ClusterMetadata,其中包括 chunk資訊。

Query Routers:
前端路由,用戶端由此接入,且讓整個叢集看上去像單一資料庫,前端應用可以透明使用。

分區群集的簡單部署 :實驗環境 :1台路由執行個體(連接埠27017)。1台配置執行個體(連接埠37017)。2台shard執行個體(連接埠47017、47018)。1.配置設定管理員 :
vim mongodb1.confport=37017dbpath=/data/mongodb/mongodb1logpath=/data/logs/mongodb1.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1configsvr=true        #開啟佈建服務mongod -f /usr/local/mongodb/bin/mongodb1.conf  #開啟配置執行個體
2.配置分區伺服器 :
vim mongodb2.confport=47017dbpath=/data/mongodb/mongodb2logpath=/data/logs/mongodb2.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1shardsvr=true    #開啟分區服務vim mongodb3.confport=47018dbpath=/data/mongodb/mongodb3logpath=/data/logs/mongodb3.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1shardsvr=true    #開啟分區服務mongod -f /usr/local/mongodb/bin/mongodb2.conf   #開啟分區執行個體mongod -f /usr/local/mongodb/bin/mongodb3.conf
3.啟動路由伺服器 :
[[email protected] bin]# ./mongos --port 27017 --fork  --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.217.134:37017 --chunkSize 12018-07-23T14:15:28.185+0800 W SHARDING [main] Running a sharded cluster with fewer than 3 config servers should only be done for testing purposes and is not recommended for production.about to fork child process, waiting until server is ready for connections.forked process: 15337child process started successfully, parent exiting
4.添加分區伺服器 :
[[email protected] bin]# mongoMongoDB shell version: 3.2.1......mongos> show dbsconfig  0.031GBmongos> sh.status()      #查看分區狀態--- Sharding Status ---   sharding version: {    "_id" : 1,    "minCompatibleVersion" : 5,    "currentVersion" : 6,    "clusterId" : ObjectId("5b557280f9effb757fd31cdb")}  shards:            #分區為空白  active mongoses:    "3.2.1" : 1  balancer:    Currently enabled:  yes    Currently running:  no    Failed balancer rounds in last 5 attempts:  0    Migration Results for the last 24 hours:         No recent migrations  databases:mongos> sh.addShard("192.168.217.134:47017")   #添加分區{ "shardAdded" : "shard0000", "ok" : 1 }mongos> sh.addShard("192.168.217.134:47018"){ "shardAdded" : "shard0001", "ok" : 1 }mongos> sh.status()       #查看分區狀態--- Sharding Status ---   sharding version: {    "_id" : 1,    "minCompatibleVersion" : 5,    "currentVersion" : 6,    "clusterId" : ObjectId("5b557280f9effb757fd31cdb")}  shards:      #分區資訊    {  "_id" : "shard0000",  "host" : "192.168.217.134:47017" }    {  "_id" : "shard0001",  "host" : "192.168.217.134:47018" }  active mongoses:    "3.2.1" : 1  balancer:    Currently enabled:  yes    Currently running:  no    Failed balancer rounds in last 5 attempts:  0    Migration Results for the last 24 hours:         No recent migrations  databases:
4.啟用分區伺服器 :
mongos> use testswitched to db testmongos> for(var i=1;i<=10000;i++)db.users.insert({"id":i,"name":"tom"+i})  #添加資料WriteResult({ "nInserted" : 1 })mongos> sh.status()  .......  databases:    {  "_id" : "test",  "primary" : "shard0000",  "partitioned" : false }    #partitioned 值為false 表示資料庫尚未分區。mongos> sh.enableSharding("test")   #啟用資料庫分區mongos> db.users.createIndex({"id":1})   #建立索引mongos> sh.shardCollection("test.users",{"id":1})  #表分區{ "collectionsharded" : "test.users", "ok" : 1 }mongos> sh.status()......            { "id" : { "$minKey" : 1 } } -->> { "id" : 2341 } on : shard0001 Timestamp(5, 1)             { "id" : 2341 } -->> { "id" : 4682 } on : shard0001 Timestamp(3, 0)             { "id" : 4682 } -->> { "id" : 7023 } on : shard0000 Timestamp(6, 1)             { "id" : 7023 } -->> { "id" : 9364 } on : shard0000 Timestamp(1, 3)             { "id" : 9364 } -->> { "id" : 13407 } on : shard0000 Timestamp(3, 2)             { "id" : 13407 } -->> { "id" : 21295 } on : shard0000 Timestamp(3, 3)             { "id" : 21295 } -->> { "id" : 25976 } on : shard0001 Timestamp(4, 2)             { "id" : 25976 } -->> { "id" : 33545 } on : shard0001 Timestamp(4, 3)             { "id" : 33545 } -->> { "id" : 38226 } on : shard0000 Timestamp(5, 2)             { "id" : 38226 } -->> { "id" : 45910 } on : shard0000 Timestamp(5, 3)             { "id" : 45910 } -->> { "id" : { "$maxKey" : 1 } } on : shard0001 Timestamp(6, 0) #資料存放在兩個分區伺服器上即:shard0000、shard0001中。
5.給分區添加標籤 :
mongos> sh.status()......  shards:    {  "_id" : "shard0000",  "host" : "192.168.217.134:47017" }    {  "_id" : "shard0001",  "host" : "192.168.217.134:47018" }mongos> sh.addShardTag("shard0000","sales00")  #添加標籤mongos> sh.addShardTag("shard0001","sales01")mongos> sh.status()......  shards:    {  "_id" : "shard0000",  "host" : "192.168.217.134:47017",  "tags" : [ "sales00" ] }    {  "_id" : "shard0001",  "host" : "192.168.217.134:47018",  "tags" : [ "sales01" ] }
6.刪除分區節點 :
mongos> use adminmongos> db.runCommand({"removeshard":"192.168.217.134:47018"})   #刪除分區節點

ps:MongoDB 4以上的版本做分區,需要先把執行個體做成複製集。

大資料 MongoDB 3.2.1 分區

相關文章

聯繫我們

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