Shard:
用於存儲實際的數據塊,實際生產環境中一個shard server角色可由幾臺機器組個一個replica set承擔,防止主機單點故障
Config Server:
mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk信息。
Query Routers:
前端路由,客戶端由此接入,且讓整個集羣看上去像單一數據庫,前端應用能夠透明使用。
一、爲數據庫啓用分片(test數據庫) sh.enableSharding("test1") 二、使用hash分片某個集合(test數據庫中的users集合,username是文檔中的key) sh.shardCollection("test1.users", {username: "hashed"}) 插入1w數據 for (var i = 1; i <= 1000; i++) { db.users.insert({username: "name" + i}) } 三、惟一索引 db.recharge_order.ensureIndex({ "order_id": 1},{"unique":true}); 四、查看索引:db.recharge_order.getIndexes() 五、受權:use admin db.createUser({ user: 'root', pwd:'P8O6!FLLsXmf', roles:['root']})會自動同步到其餘節點 db.createUser({ user: 'qa_select', pwd:'Zlongame1234', roles:['read']}) 六、查看分片中的db.users.stats() (1) 細緻到collection的顯示:sh.status() (2)僅顯示分片: use config db.shards.find() (3)use admin db.runCommand({listshards: 1}) 列出全部的shard server db.printShardingStatus(); 七、查看mongo均衡器 use config db.locks.find(( { _id : "balancer" })).pretty() state 只有 0 關閉 1 正在獲取狀態 2 正在均衡 八、添加分片:sh.addShard("IP:Port") sh.addShard(":") #添加分片 九、刪除分片 db.runCommand({"removeshard":"mab"}) #刪除mab分片 db.adminCommand({"movePrimary":"db","to":"shard0001"}) #移動dba的主分片到shard0001. 十、查看各分片的狀態:mongostat --discover 十一、從節點開啓查詢功能rs.slaveOk(); 十二、 db.repairDatabase() //執行這個命令後,Mongodb會把不須要的空間釋放出來 1三、設置慢查詢 db.getProfilingLevel() #查看狀態 1 shardset1:PRIMARY> db.setProfilingLevel(1,100)#設置 { "was" : 1, "slowms" : 200, "ok" : 1 } shardset1:PRIMARY> db.getProfilingLevel()#查看級別 1 shardset1:PRIMARY> db.getProfilingStatus() # { "was" : 1, "slowms" : 100 } 查看db.system.profile.find().pretty()
① 分片信息:config.shards mongos> db.shards.find() ② 分片中全部數據庫信息:config.databases mongos> db.databases.find() ③ 分片集合信息:config.collections mongos> db.collections.findOne() ④ mongos路由的信息:config.mongs 。能夠查看全部mongos的狀態 mongos> db.mongos.findOne() ⑤ 均衡器鎖的信息:config.locks,記錄全部集羣範圍的鎖,可得知哪一個mongos是均衡器。 mongos> db.locks.findOne() ⑥ 記錄全部塊的信息:config.chunks,也能夠經過sh.status()查看 mongos> db.chunks.find().pretty() ⑦ 記錄全部的分片操做:config.changelog,拆分、遷移 db.changelog.find().pretty() ⑧ 分片標籤:config.tags,sh.addShardTag mongos> db.tags.findOne() ⑨ 分片設置:config.settings,設置分片塊的大小和開啓關閉均衡器 mongos> db.settings.find() ⑩ 網絡鏈接數: db.adminCommand({"connPoolStats":1}) mongos> db.adminCommand({"connPoolStats":1})
均衡器是使用塊數量的多少,而不是數據的大小進行均衡 均衡器負責數據的遷移,會週期性的檢查分片是否存在不均衡,若是存在則會進行塊的遷移,不會影響到mongos正常的操做。均衡器進行均衡的條件是塊數量的多少,而不是塊大小,好比A片有幾個較大的塊,B片有不少較小的塊,則均衡器會把B的分片遷移至A片。 ① 關閉/開啓自動均衡器: mongos> sh.setBalancerState(false) #關閉均衡器 mongos> db.settings.find({"_id" : "balancer"}) { "_id" : "balancer", "stopped" : true} mongos> sh.setBalancerState(true) #開啓均衡器 mongos> db.settings.find({"_id" : "balancer"}) { "_id" : "balancer", "stopped" : false} mongos> sh.stopBalancer() #關閉均衡器 Waiting for active hosts... Waiting for active host mongo2:30000 to recognize new settings... (ping : Mon Jul 27 2015 16:08:33 GMT+0800 (CST)) Waiting for the balancer lock... Waiting again for active hosts after balancer is off... mongos> db.settings.find({"_id" : "balancer"}) { "_id" : "balancer", "stopped" : true} mongos> sh.startBalancer() #開啓均衡器 mongos> db.settings.find({"_id" : "balancer"}) { "_id" : "balancer", "stopped" : false} 查看均衡器的鎖: mongos> use config mongos> db.locks.find( { _id : "balancer" } ).pretty() ② 指定均衡器的工做時間:activeWindow mongos> db.settings.update({"_id":"balancer"},{"$set":{"activeWindow":{"start":"07:00:00","stop":"03:00:00"}}},true) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) mongos> db.settings.findOne({"_id":"balancer"}) { "_id" : "balancer", "stopped" : false, "activeWindow" : { #凌晨7點到次日凌晨3點開啓均衡器功能。 "start" : "07:00:00", "stop" : "03:00:00" } }
5、慢查詢前端
一、經過mongo shell: ''' #查看狀態:級別和時間 PRIMARY> db.getProfilingStatus() { "was" : 1, "slowms" : 200 } #查看級別 PRIMARY> db.getProfilingLevel() 1 #設置級別 PRIMARY> db.setProfilingLevel(2) { "was" : 1, "slowms" : 100, "ok" : 1 } #設置級別和時間 PRIMARY> db.setProfilingLevel(1,100) { "was" : 2, "slowms" : 100, "ok" : 1 } ''' 二、返回最近的10條記錄 ''' db.system.profile.find().limit(10).sort({ ts : -1 }).pretty() #返回全部的操做,除command類型的 db.system.profile.find( { op: { $ne : ‘command‘ } }).pretty() #返回特定集合 db.system.profile.find( { ns : ‘mydb.test‘ } ).pretty() #返回大於5毫秒慢的操做 db.system.profile.find({ millis : { $gt : 5 } } ).pretty() ''' 三、經過配置文件
profile = 1
slowms = 300