標籤:mongodb chunks shard 分區
分區的一些概念與細節
Primary Shard
在Replica set中有Primary和Secondary的概念,那麼在Sharding中其實也有一個Primary的概念。
任何一個mongoDB中都有一個未分區的整體DB的collection在某一個Shard中。如。
Collection1在ShardA中有一部分Chunks在ShardB中也有一部分Shards,而在ShardA 中卻有一個Collection2儲存整體的ShardA+ShardB的Collection1的和。
Config Servers的讀寫操作
何時去讀
一個mongos(從app發出的mongo Shard 的routing的service)啟動或者重啟的時候。
當一個Chunck移動完了,用最新的metadata更新完config servers的時候。
何時去寫
當要去切分Chunks的時候。(切分完畢後肯定是要寫入最新的metadata)
當在Shards之間移動Chunks的時候。(移動以後所有的位置變化了,肯定也要寫入最新的metadata)
Config Servers的一些有效性
之前說過Config Servers需要3個。主要是為了高可用性和高冗餘性來進行的設計。那麼當這3個servers的狀態有變化的時候,整體Shards的處理也會隨之發生變化。
當1-2個Config Server掛掉的時候,Config Servers的metadata就變成了read-only的狀態,和Replica的Primary掛掉的時候效果類似,Replica的整個叢集如果沒有了Primary整個叢集就變成了ReadOnly的狀態,而這裡的的ReadOnly指的是metadata的狀態。你可以繼續讀寫Shards的資料,但是因為metadata不能改變了,那麼依照上面的何時去寫中寫的那樣,Chunks的切分以及移動就不會發生了。
悲催的情況,當你的3個Config Servers都掛掉的話,其實也不必太擔心。只要你一直不重啟mongos你還是可以繼續使用這個Shards的,但是如果你在3個Config Servers掛掉後,在這三個Config Servers恢複之前重啟了mongos那麼你的Shards叢集也就無法使用了。從現象上其實可以看出,這些資料應該是持久化在記憶體中的,一旦重啟記憶體資料消失那麼也就失效了。
所以沒有metadata的叢集是無法啟動並執行。所以metadata的備份以及使用就很重要。相對於Shards中的大量的實際data來說,metadata還是很輕便和便於使用的,也就是說metadata相對來說是低載入成本,而且metadata對於叢集來說也不是必要(比如上面說的掛了1-3個的時候叢集在特定條件下也是可以使用的),所以,Config Server的備份還是相對簡單的。
つづく???
mongoDB的讀書筆記(05)_【Sharding】(02)_分區的一些概念和小細節