mongodb的分布式叢集(3、分區),mongodb叢集
概述
上面兩篇部落格都是關於mongodb的叢集的配置,沒有涉及到分布式,該片部落格就是寫mongodb的分布式,把一個整體,分成多個片,每個片部署到不同的伺服器上,這個就是mongodb的分布式,即:mongodb的分區操作。
部署圖
mongos伺服器做的是路由伺服器,config伺服器就是儲存相應配置的伺服器,shard1和shard2就是分區伺服器,這兩個伺服器合在一起才是一個整體,而mongos伺服器就是他們的和點,所以,我們用戶端只需要和mongos伺服器互動就可以了,後面的,伺服器自己會將相應的資訊存放到不同的片伺服器上。
分區配置
//啟動shard伺服器 mongod --dbpath C:\Mongodb\data\shard1 mongod --dbpath C:\Mongodb\data\shard2 //啟動config伺服器 mongod --dbpath C:\Mongodb\data\config --port 27017 //啟動mongos伺服器(chunkSize:當分區插入大於1M時,開始進行資料轉移,預設200MB) mongos --port 27017 --configdb 192.168.24.125:27017 --chunkSize 1 //登入mongos伺服器,添加shard伺服器(allowLocal允許本地部署多個分區,預設不允許) use admin db.runCommand({addshard : "192.168.24.42:27017", allowLocal : true}) db.runCommand({addshard : "192.168.24.252:27017", allowLocal : true}) //登入mongos伺服器,開啟資料庫分區功能,並指定集合的分區片鍵 db.runCommand({enablesharding : "DBName"}) db.runCommand({shardcollection:"DBName.CName",key:{fieldName:1}}) //數字代表排序
這裡需要注意,一定要指定集合的分區的片鍵,這個鍵就是將這個整體分成部分的關鍵。此時我們可以做一些測試操作,登入mongos伺服器,輸入相應的測試資料,然後,分別登上不同的片伺服器,看看裡面的內容,你就明白了。測試資料等其他方面的命令如下
for(var i=0;i<100000;i++){ db.perons.insert({id:i, name:"qingshan"+i})}//測試資料片節點操作 //移除非主分區,第一次轉移資料,第二次刪 db.runCommand({"removeshard" : "192.168.24.42:27017"}); db.runCommand({"removeshard" : "192.168.24.42:27017"}); //添加分區(須先刪除資料庫) db.runCommand({addshard : "192.168.24.42:27017", allowLocal : true}) //移除主分區,第一次設定主分區,第二次刪 db.runCommand({"moveprimary" : "192.168.24.42:27017"}); db.runCommand({"removeshard" : "192.168.24.252:27017"}); db.runCommand({listshards:1}) //分區資訊 db.printShardingStatus() //分區狀態 use config db.shards.find() //分區伺服器資訊 db.chunks.find() //分區資訊
分區的優缺點 優點 分布式解決的問題,就是資料太多時,一台伺服器不能儲存那麼多資料的問題,當然,向負載平衡等方面的功能,也是有的。 缺點 從上面的部署圖我們可以看出,一旦路由伺服器出現問題,那就完蛋了,同樣,一旦某一個片服務出現問題,那麼就會出現資料的不完整性,即缺失資料的問題。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。