久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MongoDB分片在部署與維護管理中常見的事項有哪些

151次閱讀
沒有評論

共計 3306 個字符,預計需要花費 9 分鐘才能閱讀完成。

這篇文章主要為大家展示了“MongoDB 分片在部署與維護管理中常見的事項有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“MongoDB 分片在部署與維護管理中常見的事項有哪些”這篇文章吧。

分片(sharding)是 MongoDB 將大型集合分割到不同服務器(或者說集群)上所采用的方法,主要為應對高吞吐量與大數據量的應用場景提供了方法。

將數據分散到不同的機器上,不需要功能強大的服務器就可以存儲更多的數據和處理更大的負載。基本思想就是將集合切成小塊,這些塊分散到若干片里,每個片只負責總數據的一部分,最后通過一個均衡器來對各個分片進行均衡(數據遷移)。通過一個名為 mongos 的路由進程進行操作,mongos 知道數據和片的對應關系(通過配置服務器)。大部分使用場景都是解決磁盤空間的問題,對于寫入有可能會變差(+++ 里面的說明 +++),查詢則盡量避免跨分片查詢。

使用分片的時機:

1,機器的磁盤不夠用了。使用分片解決磁盤空間的問題。

2,單個 mongod 已經不能滿足寫數據的性能要求。通過分片讓寫壓力分散到各個分片上面,使用分片服務器自身的資源。

3,想把大量數據放到內存里提高性能。和上面一樣,通過分片使用分片服務器自身的資源。

和既有的分庫分表、分區方案相比,MongoDB 的最大區別在于它幾乎能自動完成所有事情,只要告訴 MongoDB 要分配數據,它就能自動維護數據在不同服務器之間的均衡。

一. 分片的集群組件

1.Mongos【路由】

作為請求的訪問入口,所有的請求都由 mongos 來路由、分發、合并,這些動作對客戶端 driver 透明,用戶連接 mongos 就像連接 mongod 一樣使用。Mongos 會根據請求類型及 shard key 將請求路由到對應的 Shard。

2.Config Server【配置服務器】

存儲 Sharding Cluster 的所有元數據,所有的元數據都存儲在 config 數據庫;

* 保存每個分片上的 chunk 的信息 * 保存 chunk 上的片鍵范圍。

3. Shard【分片】

存儲應用數據記錄。

二. 分片優勢

1. 對集群進行抽象,讓集群“不可見”,分片對應用系統是透明的。

Mongos 是專有路由進程,其會將客戶端發來的請求準確無誤的路由到集群中的一個或者一組服務器上,同時會把接收到的響應拼裝起來發回到客戶端。

2. 保證集群總是可讀寫

將 MongoDB 的分片和復制集功能結合使用,在確保數據分片到多臺服務器的同時,也確保了每分數據都有相應的備份,可以確保有服務器壞掉時,其他的從庫可以立即接替壞掉的部分繼續工作。提高了集群的可用性和可靠性。

3. 使集群易于擴展

當系統需要更多的空間和資源的時候,MongoDB 使我們可以按需方便的擴充系統容量。

三. 分片部署注意事項(常見錯誤)

1. 配置可復制集作為分片節點與配置單獨使用的可復制集基本一樣。但啟動參數中需指定—shardsvr 參數。

否則,在啟動數據庫分片時報錯:{code : 193, ok : 0, errmsg : Cannot accept sharding commands if not started with –shardsvr“}。

2. 創建配置服務器集群時,不能設置見證節點。

否則,報錯 errmsg :  Arbiters are not allowed in replica set configurations being used for config servers。

3. 配置 Mongos 實例時,請不要配置 dbpath 參數。

否則,設置 dbpath 參數,服務無法正常啟動,報錯:Error parsing INI config file: unrecognised option dbpath。

4. 配置 Mongos 實例時,需設置 Keyfile。

否則,不設置 Keyfile,Service 無法正常啟動,報錯:2018-05-10T15:30:26.791+0800 W SHARDING [mongosMain] Error initializing sharding state, sleeping for 2 seconds and trying again :: caused by :: Unauthorized: Error loading clusterID :: caused by :: not authorized on config to execute command {find:“version”, readConcern: { level:“majority”, afterOpTime: { ts: Timestamp 1525937413000|2, t: 1} }, maxTimeMS: 30000

5. 分片集合設置。

分片不會默認生成,需要先在數據庫中啟動分片(sh.enableSharding(“DBName”)),然后再設置集合分片(sh.shardCollection(“Collection”{片鍵}))

四. 分片管理的注意事項(常用命令)

1. 檢查 shards 配置及狀態

db.runCommand({listshards:1})

2. 檢查數據庫主片的地址以及是否分區

db.getSiblingDB(config).databases.find()

3. 檢查數據塊的數量

db.chunks.count() – 需切換到配置數據庫(config)

4. 查看分片的詳細信息,包括數據庫信息和范圍信息

sh.status()

5. 索引是優化查詢性能的重要手段。當在分片集合上聲明索引時,每個分片都會為自己的集合部分定義單獨的索引。分片集合只允許在_id 字段和分片鍵上建立唯一索引。

6. 分割和遷移 MongoDB 底層依賴 2 個機制來保持集群的平衡:分割和遷移。

分割是把一個大的數據塊分割為 2 個更小的數據塊的過程。遷移就是在分片之間移動數據塊的過程。當某些分片服務器包含的數據塊數據量大大超過其他分片服務器時就會觸發遷移的過程,這個觸發器叫做遷移回合(migration round)

6.1 遷移觸發條件

6.2 查看 Balancer 進程是否開啟 sh.getBalancerState()

6.3 停 Balancer 進程 sh.stopBalancer()和開啟 Balancer 進程

6.4. 默認情況下 Balancer 進程一直在運行,為了降低 Balancer 進程對系統的運行,可以為 Balancer 進程設置運行時間窗口,讓 Balancer 進程在指定的時間窗口操作。

6.4.1 例如設置 Balancer 進程在 23:00 到 6:00 時間窗口內執行。

db.settings.update({ _id :  balancer  }, { $set : { activeWindow : { start :  23:00 , stop :  6:00  } } }, true ) ;

6.4.2 刪除 Balancer 進程運行時間窗口

6.5. 查看塊的范圍

6.5.1 如果集合數據量較小,可以直接通過 sh.status() 查看

6.5.2 如果集合數據量較大,sh.status()無法反應此集合的分塊信息。此時,可通過執行以下命令查看 printShardingStatus(db.getSisterDB( config),1);

6.5.3 也可將命令切換到 config 數據庫下,執行 db.chunks.find()查看。可以輸入制定參數,例如,查看分片 repsms2,集合 cloud-docs.PushMessageRecord 的塊情況(cloud-docs 為數據庫名稱)

db.chunks.find({shard  :  repsms2 , ns  :  cloud-docs.PushMessageRecord}).pretty()

五. 備注

分片集群管理的數據量比較大,并且分片的架構相對比較復雜。所以,一定在業務需求需要上分片時,再上分片,且不可準求“炫”的技術而上分片。另外,上線后,相關的監控一定要部署,逐漸完善。

以上是“MongoDB 分片在部署與維護管理中常見的事項有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計3306字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 丁青县| 嘉兴市| 梁河县| 察隅县| 桂平市| 南通市| 牡丹江市| 吉林省| 平陆县| 孝义市| 大石桥市| 山西省| 曲周县| 同江市| 沙雅县| 荥阳市| 延长县| 双流县| 隆安县| 贡山| 沂南县| 巫山县| 基隆市| 钟山县| 河西区| 万载县| 呈贡县| 门头沟区| 县级市| 濮阳县| 定日县| 克什克腾旗| 穆棱市| 合水县| 东乌珠穆沁旗| 唐河县| 丹阳市| 垣曲县| 温宿县| 建始县| 日照市|