mongo 3.4分片集群系列之五:詳解平衡器

来源:http://www.cnblogs.com/ddbear/archive/2017/11/23/7885640.html
-Advertisement-
Play Games

這個系列大致想跟大家分享以下篇章(我會持續更新的↖(^ω^)↗): 1、mongo 3.4分片集群系列之一:淺談分片集群 2、mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3、mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全 4、mongo 3.4分片集群系列之 ...


這個系列大致想跟大家分享以下篇章(我會持續更新的↖(^ω^)↗):

1、mongo 3.4分片集群系列之一:淺談分片集群

2、mongo 3.4分片集群系列之二:搭建分片集群--哈希分片

3、mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全

4、mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 區域

5、mongo 3.4分片集群系列之五:詳解平衡器

6、mongo 3.4分片集群系列之六:詳解配置資料庫

7、mongo 3.4分片集群系列之七:配置資料庫管理

8、mongo 3.4分片集群系列之八:分片管理

 

這篇為理論篇

這篇章主要講一下以下幾個點:

1)         簡要說說平衡器是啥吧

2)         平衡器在分片集群中是乾什麼的,也就是平衡器的作用

3)         這裡還會仔細說明分片集群中遷移塊的過程

4)         平衡器的定時啟用和關閉

5)         怎麼減少平衡器對分片集群的性能影響

6)         關於平衡器的一些命令

 

1、        簡要說說平衡器是啥

MongoDB的平衡器是一個後臺進程,監視每個分片上塊的數目。當給定分片上的塊數達到特定的遷移閾值時,平衡器會嘗試在分片之間自動遷移塊,使得每個分片達到相等數量的塊。平衡器將比較多塊的分片中的塊遷移到塊數量較少的分片中。平衡器遷移塊,直到集合在分片之間的塊均勻分佈。

平衡器具有以下閾值:

塊數

遷移閾值

少於20

2

20-79

4

多於80

8

 

分片集群的平衡過程對用戶和應用層完全透明,儘管在執行過程中可能會有一些性能影響。

2、        平衡器在分片集群中是乾什麼的,也就是平衡器的作用

其中,上面已經介紹了,說得直白點,就是用來在分片集群中遷移塊的。

3、        分片集群中遷移塊的過程

所有塊遷移使用以下過程:

  1. 平衡器進程將moveChunk命令發送到源分片。
  2. 源分片使用內部moveChunk 命令啟動移動。在遷移過程中,塊的操作路由到源分片。源分片負責塊的寫入操作。
  3. 目標分片生成目標分片所不存在的源分片所需的所有索引。
  4. 目標分片開始在塊中請求文檔,並開始接收數據的副本。
  5. 在塊中收到最終文檔後,目標分片將啟動同步過程,以確保它具有對遷移過程中發生的已遷移文檔的更改。
  6. 當完全同步時,源分片連接到 配置資料庫,並使用塊的新位置更新集群元數據。
  7. 源分片完成元數據的更新後,一旦塊上沒有打開游標,源分片將刪除其文檔副本。

註意: 如果平衡器需要從源分片執行其他的塊遷移,則平衡器可以啟動下一個塊遷移,而不必等待當前的遷移過程來完成此刪除步驟。

註意:不能移動的塊:如果塊中的文檔數超過了250000個文檔,或者配置的塊大小除以平均文檔大小的1.3倍,則MongoDB不能移動塊  db.collection.stats() avgObjSize欄位,表示集合中平均文檔的大小。

在大多數情況下,應該讓平衡器在分片之間 自動遷移塊。但是,mongoDB也允許手動遷移塊:

遷移單個塊

下麵的示例假定在一個myapp 資料庫有users集合,分片鍵是欄位username

為smith的塊 。在mongoshell中使用以下命令遷移該塊 。

db.adminCommand( { moveChunk : "myapp.users",

                   find : {username : "smith"},

                   to : "mongodb-shard3.example.net" } )

此命令將包含分片鍵值“smith”的塊遷移到分片名為mongodb-shard3.example.net。

4、        平衡器的定時啟用和關閉

利用計劃平衡視窗,可以達到讓平衡器定時啟用和關閉。

4.1. 啟用一個計劃平衡視窗

以下過程指定了activeWindow,使得平衡器能夠在特定的時間範圍遷移塊:

1)     使用mongo shell連接到群集中的任何一個mongos

2)     切換到配置資料庫

use config

3)     確保平衡器的狀態不是stopped

sh.setBalancerState( true )

如果在activeWindow時間範圍之外,平衡器將無法啟動。

4)     修改平衡器的視窗。

使用update()設置activeWindow,如下所示:

db.settings.update(
   { _id: "balancer" },
   { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
   { upsert: true }
)

使用兩位數小時和分鐘值(即HH:MM)指定平衡視窗的開始和結束邊界時間來替換<start-time>和<end-time>。

    • 對於HH值,使用小時值範圍00- 23。
    • 對於MM值,使用分鐘值範圍00- 59。

註意:平衡器視窗必須足以完成上次禁用平衡器時插入的所有數據的遷移。

以上過程設置之後,平衡器則會在平衡視窗規定的時間start—stop之間運行,在這段時間之外平衡器是被禁用的。

4.2. 移除一個平衡計劃視窗

那麼當這個平衡視窗不用時,怎麼移除它呢?

如果設置了平衡視窗並希望刪除計劃,以使平衡器始終運行,請使用$unset以清除activeWindow,如下所示:

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

5、        怎麼減少平衡器對分片集群的性能影響

5.1. 系統自帶機制減少平衡器對分片集群性能的影響

塊的遷移在帶寬和工作負載方面帶來一些開銷,這兩者都可能影響資料庫性能。平衡器 試圖最小化的該影響:

    • 在任何給定的時間將分片限制在最多一個遷移; 即分片不能同時參與多個塊遷移。要從分片中遷移多個塊,平衡器一次移動一個塊。

版本3.4更改:從MongoDB 3.4開始,MongoDB可以執行並行塊遷移。觀察分片一次可以參與多達一個遷移的限制,對於具有n個分 片的分片集群,MongoDB可以同時執行最多n / 2(四捨五入)進行的塊遷移。

    • 只有當分片數量最多的分片和分片數量最少的分片之間的塊數差異達到遷移閾值時才開始平衡。

5.2. 我們可以採取的措施

臨時禁用平衡器進行維護(可以看第6點)。

可以設置計劃平衡視窗(可以看第4點),以限制平衡器運行的視窗,以防止其影響生產流量。平衡視窗的規範是相對於配置伺服器副本集的主節點本地時區。

6、        關於平衡器的一些命令

檢查平衡器是否啟用(即平衡器被允許運行)  sh.getBalancerState()

檢查平衡器是否在運行           sh.isBalancerRunning()

禁用平衡器                sh.stopBalancer()

啟用平衡器                sh.startBalancer()或sh.setBalancerState(true)

在一個集合禁用平衡器           sh.disableBalancing("databaseName.collectionName")

  sh.disableBalancing()方法接收集合的完整命名空間作為其參數。

在一個集合啟用平衡器              sh.enableBalancing("students.grades")

  sh.enableBalancing()方法接收集合的完整命名空間作為其參數。

 

--------------------------------------- over ------------------------------------------------------

以上資料,大部分是參考官網的資料,在此表示感謝。

https://docs.mongodb.com/manual/core/sharding-balancer-administration/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是動作呢?顧名思義它是管理運行環境中所有動作的中樞,通俗點講就是動畫。它也是總個框架核心組件之一,它提供動作的創建、刪除、插入,以及提供對關鍵幀與過渡的諸多操作 ...
  • Bootstrap FileInput中文API整理 這段時間做項目用到bootstrap fileinput插件上傳文件,在用的過程中,網上能查到的api都不是很全,所以想著整理一份比較詳細的文檔,方便自己今後使用,也希望能給大家帶來幫助,如有錯誤,希望大家積極指正。 一、 引入文件 <link ...
  • 效果實現圖 ...
  • [20171124]bbed的使用問題2.txt--//bbed 是探究oracle數據塊的好工具,有時候不用轉儲,直接可以它看oracle內部塊的內部結構.--//在使用中要註意一些問題,昨天又犯類似錯誤,通過例子來說明:SCOTT@book> select rowid,dept.* from d ...
  • 1.索引無法存儲null值 a.單列索引無法儲null值,複合索引無法儲全為null的值。 b.查詢時,採用is null條件時,不能利用到索引,只能全表掃描。 為什麼索引列無法存儲Null值? a.索引是有序的。NULL值進入索引時,無法確定其應該放在哪裡。(將索引列值進行建樹,其中必然涉及到諸多 ...
  • 下載安裝包或者壓縮包 添加db存儲和日誌存儲文件夾 添加服務、配置環境變數、啟動Mongo 本例:安裝路徑:D:Program Files/MongoDB 配置文件的路徑:D:MongoDB 一、安裝,可選自定義安裝路徑 二、建立配置文件 logs文件夾內建立mongodb.log;etc文件夾內建 ...
  • 本文出處:http://www.cnblogs.com/wy123/p/7884986.html 周圍又有人在討論UNION和UNION ALL,對於UNION和UNION ALL,網上說的最多的就是性能問題(實在不想說出來這句話:UNION ALL比UNION快)其實根本不想炒UNION和UNIO ...
  • 一、mysqldump 1.備份test庫 2.備份 -B參數 3.備份 --compact 去除那些多餘的字元 4.mysql恢復 5.mysqldump的壓縮 gzip 6.mysqldump的壓縮恢復 gunzip 7.mysqldump只備份表結構 -d 8.mysqldump只備份表數據( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...