時(shí)間:2024-03-08 08:50作者:下載吧人氣:18
前言
在MongoDB(版本 3.2.9)中,分片集群(sharded cluster)是一種水平擴(kuò)展數(shù)據(jù)庫系統(tǒng)性能的方法,能夠?qū)?shù)據(jù)集分布式存儲在不同的分片(shard)上,每個分片只保存數(shù)據(jù)集的一部分,MongoDB保證各個分片之間不會有重復(fù)的數(shù)據(jù),所有分片保存的數(shù)據(jù)之和就是完整的數(shù)據(jù)集。分片集群將數(shù)據(jù)集分布式存儲,能夠?qū)⒇?fù)載分?jǐn)偟蕉鄠€分片上,每個分片只負(fù)責(zé)讀寫一部分?jǐn)?shù)據(jù),充分利用了各個shard的系統(tǒng)資源,提高數(shù)據(jù)庫系統(tǒng)的吞吐量。
數(shù)據(jù)集被拆分成數(shù)據(jù)塊(chunk),每個數(shù)據(jù)塊包含多個doc,數(shù)據(jù)塊分布式存儲在分片集群中。MongoDB負(fù)責(zé)追蹤數(shù)據(jù)塊在shard上的分布信息,每個分片存儲哪些數(shù)據(jù)塊,叫做分片的元數(shù)據(jù),保存在config server上的數(shù)據(jù)庫 config中,一般使用3臺config server,所有config server中的config數(shù)據(jù)庫必須完全相同。通過mongos能夠直接訪問數(shù)據(jù)庫config,查看分片的元數(shù)據(jù);mongo shell 提供 sh 輔助函數(shù),能夠安全地查看分片集群的元數(shù)據(jù)信息。
對任何一個shard進(jìn)行查詢,只會獲取collection在當(dāng)前分片上的數(shù)據(jù)子集,不是整個數(shù)據(jù)集。Application 只需要連接到mongos,對其進(jìn)行的讀寫操作,mongos自動將讀寫請求路由到相應(yīng)的shard。MongoDB通過mongos將分片的底層實(shí)現(xiàn)對Application透明,在Application看來,訪問的是整個數(shù)據(jù)集。
一,主分片
在分片集群中,不是每個集合都會分布式存儲,只有使用sh.shardCollection()顯式將collection分片后,該集合才會分布式存儲在不同的shard中。對于非分片集合(un-sharded collection),其數(shù)據(jù)只會存儲在主分片(Primary shard)中,默認(rèn)情況下,主分片是指數(shù)據(jù)庫最初創(chuàng)建的shard,用于存儲該數(shù)據(jù)庫中非分片集合的數(shù)據(jù)。每個數(shù)據(jù)庫都有一個主分片。
Each database in a sharded cluster has a primary shard that holds all the un-sharded collections for that database. Each database has its own primary shard.
例如,一個分片集群有三個分片:shard1,shard2,shard3,在分片shard1創(chuàng)建一個數(shù)據(jù)庫blog。如果將數(shù)據(jù)庫bolg分片,那么MongoDB會自動在shard2,shard3上創(chuàng)建一個結(jié)構(gòu)相同的數(shù)據(jù)庫blog,數(shù)據(jù)庫blog的Primary Shard是Shard1。
圖示,Collection2的主分片是ShardA。
使用 movePrimary
命令變更數(shù)據(jù)庫默認(rèn)的Primary shard,非分片集合將會從當(dāng)前shard移動到新的主分片。
db.runCommand( { movePrimary : “test”, to : “shard0001” } )
網(wǎng)友評論