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