中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在MongoDB中添加分片副本集

發布時間:2021-03-25 15:35:31 來源:億速云 閱讀:465 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關怎么在MongoDB中添加分片副本集,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

流程:

1、新建分片副本集

2、使用addShard命令將分片副本集添加到集群中

3、使用addShardTag命令為分片打標簽

4、使用addTagRange命令為打好標簽的分片設置片鍵的數值區間,注意,各個分片的數值區間不能有重復。

   目前測試環境的架構是:

怎么在MongoDB中添加分片副本集

01 新建副本集

   由于我們即將加入集群的分片是一個副本集,因此,需要提前將這個副本集創建好,創建的過程相對比較容易,按照之前的步驟來進行搭建,這里給出鏈接:

MongoDB 副本集的搭建

02 副本集添加到已有的集群中(addShard)

   這一步也比較簡單,可以直接在mongos上的admin數據庫使用命令addShard即可:

db.runCommand({addShard:"sharding_yeyz1/127.0.0.1:27024,127.0.0.1:27025,127.0.0.1:27026"})

當然,你也可以直接使用db.adminCommand命令來代替db.runCommand命令,這兩個命令的區別是adminCommand命令默認是在admin數據庫下面執行的,而runCommand默認的是當前數據庫。

上面的命令,將本地的:

27024、27025、27026端口加入到集群中。到這里架構會變成:

怎么在MongoDB中添加分片副本集

03 添加分片時間標簽(addShardTag)

     分片加入到集群之后,還需要對分片添加Tag,添加Tag的目的,是讓我們知道,當前分片上保留的業務數據是哪一個時間段的。在測試環境中,我使用1_1000和1000_2000這兩個tag來測試,命令如下:

sh.addShardTag("sharding_yeyz", "1_1000")
sh.addShardTag("sharding_yeyz1", "1000_2000")

對上面的命令簡單進行解釋,其中:

sharding_yeyz和sharding_yeyz1是分片副本集的名稱;

1_1000和1000_2000是tag的名稱。

添加完畢之后,我們可以通過系統的config庫下面的tag表看到tag的情況,如下:

mongos> db.shards.find()
{ "_id" : "sharding_yeyz", "host" : "sharding_yeyz/127.0.0.1:27018,127.0.0.1:27019,127.0.0.1:27020", "state" : 1, "tags" : [ "1_1000" ] }
{ "_id" : "sharding_yeyz1", "host" : "sharding_yeyz1/127.0.0.1:27024,127.0.0.1:27025,127.0.0.1:27026", "state" : 1, "tags" : [ "1000_2000" ] }

04 給打好的標簽添加具體的數值范圍(addTagRange)

   設定好標簽之后,需要設置每個標簽所代表的分片上具體的數值范圍,這就要用到addTagRange函數,使用方法如下:

sh.addTagRange( "new.test",
  { number: 1},
  { number: 1000},
  "1_1000"
  )
sh.addTagRange( "new.test",
  { number: 1000},
  { number: 2000},
  "1000_2000"
  )

注意,這里數值范圍是指分片的那個集合的片鍵的數值范圍。

分片永遠是針對集合說的。

上面的命令是說,我們對數據庫new下面的test集合做了分片,它的片鍵值是number這個字段:

當number屬于[1,1000)的時候,該文檔存放在tag是"1_1000"的這個分片上,也就是sharding_yeyz;

當number屬于[1000,2000)的時候,該文檔存放在tag是"1000_2000"的這個分片上,也就是sharding_yeyz1;

注意,區間為左閉右開。

05 查看結果

    添加分片并設置分片的數值范圍之后,我們可以使用:

db.printShardingStatus()命令或者sh.status()命令來查看當前集群中的分片情況:

mongos> sh.status()
--- Sharding Status --- 
 sharding version: {
 "_id" : 1,
 "minCompatibleVersion" : 5,
 "currentVersion" : 6,
 "clusterId" : ObjectId("5fafaf4f5785d9965548f687")
 }
 shards:
 { "_id" : "sharding_yeyz", "host" : "sharding_yeyz/127.0.0.1:27018,127.0.0.1:27019,127.0.0.1:27020", "state" : 1, "tags" : [ "1_1000" ] }
 { "_id" : "sharding_yeyz1", "host" : "sharding_yeyz1/127.0.0.1:27024,127.0.0.1:27025,127.0.0.1:27026", "state" : 1, "tags" : [ "1000_", "1000_2000" ] }
 active mongoses:
 "4.0.6" : 1
 autosplit:
 Currently enabled: yes
 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:
 { "_id" : "config", "primary" : "config", "partitioned" : true }
  config.system.sessions
   shard key: { "_id" : 1 }
   unique: false
   balancing: true
   chunks:
    sharding_yeyz 1
   { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : sharding_yeyz Timestamp(1, 0) 
 { "_id" : "new", "primary" : "sharding_yeyz", "partitioned" : true, "version" : { "uuid" : UUID("68c70c64-f732-4478-8851-06dad4b94d6b"), "lastMod" : 1 } }
  new.test
   shard key: { "number" : 1 }
   unique: false
   balancing: true
   chunks:
    sharding_yeyz 3
    sharding_yeyz1 1
   { "number" : { "$minKey" : 1 } } -->> { "number" : 1 } on : sharding_yeyz Timestamp(2, 1) 
   { "number" : 1 } -->> { "number" : 1000 } on : sharding_yeyz Timestamp(1, 2) 
   { "number" : 1000 } -->> { "number" : 2000 } on : sharding_yeyz1 Timestamp(2, 0) 
   { "number" : 2000 } -->> { "number" : { "$maxKey" : 1 } } on : sharding_yeyz Timestamp(1, 5) 
    tag: 1_1000 { "number" : 1 } -->> { "number" : 1000 }
    tag: 1000_2000 { "number" : 1000 } -->> { "number" : 2000 }

到了這里,我們開始驗證最終的結果,先通過下面的命令生成一組測試數據,如下:

for (var i=1 ;i<=2000 ; i++){ db.test.insert({"number":i})}

去查看每個分片上的內容,可以發現:

sharding_yeyz

sharding_yeyz:PRIMARY> db.test.find().sort({"number":-1})
{ "_id" : ObjectId("5ffc051dd4c416daac620af5"), "number" : 2000 }
{ "_id" : ObjectId("5ffc0511d4c416daac620325"), "number" : 2000 }
{ "_id" : ObjectId("5ffc051bd4c416daac62070c"), "number" : 999 }
{ "_id" : ObjectId("5ffc050fd4c416daac61ff3c"), "number" : 999 }
{ "_id" : ObjectId("5ffc051bd4c416daac62070b"), "number" : 998 }
{ "_id" : ObjectId("5ffc050fd4c416daac61ff3b"), "number" : 998 }
{ "_id" : ObjectId("5ffc051bd4c416daac62070a"), "number" : 997 }
{ "_id" : ObjectId("5ffc050fd4c416daac61ff3a"), "number" : 997 }
{ "_id" : ObjectId("5ffc051bd4c416daac620709"), "number" : 996 }
{ "_id" : ObjectId("5ffc050fd4c416daac61ff39"), "number" : 996 }
{ "_id" : ObjectId("5ffc051bd4c416daac620708"), "number" : 995 }

    這里需要注意,為什么2000這個值還是出現在分片一上呢?

這個原因是在設置分片的數值范圍的時候,我們設置的區間是左閉右開的。而我們設置的分片范圍分別是[1,1000)和[1000,2000),因此2000這個數字就被隨機分配到這兩個分片中,實際的情況是,它被分配到了分片一中。

sharding_yeyz1

sharding_yeyz1:PRIMARY> db.test.find().sort({"number":-1})
{ "_id" : ObjectId("5ffc051dd4c416daac620af4"), "number" : 1999 }
{ "_id" : ObjectId("5ffc0511d4c416daac620324"), "number" : 1999 }
{ "_id" : ObjectId("5ffc051dd4c416daac620af3"), "number" : 1998 }
{ "_id" : ObjectId("5ffc0511d4c416daac620323"), "number" : 1998 }
{ "_id" : ObjectId("5ffc051dd4c416daac620af2"), "number" : 1997 }
{ "_id" : ObjectId("5ffc0511d4c416daac620322"), "number" : 1997 }
{ "_id" : ObjectId("5ffc051dd4c416daac620af1"), "number" : 1996 }
{ "_id" : ObjectId("5ffc0511d4c416daac620321"), "number" : 1996 }
{ "_id" : ObjectId("5ffc051dd4c416daac620af0"), "number" : 1995 }
{ "_id" : ObjectId("5ffc0511d4c416daac620320"), "number" : 1995 }
{ "_id" : ObjectId("5ffc051dd4c416daac620aef"), "number" : 1994 }
{ "_id" : ObjectId("5ffc0511d4c416daac62031f"), "number" : 1994 }
{ "_id" : ObjectId("5ffc051dd4c416daac620aee"), "number" : 1993 }
{ "_id" : ObjectId("5ffc0511d4c416daac62031e"), "number" : 1993 }
{ "_id" : ObjectId("5ffc051dd4c416daac620aed"), "number" : 1992 }
{ "_id" : ObjectId("5ffc0511d4c416daac62031d"), "number" : 1992 }

關于怎么在MongoDB中添加分片副本集就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临颍县| 乌兰察布市| 南靖县| 安庆市| 天峨县| 建阳市| 镇坪县| 宜春市| 洪江市| 沁源县| 乐东| 明光市| 平乡县| 青海省| 望奎县| 峡江县| 甘洛县| 榆林市| 台东市| 牙克石市| 长泰县| 双城市| 瑞金市| 邵阳市| 义乌市| 辽源市| 新绛县| 中西区| 兰州市| 彰化县| 云阳县| 元朗区| 仙居县| 蕲春县| 东山县| 鄂伦春自治旗| 卓尼县| 尖扎县| 佛坪县| 正安县| 绩溪县|