標籤:
分區叢集
1.1、概念
分區叢集是將資料存放區在多台機器上的操作,主要由查詢路由mongos、分區、設定管理員組成。
●查詢路由根據設定管理員上的中繼資料將請求分發到相應的分區上,本身不儲存叢集的中繼資料,只是緩衝在記憶體中。
●分區用來儲存資料區塊。資料集根據分區鍵將集合分割為資料區塊,儲存在不同的分區上。在生產環境下,通常一個分區由一個複製集組成。
●設定管理員儲存叢集的中繼資料,包括資料與分區的映射關係,設定管理員一旦掛掉,叢集將無法工作。
注意:
●當mongos重啟時,會從設定管理員讀取中繼資料更新自己緩衝的中繼資料
●當分割資料時或者在分區間移動資料時會寫設定管理員。
●在分區叢集中,設定管理員可以採用複製集的架構,但複製集中不允許有仲裁節點和延時節點,且buildindexes必須設為true。
●集合的資料分布在多個分區上,如果某個分區失效,查詢會返回錯誤,可以通過為查詢指定partial選項,允許接受不完整的資料
作用
單台機器無法滿足儲存需求,記憶體、磁碟空間不夠,讀寫輸送量不夠。
1.2、如何維護資料均衡分布
叢集使用分割器和平衡器兩個後台進程維護資料均勻分布。
分割器
●分割器的作用是防止資料區塊變大,資料區塊大小預設是64MB,當超過64MB時,分割器會將其一分為二。
●分割的對象不是實際的資料,而是中繼資料,只是在邏輯上進行邏輯塊的劃分,不會影響到實際資料的分布
●資料區塊太小會產生大量塊,容易使叢集不平衡,導致資料區塊頻繁移動,降低叢集效能,中繼資料增加,降低查詢效率
●資料區塊太大,會減小移動頻率,中繼資料少,有利於資料查詢,但一旦移動,會花費很長時間
●並不是所有的集合都會分區,沒有被分區的集合都儲存在同一個主分區上
●只有對資料庫和集合開啟分區後,資料才會在不同分區上分布,否則只儲存在主分區上
●插入和更新操作都有可能引發分割
平衡器
●平衡器的作用是管理資料區塊的移動。
●當叢集中資料區塊的分布達到移動閾值時,平衡器會移動資料區塊。
●增加或減少分區或增刪資料也會使平衡器移動資料區塊
1.3資料區塊如何儲存在相應分區上
每個需要被分區的集合都需要指定索引欄位作為分區鍵,mongodb使用區間分區或雜湊分割演算法根據分區鍵將資料分割為資料區塊。
●區間分區
資料區塊覆蓋一段子區間,任何分區鍵都會被某一段覆蓋
優缺點
區間分區支援更好的range查詢,通過分區鍵查詢,查詢路由可以很容易的判斷出哪些資料區塊含有查詢需要資料,並將請求分配到的分區上。
區間分區使資料分布不均勻
●雜湊分割
根據分區鍵的雜湊值進行資料的分配。
優缺點
資料隨機分配到不同的資料區塊
在進行range查詢時,由於相鄰資料分布在不同分區上,導致訪問很多分區
注意
●分區鍵不能是多鍵索引,即索引欄位的值不能是數組
●分區鍵一旦被指定,不能被修改為其他欄位,同時分區鍵的欄位值也不能被修改
●如果叢集的寫操作比較多,可以使用雜湊分割,將資料均勻分配到節點上,將寫操作均勻應用與叢集,
如果叢集讀操作比較多,可以使用區間分區,將相鄰資料分到同一節點上,便於查詢
●如果查詢時沒有指定索引欄位,查詢路由會將請求分發到所有節點上,等待返回結果,查詢效率低
如果查詢時指定了索引欄位,查詢路由會將請求分發到少數節點上,查詢效率高
1.4、資料移轉過程
●平衡器向源節點發送movechunk指令
●源節點移動指定資料區塊,在遷移期間,資料區塊的讀寫操作仍路由到源節點
●目的節點如果沒有需要的索引,此時會構建索引
●目的節點開始請求資料區塊中的資料,儲存在本地
●在遷移期間,源節點上的資料如果發生變化,在遷移完之後,目的節點會同步源節點上變更的資料
●同步結束後,目的節點會與設定管理員建立串連,設定管理員更新中繼資料,此期間源節點阻塞寫操作
●源節點上的舊資料被刪除
1.5、備份資料
mongodump -h dbhost -d dbname -o directory 命令格式
mongodump -h 127.0.0.1:28002 -d test -o /home/backup
將本機資料庫test中資料備份到/home/backup下
恢複資料
mongorestore -h dbhost -d dbname –directoryperdb dbdirectory dbdirectory為備份資料所在位置
複製集
2.1、概念與特性
概念
複製集是一組具有相同資料的mongod執行個體,包含主節點以及從節點。叢集中任何時候只有一個主節點,主節點將資料變更操作寫到oplog(封頂表)中,從節點讀取oplog,並將oplog中的操作應用的本機資料,從而實現資料同步。
特性
●非同步複製
從節點並不是即時複製主節點中的資料
●自動容災
主節點宕機,主動發起選舉
●讀操作
從從節點上讀到的資料可能並不是最新的
2.2、複製整合員
複製集最多包含50個節點,最多隻能有7個可以投票。包含以下節點類型
●主節點primary
可以執行讀寫操作,所有節點均可以執行讀操作。預設情況下,讀請求只會發送給主節點,可以通過read preference設定。主節點的優先順序priority至少為1。
●從節點secondary
只可以執行讀操作。從節點通過與主節點同步,實現備份資料的功能,複製集至少有一個從節點。通過配置複製集的設定檔可以設定從節點是否參與選舉(vote=0)以及是否可以被選舉為主節點(priority=0)優先順序priority為0的節點不能發起選舉,不能被選舉為主節點,但可以投票。
●隱藏節點
通過設定從節點的hidden屬性,可以對用戶端隱藏節點,不接受讀寫請求,無法被選舉為主節點(priority=0),只能投票,主要用於備份資料。
●延時節點
通過設定隱藏節點的slaveDelay屬性可以使節點延時一定時間從主節點複製資料,可以起到保護資料的作用。延時節點是在隱藏節點的基礎上,多了一個延時屬性。
●仲裁節點Arbiter
本身不儲存資料,不能被選舉為主節點,只能投票,仲裁節點主要用於使複製集中節點個數為奇數,從而容易達到多數派。仲裁節點只消耗極少的資源,但不要與主節點、從節點部署在同一個物理節點上。
●非投票節點
不參與投票,但儲存資料,可以接受讀操作
2.3、複製集管理
●use admin切換到admin資料庫
●config={_id:”myset”,members:[{“_id”:0,”host”:”127.0.0.1:28001”,”priority”:2},{“_id”:1,”host”:”127.0.0.1:28002”,”priority”:1}]}
●rs.initiate(config)
修改複製集配置
●cfg=rs.conf()
●cfg.members[0].priority=1
●rs.reconfig(cfg)
複製集維護
將設定檔中的replset注釋掉,從而以單機模式啟動複製集,維護完畢後再加入複製集。
2.4、大多數原則
概念
如果複製集中的節點個數為N,則大多數為N/2+1(N/2向下取整),當複製集中存活節點數小於大多數時,不存在主節點,無法提供寫服務。
作用
大多數原則保證了,在任何時刻複製集中的主節點個數不會超過一個。比如複製集部署在兩個機房,兩個機房通訊發生故障,不含有主節點的機房會選舉出一個主節點,等到故障恢複,複製集就會存在兩個主節點,無法保證資料的一致性。
2.5、選舉
選舉的前提條件
複製集滿足大多數原則。在選舉的過程中,複製集無法進行寫操作。
何時會引發選舉
●複製集初始化時或被重新設定後
●主節點宕機或主節點網路不可達,即大多數節點無法串連主節點
●人為將主節點降為從節點,執行rs.stepDown(n)命令
●有更高優先順序的節點加入複製集
選舉特點
●優先順序高的節點優先被選為主節點
●具有最高optime的節點被選為主節點
●如果優先順序高的節點不具有最新的optime,那麼首先會同步主節點的oplog
●優先順序為0的節點無法發起選舉,且無法成為主節點,只能投票。
●所有成員都可以否決選舉,包括不投票的節點Non-voting
何時否決選舉
●發起選舉的節點不包含最新資料
●發起選舉的節點優先順序比其他節點低
●發起選舉的節點沒有持有最高的optime
2.6、資料復原
概念:在主節點失效之前,從節點並未全部複製主節點上的資料,原先的主節點在選舉出新的主節點後重新加入複製集,會導致舊主節點與新主節點資料不一致,舊主節點會將不一致的資料復原,從而與主節點資料保持一致。
避免資料復原
預設情況下,在主節點上寫入成功後,就會向用戶端返回結果,可能造成復原,用戶端可以修改寫策略writeconcern為向大多數節點寫入成功後才返回結果。
2.7、讀寫策略
writeconcern:不等待主節點寫入成功,用戶端就返回結果;等待主節點寫入成功,就返回結果;等到大多數節點寫入成功,才返回結果
readconcern:唯讀主節點、唯讀從節點、優先主節點、優先從節點、讀網路延遲最小的節點
2.8、複製集優缺點
優點
●自動容災。主節點宕機,通過投票選舉主節點,保證資料安全
●自動備份資料,無需人工幹預
●易於擴充
●資料可靠性高
缺點
●消耗資源高
●不能解決負載平衡的問題
●用戶端讀到的資料可能並未持久化 ,比如:用戶端可以讀到最新寫入的資料,但資料有可能存在磁碟寫入失敗的可能;用戶端讀到的資料可能發生rolled back
參考
Mongodb中Sharding叢集
MongoDB之分區叢集與複製集