學(xué)習(xí)文檔:Oreilly.Scaling.MongoDB.Jan.2011.pdf 學(xué)習(xí)內(nèi)容: 第一章: 1.1 Sharding是什么 Sharding是MongoDB中使用的一種將大的collection分配到幾個(gè)服務(wù)器(cluster)中的方法。 MongoDB與以往數(shù)據(jù)庫(kù)分表方法的最主要的區(qū)別就是MongoDB的每一項(xiàng)任務(wù)都是自動(dòng)運(yùn)行的。 Mongo完成分片的步驟很簡(jiǎn)單:數(shù)據(jù)庫(kù)管理員告知mongoDB增加新的服務(wù)器mongod,MongoDB會(huì)自動(dòng)完成在幾個(gè)服務(wù)器之間均衡負(fù)載。 1.2 Sharding的目的 封裝集群(make the cluster invisible) 確保隨時(shí)讀寫(xiě)集群(make the cluster always available for reads and writes) 集群易擴(kuò)展(let the cluster grow easily) 第二章: 2.1 分割數(shù)據(jù) 一個(gè)分片指的是集群當(dāng)中的一個(gè)或者多個(gè)服務(wù)器,負(fù)責(zé)存儲(chǔ)數(shù)據(jù)集合當(dāng)中的某些子集。 如果一個(gè)分片當(dāng)中包含了多個(gè)服務(wù)器mongod,那么每一個(gè)mongod中的數(shù)據(jù)信息都是相同的。 因此可以將一個(gè)分片看作是一個(gè)備份數(shù)據(jù)集合。 MongoDB中存儲(chǔ)的數(shù)據(jù)一般以[a,b)的形式出現(xiàn),范圍是“最小從a開(kāi)始包括a,最大到b不包括b”。 2.2 分割數(shù)據(jù)(Distributing Data) 需要考慮的問(wèn)題:良好的可擴(kuò)展性、均衡負(fù)載 使用的分片方法:多范圍分片 具體簡(jiǎn)單描述:假設(shè)原來(lái)分為[a,f) [f,n) [n,p) [p,z]若增加了一個(gè)新的服務(wù)器,分為[a,d) [f,j) [n,p) [p,z] {[d,f)+[j,n)} 2.3 chunks是如何被創(chuàng)建的 我們把處于某個(gè)特定范圍內(nèi)的數(shù)據(jù)叫做一個(gè)chunk。 shard key是用來(lái)分割范圍也就是創(chuàng)建chunk的關(guān)鍵字。 2.4 將collections分片 當(dāng)?shù)谝淮螢槟硞€(gè)collection分片的時(shí)候,MongoDB創(chuàng)建一個(gè)chunk,這個(gè)chunk的范圍是從最小的值,到最大的值。 如果以collection中的age為shard key,且初始chunk為[1,30],且年齡在20歲以下的占總數(shù)的一半 第一次分片會(huì)被分為[1,20] [20,30] 2.5 均衡負(fù)載 由均衡負(fù)載器(balancer)負(fù)責(zé)均衡負(fù)載的問(wèn)題?!堵浴?/p> 2.6 路由服務(wù)器 mongos mongos是負(fù)責(zé)用戶和集群交互的。它的工作就是負(fù)責(zé)隱藏集群內(nèi)部的分片信息,并且向用戶展現(xiàn)一個(gè)整齊的但服務(wù)器接口。 當(dāng)客戶使用一個(gè)mongo集群的時(shí)候,客戶所有的讀寫(xiě)操作都要通過(guò)mongos。mongos負(fù)責(zé)轉(zhuǎn)發(fā)所有用戶的請(qǐng)求到正確分片。 2.7 配置服務(wù)器 config server 2.8 集群架構(gòu)解析 典型地,一個(gè)MongoDB汲取包含三個(gè)過(guò)程:shards負(fù)責(zé)存儲(chǔ)數(shù)組,mongos負(fù)責(zé)路由請(qǐng)求信息,config server負(fù)責(zé)維持集群狀態(tài)。 ======== 學(xué)習(xí)筆記2 ============= 創(chuàng)建一個(gè)MongoDB Cluster 學(xué)習(xí)資料:Oreilly.Scaling.MongoDB.Jan.2011.pdf 第一步:選擇Shard Key 這一步很關(guān)鍵,對(duì)以后集群的可擴(kuò)展性有深刻的影響,所以Shard Key的選取一定要謹(jǐn)慎。 這部分內(nèi)容多且雜,不在這里細(xì)說(shuō),具體參看學(xué)習(xí)資料第三章。 第二步:將一個(gè)已經(jīng)存在的collections分片 具體的部署步驟見(jiàn)下 【轉(zhuǎn)自】http://blog.csdn.net/daizhj/archive/2010/09/07/5868360.aspx 模擬2個(gè)shard服務(wù)和一個(gè)config服務(wù), 均運(yùn)行在10.0.4.85機(jī)器上,只是端口不同 在C,D,E磁盤(pán)下分別建立如下文件夾: mongodb\bin mongodb\db 然后用CMD命令行依次打開(kāi)相應(yīng)文件夾下的mongd文件: c:\mongodb\bin\mongod --dbpath c:\mongodb\db\ --port 27020 d:\mongodb\bin\mongod --dbpath d:\mongodb\db\ --port 27021 e:\mongodb\bin\mongod --configsvr --dbpath e:\mongodb\db\ --port 27022 (注:config配置服務(wù)器) 啟動(dòng)mongos時(shí),默認(rèn)開(kāi)啟了27017端口 e:\mongodb\bin\mongos --configdb 10.0.4.85:27022 然后打下mongo: E:\mongodb\bin>mongo 回車 (有時(shí)加端口會(huì)造成下面的addshard命令出問(wèn)題) > use admin --添加sharding,maxsize單位是M,此處設(shè)置比較小的數(shù)值只為演示sharding效果 { "shardAdded" : "shard0000", "ok" : 1 } 注:如果要移除sharding,可用下面寫(xiě)法 db.runCommand( { removeshard : "localhost:10000" } ); > db.runCommand({listshards:1}); 查看shard節(jié)點(diǎn)列表 接下來(lái)創(chuàng)建相應(yīng)數(shù)據(jù)庫(kù)并設(shè)置其"可以sharding",新建自動(dòng)切片的庫(kù)user001:
|
|
來(lái)自: CevenCheng > 《分布式》