2015年6月29日 星期一

【MongoDB】Replication Introduction

Replication Introduction
Replication是一種跨伺服器同步資料的處理技術.
Purpose of Replication
Replication提供在不同database Server之間,多重複製資料時,提供資料的高用性,並保護單一server資料遺失。也允許單一server失敗時,還原資料。在某些條件下,也可以增加讀取資料的容量。client有讀取及寫入不同Server的能力。
Replication in MongoDB
replica set  mongod instance的集合與hostData set相同。 primary  mongod 負責所有"寫入"的作業,其它所有的secondary,向primary申請相同的data set
primary允許所有來自client"寫入"操作。一個replica set 只可以有一個primaryprimary record異動dats set紀錄會存放在oplog




secondaries 複製primaryoplog及申請操作secondarydata set,這樣primarydata會反應給 sesecondarydata set.如果primary的失效,replica set會從secondayr中找一個當作primary




可以新增一個mongod instance arbiterarbiter不處理資料.因為 MongoDB 的機制,是讓眾伺服器投票決定誰當 Primary,一個 RelpSet 中只有兩台機器時,常會發生問題,造成整個群組中無 Primary 機器的狀態。所以,這時要加入仲裁者(Arbiter)機器來協助排除。



非同步複製(Asynchronous Replication)
Secondary可以primary申請非同步複製.即使過程中有多個成員失敗,還是可以持續執行.
自動故障移轉(Automatic Failover
primary無法與其他成員溝通超過10移以上,replica set會嘗試選擇其它的成員為新的primary.第一順位的secondary會收到多數的投票結果,成為primary.





2015年6月17日 星期三

【MongoDB】Sharding Introduction

Sharding Introduction

Sharding是用於跨多個機器儲存時的一種技術。MongoDB使用Sharding支援部署大量資料集,及高存取流量操作。

Purpose of Sharding

應用程式在處理大資料集跟高存取量時,對單一Service上的資料庫系統,是一個很高的挑戰。
高查詢率會消耗CPU資源,大資料集所需容量,超過單一機器所能負荷。執行時的記憶體使用量,超過單一機器所能提供,進而挑戰機器的disk I/O。為了解決上述問題,資料庫系統有2個基本方法,重直擴展【 vertical scaling和【sharding.
重直擴展Vertical scaling):增加CPU及增加Storage的容量,但這些都是有極限的。高效率的系統有大量的cup及 高記憶體,比小系統的成本還高。另外雲端系統供應商也許只提供使用者,小的instance,依照這個結論,重直擴展是有它最大的極限。
碎片化(Sharding):也可稱為水平擴展,分割的資料集及分散的資料,被存在數個不同的Service上或shard上,每一個碎片(shard)都是一個獨立的資料庫跟集合體,數個shards可以組成一個邏輯資料庫(logical database



  • 碎片化(Sharding)可以減少對每一個shard的操作,以新增為例新增資料應用程式只需要,存取某個記錄的shard

  • 碎片化(Sharding)可以減少每Server所需的stroage。以1TB的資料為例,可以存在4shardshard只需用256GB,如果有40shard只需要25GB.

Sharding in MongoDB

MongoDBsharding是透過shared Clusterconfiguration來實作。


  Sharded Cluster有幾元件組成:shardsquery routers config Servers.
碎片組(Shards):用來儲存資料。提供高可用度及一致性的資料。在正式環境中,Sharded Cluster裡的每一個shard(碎片),都是一個複製資料集
Query Routers:也可稱為 mongos instances,透過client Application及直接操作去佔用一個或多個碎片(Shard)。查詢程序或操作特定shards(碎片組)進而回傳結果會client。一個shared Cluster會包含多個Query Router去分開執行一個Client所發出的Request1client可以發出多個request給1個query Router。多數的shared clusters會有多有個query router.
Config servers:存放clustermetadata。包括cluster中的資料集與shards的對照,Query Router用這些matadata去操作做特定的shards。正式的shared cluster會有3個config Server

Data Partitioning

MongoDB是以collection層級,做分散資料或碎化(shards)。利用shard key達到碎化(shard)一個collection中的資料。

Shard Keys

碎化(shard)一個collection,需要去找出shard keyShard key會是index欄位或是一個複合式index而這個複合index存在每一個documentMongoDb劃分shard key值並將值寫入數個chunk而且分在數個不同的Shards。劃分shard key值,MongoDb使用range based partitioning or hash based partitioning其中一種方式。

Range Based Sharding


Hash Based Sharding


Splitting

Splitting是一支background Service,當一個chunk成長到specified chunk size的設定值時,會自動一分為二。

Balancing

balancer這支background service會去管理chkunk的搬移。當碎化(Shard)collectioncluster分配不平均時,blanacer會從最多chunkshard搬移chunk至最少的shard,直到整個collect平均為止。

Adding and Removing Shards from the Cluster

新增1shardcluster,因為shard沒有chunk,導致shard分配不平均。MongoDB會開始馬上搬資料到新的shard,這個動作會花一些時間,直到cluster達到平均的狀態。
刪除1個shard會先將其中的所有chunk搬到其它的shard,直到全部搬完及更新metadata後,才可以移除shard