mongodb auto-sharding分片
优点在于可以存储海量的数据并且可以扩容。
支持动态添加或移除sharding,添加shard时,mongo会自动将部分数据转移到新的分片上。
移除shard时,mongo会自动将此分片上的数据转移到其它分片上
分片包括3种服务器:
1.分片服务器:存储实际的分片数据
2.配置服务器:存储所有shard节点的配置信息、每个chunk的shard key范围、chunk在各shard的分布情况、该集群中所有db和collection的sharding配置信息
3.路由服务器:询问配置服务器,上哪个分片服务器上进行查询或写入等操作。
#./shard1.conf 配置实例:
dbpath = d:/mongodb/shard/data/service1
logpath = d:/mongodb/shard/log/log1.log
shardsvr = true
logappend = true
port = 20001
rest=true
#./config.conf 配置实例:
dbpath = d:/mongodb/shard/data/config
logpath = d:/mongodb/shard/log/config.log
configsvr = true
logappend = true
port = 30001
rest=true
#./mongos.conf 配置实例
logpath = d:/mongodb/shard/log/mongos.log
configdb = localhost:30001
logappend = true
port = 40001
chunkSize = 1 #设置chunk大小。以兆为单位
#配置并启动mongo服务
cmd:>
mongod -f d:/mongodb/shard/shard1.conf
cmd:>
mongod -f d:/mongodb/shard/shard2.conf
cmd:>
mongod -f d:/mongodb/shard/config.conf
cmd:>
mongos -f d:/mongodb/shard/mongos.conf
mongo:>mongo admin --port 40001 #连接到mongos的admin库
mongo:>db.runCommand({addshard:"localhost:20001"}) #添加分片服务器
mongo:>db.runCommand({addshard:"localhost:20002"}) #添加分片服务器
mongo:>db.runCommand({enablesharding:"test"}) #设置要分片的数据库
mongo:>db.runCommand({shardcollection:"test.users",key:{_id:1}}) #设置分片的集合名称,且必须指定shard key.系统自动创建索引
mongo:>for (var i=1;i<=500000;i++) db.users.insert({age:i,name:"test",addr:"shanghai",country:"China"})
mongo:>db.users.stats(); #查看表的状态,包括是否分片,分片上数据大小等等。
mongo:>db.runCommand({listshards:1}) #列出所有的 shard server.
mongo:>printShardingStatus() #查看sharding信息
mongo:>db.runCommand({isdbgrid:1}) #判断是否是sharding
mongo:>db.runCommand({shardcollection:"test.users2",key:{_id:1}}) #对user2的集合进行分片
#新增|删除shard server
cmd:>
mongod -f d:/mongodb/shard/shard3.conf
mongo:>mongo admin --port 40001 #连接到mongos的admin库
mongo:>db.runCommand({addshard:"localhost:20003"}) #添加分片服务器
mongo:>db.runCommand({removeshard:"localhost:2003"}) #移除分片服务器
优点在于可以存储海量的数据并且可以扩容。
支持动态添加或移除sharding,添加shard时,mongo会自动将部分数据转移到新的分片上。
移除shard时,mongo会自动将此分片上的数据转移到其它分片上
分片包括3种服务器:
1.分片服务器:存储实际的分片数据
2.配置服务器:存储所有shard节点的配置信息、每个chunk的shard key范围、chunk在各shard的分布情况、该集群中所有db和collection的sharding配置信息
3.路由服务器:询问配置服务器,上哪个分片服务器上进行查询或写入等操作。
#./shard1.conf 配置实例:
dbpath = d:/mongodb/shard/data/service1
logpath = d:/mongodb/shard/log/log1.log
shardsvr = true
logappend = true
port = 20001
rest=true
#./config.conf 配置实例:
dbpath = d:/mongodb/shard/data/config
logpath = d:/mongodb/shard/log/config.log
configsvr = true
logappend = true
port = 30001
rest=true
#./mongos.conf 配置实例
logpath = d:/mongodb/shard/log/mongos.log
configdb = localhost:30001
logappend = true
port = 40001
chunkSize = 1 #设置chunk大小。以兆为单位
#配置并启动mongo服务
cmd:>
mongod -f d:/mongodb/shard/shard1.conf
cmd:>
mongod -f d:/mongodb/shard/shard2.conf
cmd:>
mongod -f d:/mongodb/shard/config.conf
cmd:>
mongos -f d:/mongodb/shard/mongos.conf
mongo:>mongo admin --port 40001 #连接到mongos的admin库
mongo:>db.runCommand({addshard:"localhost:20001"}) #添加分片服务器
mongo:>db.runCommand({addshard:"localhost:20002"}) #添加分片服务器
mongo:>db.runCommand({enablesharding:"test"}) #设置要分片的数据库
mongo:>db.runCommand({shardcollection:"test.users",key:{_id:1}}) #设置分片的集合名称,且必须指定shard key.系统自动创建索引
mongo:>for (var i=1;i<=500000;i++) db.users.insert({age:i,name:"test",addr:"shanghai",country:"China"})
mongo:>db.users.stats(); #查看表的状态,包括是否分片,分片上数据大小等等。
mongo:>db.runCommand({listshards:1}) #列出所有的 shard server.
mongo:>printShardingStatus() #查看sharding信息
mongo:>db.runCommand({isdbgrid:1}) #判断是否是sharding
mongo:>db.runCommand({shardcollection:"test.users2",key:{_id:1}}) #对user2的集合进行分片
#新增|删除shard server
cmd:>
mongod -f d:/mongodb/shard/shard3.conf
mongo:>mongo admin --port 40001 #连接到mongos的admin库
mongo:>db.runCommand({addshard:"localhost:20003"}) #添加分片服务器
mongo:>db.runCommand({removeshard:"localhost:2003"}) #移除分片服务器