千家信息网

MongoDB Sharding学习操作篇二

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,接上一篇14.配置集群中的balancer进程balancer进程运行在集群中的某一个mongos实例上,确保chunks均匀分布在整个集群上。更改指定shard的最大存储大小15.移除已有分片集群中
千家信息网最后更新 2025年02月08日MongoDB Sharding学习操作篇二

接上一篇

14.配置集群中的balancer进程

balancer进程运行在集群中的某一个mongos实例上,确保chunks均匀分布在整个集群上。


更改指定shard的最大存储大小




15.移除已有分片集群中的一个分片

在移除一个分片之前需要先确保这个分片上的数据已经移动到其他分片上。

1)确保Blancer进程已经开启

sh.getBalancerState()

2)确定需要被移除的分片名称

db.adminCommand( { listShards: 1 } )

或者

db.printShardingStatus()

或者

sh.status()


3)移走分片上的数据块

mongos> use admin;switched to db adminmongos> db.runCommand({removeShard : "taiwan_shard1"}){        "msg" : "draining started successfully",        "state" : "started",        "shard" : "taiwan_shard1",        "ok" : 1}


根据网络状况和数据量大小,这个操作可能花费几分钟或者几天时间完成


4)检查迁移的状态

mongos> db.runCommand({removeShard : "taiwan_shard1"}){        "msg" : "draining ongoing",        "state" : "ongoing",        "remaining" : {                "chunks" : NumberLong(0),                "dbs" : NumberLong(2)        },        "note" : "you need to drop or movePrimary these databases",        "dbsToMove" : [                "taiwan_game4",                "taiwan_game5"        ],        "ok" : 1}


这里需要注意的是,如果一个分片是一个或者多个数据库的primary shard,那么这个分片上就存有未被分片的数据。

mongos> use admin;switched to db adminmongos> db.runCommand( { movePrimary: "taiwan_game4", to: "taiwan_shard2" }){        "primary " : "taiwan_shard2:taiwan_shard2/gintama-taiwan-mongodb2:28018",        "ok" : 1}mongos> db.runCommand( { movePrimary: "taiwan_game5", to: "taiwan_shard2" }){        "primary " : "taiwan_shard2:taiwan_shard2/gintama-taiwan-mongodb2:28018",        "ok" : 1}


5)结束迁移过程

mongos> db.runCommand({removeShard : "taiwan_shard1"}){        "msg" : "removeshard completed successfully",        "state" : "completed",        "shard" : "taiwan_shard1",        "ok" : 1}

当state状态为completed时,迁移完成。




参考文档:

http://docs.mongodb.org/v2.4/tutorial/remove-shards-from-cluster/


0