当前位置:Gxlcms > 数据库问题 > MongoDB之分片

MongoDB之分片

时间:2021-07-01 10:21:17 帮助过:29人阅读

\mongo.config --port 20000

技术分享


第二步,建立mongos进程

建立mongos进程,以供应用程序连接。这种路由服务器连接数据目录都不需要,但一定要指明配置服务器的位置:

mongos --port 30000 --configdb 127.0.0.1:20000

技术分享

分片管理通常是通过mongos完成的,完成后效果如下:
技术分享


第三步,添加片

添加片,片就是普通的mongod:
技术分享
技术分享
连接刚才启动的mongos,为集群添加一个片。
启动shell,连接mongos:
确定连接的是mongos而不是mongod,通过addshard命令添加片:

>mongo 127.0.0.1:30000
mongos> use admin
switched to db admin
mongos> db.runCommand(
... {
... "addshard":"127.0.0.1:10000",
... "allowLocal":1
... }
... )
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> db.runCommand(
... {
... "addshard":"127.0.0.1:10001",
... "allowLocal":1
... }
... )
{ "shardAdded" : "shard0001", "ok" : 1 }

技术分享
技术分享
技术分享

当在本机运行片的时候,得设定allowLocal键为true。MongoDB尽量避免由于错误的配置,将集群配置到本地,所以得让它知道这仅仅是开发,而且我们很清楚自己在做什么。
如果是生产环境中,则要将其部署在不同的机器上。
想添加片的时候,就运行addshard,MongoDB会负责将片集成到集群


第四步,切分数据

MongoDB不会将存储的每一条数据都直接发布,得先在数据库和集合的级别将分片功能打开。
如果是连接配置服务器,

E:\mongo\bin>mongo 127.0.0.1:20000
MongoDB shell version: 2.0.6
connecting to: 127.0.0.1:20000/test
> use admin
switched to db admin
> db.runCommand({"enablesharding":"test"})
{
"errmsg" : "no such cmd: enablesharding",
"bad cmd" : {
"enablesharding" : "test"
},
"ok" : 0
}

技术分享

应该是连接路由服务器,

db.runCommand({"enablesharding":"test"})//将test数据库启用分片功能.

对数据库分片后,其内部的集合便会存储到不同的片上,同时也是对这些集合分片的前置条件。
在数据库级别启用了分片以后,就可以使用shardcollection命令堆积和进行分片:

db.runCommand({"shardcollection":"test.refactor","key":{"name":1}})//对test数据库的lf集合进行分片,片键是name

如果现在对lf集合添加数据,就会依据”name”的值自动分散到各个片上。

这样分片就建立完成啦!


管理分片

分片建立完成后,如何管理分片呢?
分片信息主要存放在config数据库上,这样就能被任何连接到mongos的进程访问到了。
在shell中连接了mongos,并使用了use config数据库。

查看分片
通过db.shards.find()方法:
技术分享

查看状态
db.printShardingStatus()
技术分享

删除分片

db.runCommand({"removeshard":"127.0.0.1:10001"})

版权声明:本文为博主原创文章,未经博主允许不得转载。

MongoDB之分片

标签:mongodb   数据库   

人气教程排行