(2)副本節(jié)點(diǎn)(Secondary)
與主節(jié)點(diǎn)保持同樣的數(shù)據(jù)集。當(dāng)主節(jié)點(diǎn)掛掉的時(shí)候,參與選主。
(3)仲裁者(Arbiter)
不保有數(shù)據(jù),不參與選主,只進(jìn)行選主投票。使用Arbiter可以減輕數(shù)據(jù)存儲(chǔ)的硬件需求,Arbiter跑起來幾乎沒什么大的硬件資源需求,但重要的一點(diǎn)是,在生產(chǎn)環(huán)境下它和其他數(shù)據(jù)節(jié)點(diǎn)不要部署在同一臺(tái)機(jī)器上。
注意,一個(gè)自動(dòng)failover的Replica Set節(jié)點(diǎn)數(shù)必須為奇數(shù),目的是選主投票的時(shí)候要有一個(gè)大多數(shù)才能進(jìn)行選主決策。
(4)選主過程
其中Secondary宕機(jī),不受影響,若Primary宕機(jī),會(huì)進(jìn)行重新選主:

2.使用Arbiter搭建Replica Set
偶數(shù)個(gè)數(shù)據(jù)節(jié)點(diǎn),加一個(gè)Arbiter構(gòu)成的Replica Set方式:

>>Sharding分片技術(shù)
當(dāng)數(shù)據(jù)量比較大的時(shí)候,我們需要把數(shù)據(jù)分片運(yùn)行在不同的機(jī)器中,以降低CPU、內(nèi)存和IO的壓力,Sharding就是數(shù)據(jù)庫分片技術(shù)。
MongoDB分片技術(shù)類似MySQL的水平切分和垂直切分,數(shù)據(jù)庫主要由兩種方式做Sharding:垂直擴(kuò)展和橫向切分。
垂直擴(kuò)展的方式就是進(jìn)行集群擴(kuò)展,添加更多的CPU,內(nèi)存,磁盤空間等。
橫向切分則是通過數(shù)據(jù)分片的方式,通過集群統(tǒng)一提供服務(wù):

(1)MongoDB的Sharding架構(gòu)

(2)MongoDB分片架構(gòu)中的角色
A.數(shù)據(jù)分片(Shards)
用來保存數(shù)據(jù),保證數(shù)據(jù)的高可用性和一致性??梢允且粋€(gè)單獨(dú)的mongod實(shí)例,也可以是一個(gè)副本集。
在生產(chǎn)環(huán)境下Shard一般是一個(gè)Replica Set,以防止該數(shù)據(jù)片的單點(diǎn)故障。所有Shard中有一個(gè)PrimaryShard,里面包含未進(jìn)行劃分的數(shù)據(jù)集合:

B.查詢路由(Query Routers)
路由就是mongos的實(shí)例,客戶端直接連接mongos,由mongos把讀寫請(qǐng)求路由到指定的Shard上去。
一個(gè)Sharding集群,可以有一個(gè)mongos,也可以有多mongos以減輕客戶端請(qǐng)求的壓力。
C.配置服務(wù)器(Config servers)
保存集群的元數(shù)據(jù)(metadata),包含各個(gè)Shard的路由規(guī)則。