MongoDB分片
如果資料量已經突破了單臺伺服器的處理能力。可以考慮使用分片。
分片的概念類似於資料庫的分割槽表。不同的是資料庫的分割槽表只是將一個segment分為多個segment儲存,而MongoDB的分片,則是將每一個Segment劃分到一個單獨的伺服器處理。和傳統的資料庫一樣,分片需要依據一個索引列,而這個索引列一定要應用在查詢中,否則不能應用分割槽消除的特性,這樣會在每一個分割槽中進行查詢。
MongoDB分片的元件有mongos路由伺服器,配置伺服器和分片伺服器。而分片伺服器一般作為邏輯伺服器存在,實際應用中,它應該是一個副本集叢集。
實驗使用三臺虛擬機器,搭建一個具有三個分片的高可用叢集。
每個虛擬機器啟動5個MongoDB例項。相關目錄和配置檔案如下:
每臺虛擬機器埠分配如下:
配置伺服器 3000Mongos路由伺服器 4000
分片伺服器1 5000
分片伺服器2 6000
分片伺服器3 7000
配置伺服器引數檔案內容如下:
configsvr =true
dbpath =/home/lihuilin/mongoconfig/
port =3000
smallfiles =true
路由伺服器引數檔案內容如下:
port =4000
logpath =/home/lihuilin/mongos/mongos.log
分片伺服器引數檔案內容如下:
dbpath =/home/lihuilin/mongoshard1
smallfiles =true
replSet =shard1
profile =1
port =5000
分片2和分片3 修改相應的資料
首先,需要啟動配置伺服器。
三臺配置伺服器啟動之後,啟動mongos伺服器。
然後啟動三個副本集,
最後登入mongos伺服器,增加分片伺服器。
檢視叢集分片狀態。
但是,MongoDB預設不會對資料進行分片,他會將資料儲存在一個分片中。除非指定了分片的資料庫和集合。
可以看到MSG資料庫存放在了分片2的副本集上。
設定需要分片的資料庫。
設定需要分片的集合和鍵。如果該鍵沒有索引,則報錯如下:
在分片的鍵上建立索引
增加索引之後,設定分片成功
分片的鍵選擇非常重要,一旦分片,結構就固定了。
如果後續發現用這個鍵不合適,就會非常非常的麻煩。
下圖是採用rcvrID作為鍵的分片情況。
具體使用哪個鍵作為分片的依據,確實需要在業務層次想清楚。
和資料庫分割槽表一樣,如果業務沒有考慮清楚,就建立了分割槽表。
導致每次查詢都不能應用分割槽消除,結果就是全分割槽掃描,效能沒有提升,反而下降。
路由伺服器故障處理:
Mongos路由伺服器故障,應該是最好解決的一種故障。因為配置資訊存放在配置伺服器,資料存放在分片伺服器,所以只需要重新啟動mongodb例項連線配置伺服器即可。
而前端JAVA程式中記錄著所有mongos的資訊,他發現mongos不能連線,會自動尋找pings最先返回的mongos進行連線。所以對於JAVA應用,mongos故障是透明的。
分片伺服器故障處理:
由於分片由副本集組成,所以故障處理同副本集的成員故障處理。
配置伺服器故障處理:
配置伺服器存放著叢集的分片資訊。一旦所有的配置伺服器都故障,則叢集基本上就徹底掛了。所以配置伺服器一定要保證有3個例項分佈在不同的機器(機房)上。
在任何一個配置伺服器失效的時候,Mongodb叢集的後設資料都會變成為只讀了。叢集系統繼續執行,但是chunks在一個分片中將會成為不可以被拆分或者是不可以跨分片進行遷移。對於大多數使用場景,這個不會導致問題,應為改變Chunk後設資料進行的並不頻繁。
另外,使當機的Config Server在一個合理的時間週期(一天)內恢復是相當重要的,這樣可以避免分片由於缺乏遷移而變得負載不均衡
恢復當機的配置伺服器,可以找到一個新的伺服器,使用相同的IP或者主機名稱。停止另外一個可用的配置伺服器(或者上鎖複製檔案),將他所有的檔案同步到新的伺服器上。然後啟動這個新的配置伺服器。
參考:
http://blog.itpub.net/29254281/viewspace-1176553/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1183315/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB 分片管理MongoDB
- MongoDB之分片MongoDB
- mongodb分片搭建MongoDB
- mongodb分片balanceMongoDB
- mongodb 分片叢集建立分片集合MongoDB
- MongoDB分片叢集新增分片(自用)MongoDB
- mongodb之shard分片MongoDB
- mongodb複製+分片MongoDB
- MongoDB 分片叢集搭建MongoDB
- MongoDB叢集之分片MongoDB
- 搭建MongoDB分片叢集MongoDB
- mongodb 分片叢集設定MongoDB
- mongodb分片物理搬遷方案MongoDB
- MongoDB分片叢集常用操作MongoDB
- 【Mongodb】分片加複製集MongoDB
- MongoDB 3.4配置sharding分片MongoDB
- mongodb簡單分片實驗MongoDB
- mongodb 分片群集(sharding cluster)MongoDB
- MongoDB分片鍵選擇指南MongoDB
- 【Mongodb】分片複製集環境新增新的分片MongoDB
- MongoDB分片叢集chunk的概念MongoDB
- MongoDB何時考慮使用分片MongoDB
- MongoDB 分片的原理、搭建、應用MongoDB
- 高可用mongodb叢集(分片+副本)MongoDB
- MongoDB4.2 分片掃盲說明MongoDB
- MongoDB Sharding(二) -- 搭建分片叢集MongoDB
- Mongodb分散式叢集副本集+分片MongoDB分散式
- MongoDB 分片鍵的選擇與案例MongoDB
- MongoDB分片需要考慮的事項MongoDB
- mongodb的分散式叢集(3、分片)MongoDB分散式
- mongoDB研究筆記:分片叢集部署MongoDB筆記
- 搭建高可用MongoDB叢集(四):分片MongoDB
- MongoDB叢集設定集合分片生效及檢視集合分片情況MongoDB
- mongodb分片(sharding)搭建、應用及管理MongoDB
- MongoDB的分片資料庫命令總結MongoDB資料庫
- linux下Mongodb叢集搭建:分片+副本集LinuxMongoDB
- MongoDB分片群集的部署(用心描述,詳細易懂)!!MongoDB
- MongoDB mongoshake 遷移分片到複製集合MongoDB