日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

管理MongoDB均衡器Balancer

云數據庫 MongoDB 版分片集群實例增刪Shard節點、數據遷移等場景下,您可能需要修改均衡器Balancer的活動窗口期或開啟關閉均衡器Balancer。本文介紹如何管理均衡器Balancer。

功能簡介

均衡器Balancer用于均衡分片集群實例中各Shard節點中的數據,不同版本的MongoDB實例工作原理存在區別:

  • MongoDB 5.0及以前版本:

    Balancer會監控分片集群實例中各個Shard節點上的Chunk(塊)數量,當某個Shard節點上的Chunk數量達到遷移閾值時,Balancer會對Shard節點上的Chunk進行遷移(moveChunk),盡量保證每個Shard節點上的Chunk數量相同。不同版本的遷移閾值存在差異,具體信息如下。

    數據庫版本

    遷移閾值

    MongoDB 3.2(已停售)

    • Chunk總數<20,遷移閾值為2。

    • 20≤Chunk總數≤80,遷移閾值為4。

    • 80≤Chunk總數,遷移閾值為8。

    MongoDB 3.4(已停售)

    MongoDB 4.0

    • 默認遷移閾值為2。

    • 如果Chunk總數小于20個,或者上次遷移的Chunk數量小于20個,遷移閾值為1。

    MongoDB 4.2

    MongoDB 4.4

    MongoDB 5.0

    遷移閾值為1。

  • MongoDB 6.0:

    由于Jumbo Chunk的存在,根據Chunk數量均衡數據可能會出現各Shard節點上Chunk數量相同,但是磁盤空間使用大小卻不同的情況。為解決上述問題,自云數據庫 MongoDB 版6.0版本起,Balancer變為監控分片集群實例中各個Shard節點上同一集合的數據大小情況,當集合在各Shard節點上的數據大小差異超過384 MB時(三倍的Chunk Size),Balancer會根據Shard Tag分割數據再遷移(moveRange)至其他Shard節點。

    如果您需要判斷數據是否均衡,可以通過getShardDistribution()命令查看集合的數據分布情況,無需再關注Chunk這個邏輯概念,只需專注于集合數據大小即可。

注意事項

  • 僅分片集群實例支持Balancer功能。

  • Balancer默認處于開啟狀態。如未開啟,請參見開啟Balancer功能。

  • Balancer的活動窗口期默認為全天,當Balancer執行塊遷移時,可能會影響數據庫性能。為避免塊遷移給您的業務帶來影響,建議您將Balancer的活動窗口期修改為業務低峰期。設置活動窗口期的方法,請參見設置Balancer的活動窗口。

  • 本文的示例均通過Mongo Shell進行操作,其他客戶端工具管理Balancer的方法以及返回信息可能與本文示例存在差異。

設置Balancer的活動窗口

  1. 通過Mongo Shell連接MongoDB分片集群實例。

  2. mongos節點命令窗口中,切換至config數據庫。

    use config
  3. 執行如下命令設置Balancer的活動窗口。

    db.settings.update(
       { _id: "balancer" },
       { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
       { upsert: true }
    )
    說明
    • <start-time>:開始時間,時間格式為HH:MM(實例所在地域的當地時間),HH取值范圍為00~23,MM取值范圍為00~59。

    • <stop-time>:結束時間,時間格式為HH:MM(實例所在地域的當地時間),HH取值范圍為00~23,MM取值范圍為00~59。

    例如,您需要將Balancer活躍窗口期修改為每天凌晨的1點到3點,示例如下:

    db.settings.update(
       { _id: "balancer" },
       { $set: { activeWindow : { start : "01:00", stop : "03:00" } } },
       { upsert: true }
    )

    設置成功后,您可以執行sh.status()命令查看Balancer的活動窗口。返回示例如下。

相關操作:如您需要Balancer始終處于運行狀態,您可以執行如下命令去除活動窗口的設置。

db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })                

開啟Balancer功能

如果您設置了數據分片,開啟Balancer功能后可能會立即觸發均衡任務。這將占用實例的資源,請在業務低峰期執行該操作。

  1. 通過Mongo Shell連接MongoDB分片集群實例。

  2. mongos節點命令窗口中,切換至config數據庫。

    use config
  3. 執行如下命令開啟Balancer功能。

    sh.setBalancerState(true)

關閉Balancer功能

均衡器Balancer默認處于開啟狀態。如果需臨時關閉,請參見以下步驟進行操作。

說明

關閉Balancer功能后,Balancer將不會再均衡各Shard節點中的數據,可能會導致數據傾斜。

  1. 通過Mongo Shell連接MongoDB分片集群實例。

  2. mongos節點命令窗口中,切換至config數據庫。

    use config
  3. 執行sh.isBalancerRunning()命令查看Balancer運行狀態。

    sh.isBalancerRunning()命令會依據Mongo Shell客戶端的版本返回不同的結果,返回結果目前有布爾值和Map兩種:

    • 布爾值

      • 返回值為false,表示Balancer沒有處于執行任務的狀態,此時可執行關閉Balancer操作。

      • 返回值為true,表示Balancer正在執行塊遷移,此時不能執行關閉Balancer的命令,否則可能引起數據不一致。

    • Map

      {
        mode: 'full',
        inBalancerRound: false,
        numBalancerRounds: Long("1143"),
        ok: 1,
        '$clusterTime': {
           clusterTime: Timestamp({ t: 1639753724, i: 3 }),
           signature: {
              hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
              keyId: Long("0")
           }
        },
        operationTime: Timestamp({ t: 1639753724, i: 3 })
      }
      • 如果inBalancerRoundfalse,表示Balancer沒有處于執行任務的狀態,此時可執行關閉Balancer操作。

      • 如果inBalancerRoundtrue,表示Balancer正在執行塊遷移,此時不能執行關閉Balancer的命令,否則可能引起數據不一致。

    更多關于sh.isBalancerRunning()的介紹,請參見sh.isBalancerRunning()

  4. 確認執行第3步的命令后返回的值為空,可執行關閉Balancer命令。

    sh.stopBalancer()