Mongo分片基礎命令

1、三節點做用
Shard:
用於存儲實際的數據塊,實際生產環境中一個shard server角色可由幾臺機器組個一個replica set承擔,防止主機單點故障
Config Server:
mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk信息。
Query Routers:
前端路由,客戶端由此接入,且讓整個集羣看上去像單一數據庫,前端應用能夠透明使用。

 

 
2、基礎命令
一、爲數據庫啓用分片(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()

  

 
3、配置信息說明,config庫的介紹。
① 分片信息: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})

  

 
4、均衡器
均衡器是使用塊數量的多少,而不是數據的大小進行均衡
均衡器負責數據的遷移,會週期性的檢查分片是否存在不均衡,若是存在則會進行塊的遷移,不會影響到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

  

1、三節點做用
Shard:
用於存儲實際的數據塊,實際生產環境中一個shard server角色可由幾臺機器組個一個replica set承擔,防止主機單點故障
Config Server:
mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk信息。
Query Routers:
前端路由,客戶端由此接入,且讓整個集羣看上去像單一數據庫,前端應用能夠透明使用。
 
 
 
 
2、基礎命令
一、爲數據庫啓用分片(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()
 
3、配置信息說明,config庫的介紹。
① 分片信息: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})
 
4、均衡器:均衡器是使用塊數量的多少,而不是數據的大小進行均衡
均衡器負責數據的遷移,會週期性的檢查分片是否存在不均衡,若是存在則會進行塊的遷移,不會影響到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"
}
}
相關文章
相關標籤/搜索