热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库中如何配置autoshard

mongodb支持自动分片功能,这无疑给DBA和开发人员带来很大便利,我们无需要手动按一定规则进行拆分DB,当数据量增大后,我们只需要扩充设备即可。mongodbshard配置文档如下:auoshard试验设备列表主机列表主机名ip用途监听端口web访问urllocalhos
mongodb支持自动分片功能,这无疑给DBA和开发人员带来很大便利,我们无需要手动按一定规则进行拆分DB,当数据量增大后,我们只需要扩充设备即可。
mongodb shard配置文档如下:

auo shard 试验设备列表

主机列表
主机名 ip 用途 监听端口 web访问url
localhost 192.168.100.245 config server 27019 http://192.168.100.245:28019/
TEST40 192.168.100.212 shard 1 27018 http://192.168.100.212:28018/
chn-xg-5-5c1 192.168.100.210 shard 2 27018 http://192.168.100.210:28018/
band-all 192.168.100.229 mongos process/mongos Router 27017 http://192.168.100.229:27017/
分析发现config server、shard、mongos的监听端口和web端口均是第二位的差异。监听端口第二位是7,web端口是8,其它全部相同。
mongod --fork --logpath /var/log/mongodb.log --logappend
mogod默认启动为前台进程,当连接session断开,mongod程序自动关闭

一、配置shard 各个模块

1、启动shard1
[root@TEST40 ~]# mongod --shardsvr --fork --logpath /var/log/mongodb.log --logappend
[1] 28521
[root@TEST40 ~]# Tue Aug 17 03:01:57 MongoDB starting : pid=28521 port=27018 dbpath=/data/db/ 32-bit 
** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations
Tue Aug 17 03:01:57 db version v1.6.0, pdfile version 4.5
Tue Aug 17 03:01:57 git version: 2c7f164b653f0d703947572ede064aed41cc2185
Tue Aug 17 03:01:57 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37
Tue Aug 17 03:01:57 [initandlisten] waiting for connections on port 27018
Tue Aug 17 03:01:57 [websvr] web admin interface listening on port 28018

2、启动shard2,shard2的dbpath与默认路径不同,因此需要制定dbpath
[root@chn-xg-5-5c1 cache2]# mongod --shardsvr --dbpath /data/cache2/db --fork --logpath /var/log/mongodb.log --logappend
[1] 31264
[root@chn-xg-5-5c1 cache2]# Tue Aug 17 03:11:48 MongoDB starting : pid=31264 port=27018 dbpath=/data/cache2/db 32-bit 
** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations
Tue Aug 17 03:11:48 db version v1.6.0, pdfile version 4.5
Tue Aug 17 03:11:48 git version: 2c7f164b653f0d703947572ede064aed41cc2185
Tue Aug 17 03:11:48 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37
Tue Aug 17 03:11:48 [initandlisten] waiting for connections on port 27018
Tue Aug 17 03:11:48 [websvr] web admin interface listening on port 28018
[root@chn-xg-5-5c1 cache2]# 

3、配置config server,config server需要dbpath和repairpath
dbpath默认为/data/configdb,repairpath默认为/data/db/,这与shard是不同的
[root@localhost data]# mongod  --configsvr --fork --logpath /var/log/mongodb.log --logappend
[1] 2144
[root@localhost data]# Tue Aug 17 03:13:54 MongoDB starting : pid=2144 port=27019 dbpath=/data/configdb 32-bit 
** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations
Tue Aug 17 03:13:54 db version v1.6.0, pdfile version 4.5
Tue Aug 17 03:13:54 git version: 2c7f164b653f0d703947572ede064aed41cc2185
Tue Aug 17 03:13:54 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37
Tue Aug 17 03:13:54 [initandlisten] diagLogging = 1
Tue Aug 17 03:13:54 [initandlisten] waiting for connections on port 27019
Tue Aug 17 03:13:54 [websvr] web admin interface listening on port 28019
[root@localhost data]# 
4、配置mongos router
[root@band-all local]# mongos --configdb 192.168.100.245:27019 --fork --logpath /var/log/mongodb.log --logappend
[1] 6384
[root@band-all local]# Tue Aug 17 03:46:12 mongos db version v1.6.0, pdfile version 4.5 starting (--help for usage)
Tue Aug 17 03:46:12 git version: 2c7f164b653f0d703947572ede064aed41cc2185
Tue Aug 17 03:46:12 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37
Tue Aug 17 03:46:12 [websvr] web admin interface listening on port 28017
Tue Aug 17 03:46:12 waiting for connections on port 27017
[root@band-all local]# 


二、配置shard 集群

1、登陆mongos server,添加shard
[root@localhost data]# mongo 192.168.100.229:27017/admin
MongoDB shell version: 1.6.0
connecting to: 192.168.100.229:27017/admin
Tue Aug 17 05:59:38 [conn4] building new index on { _id: 1 } for config.databases
Tue Aug 17 05:59:38 [conn4] Buildindex config.databases idxNo:0 { name: "_id_", ns: "config.databases", key: { _id: 1 } }
Tue Aug 17 05:59:38 [conn4] done for 0 records 0.025secs
添加shard 1
>  db.runCommand( { addshard : "192.168.100.210:27018" } );
{ "shardAdded" : "shard0000", "ok" : 1 }
添加shard 2
创建shard时,两个shard不能有相同的数据库
>  db.runCommand( { addshard : "192.168.100.212:27018" } );
{
        "ok" : 0,
        "errmsg" : "trying to add shard 192.168.100.212:27018 because local database recommender exists in another shard0000:192.168.100.210:27018"
}
可以在192.168.100.212:27018通过 db.dropDatabase() 删除recommender
db.runCommand( { addshard : "192.168.100.212:27018" } );
查看shard节点列表
> db.runCommand( { listshards : 1 } );
{
        "shards" : [
                {
                        "_id" : "shard0000",
                        "host" : "192.168.100.210:27018"
                },
                {
                        "_id" : "shard0001",
                        "host" : "192.168.100.212:27018"
                }
        ],
        "ok" : 1
}

将数据库设置为shard模式
> db.runCommand( { enablesharding : "test" } );
{ "ok" : 1 }
> db.runCommand( { enablesharding : "recommender" } );
{ "ok" : 1 }


2、登陆mongos查看对集合进行分片
[root@band-all data]# mongo 192.168.100.229:27017/admin
MongoDB shell version: 1.6.0
connecting to: 192.168.100.229:27017/admin
> show dbs
admin
local
> use admin
switched to db admin
> db.runCommand({listshards:1})
{
        "shards" : [
                {
                        "_id" : "shard0000",
                        "host" : "192.168.100.210:27018"
                },
                {
                        "_id" : "shard0001",
                        "host" : "192.168.100.212:27018"
                }
        ],
        "ok" : 1
}
> db.printShardingStatus(); 
--- Sharding Status --- 
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
      { "_id" : "shard0000", "host" : "192.168.100.210:27018" }
      { "_id" : "shard0001", "host" : "192.168.100.212:27018" }
  databases:
        { "_id" : "admin", "partitioned" : false, "primary" : "config" }
> cOnfig= connect("192.168.100.245:27019") //登陆config server
connecting to: 192.168.100.245:27019
192.168.100.245:27019
> test = db.getSisterDB("test")       //新增数据库test
> db.runCommand( { enablesharding : "test" } ) //将test 数据库进行分片
> db.runCommand( { shardcollection : "test.people", key : {name : 1} } )     //将数据集people进行分片
>  db.printShardingStatus(); 
--- Sharding Status --- 
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
      { "_id" : "shard0000", "host" : "192.168.100.210:27018" }
      { "_id" : "shard0001", "host" : "192.168.100.212:27018" }
  databases:
        { "_id" : "admin", "partitioned" : false, "primary" : "config" }
        { "_id" : "test", "partitioned" : true, "primary" : "shard0000" }
                test.people chunks:
                        { "name" : { $minKey : 1 } } -->> { "name" : { $maxKey : 1 } } on : shard0000 { "t" : 1000, "i" : 0 }
> use test
switched to db test
> show collections
people
system.indexes
批量插入数据
for (var i = 1; i <= 200000; i++) db.people.save({name:"fly_people",sex:"female",age:25});
for (var i = 1; i <= 20000000; i++) db.people.save({name:"houxuefeng",sex:"male",age:30});
> db.people.stats()
{
        "sharded" : true,
        "ns" : "test.people",
        "count" : 462008,
        "size" : 33264600,
        "avgObjSize" : 72.00005194715243,
        "storageSize" : 902522624,
        "nindexes" : 2,
        "nchunks" : 4,
        "shards" : {
                "shard0000" : {
                        "ns" : "test.people",
                        "count" : 402006,
                        "size" : 28944448,
                        "avgObjSize" : 72.00003980040098,
                        "storageSize" : 891340544,
                        "numExtents" : 22,
                        "nindexes" : 2,
                        "lastExtentSize" : 155079936,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 58966016,
                        "indexSizes" : {
                                "_id_" : 18694144,
                                "name_1" : 40271872
                        },
                        "ok" : 1
                },
                "shard0001" : {
                        "ns" : "test.people",
                        "count" : 60002,
                        "size" : 4320152,
                        "avgObjSize" : 72.00013332888904,
                        "storageSize" : 11182080,
                        "numExtents" : 6,
                        "nindexes" : 2,
                        "lastExtentSize" : 8388608,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 5275648,
                        "indexSizes" : {
                                "_id_" : 2498560,
                                "name_1" : 2777088
                        },
                        "ok" : 1
                }
        },
        "ok" : 1
}

至此MongoDB auto shard配置完毕

备注:
问题1、
当test.people数据量达到一定量时,这也就是32位限制,新数据无法入库,查看数据库文件也不在增加
>   for (var i = 1; i <= 20000; i++) db.people.save({name:"houxuefeng",sex:"male",age:30});
can't map file memory - mongo requires 64 bit build for larger datasets

> db.people.stats();
{
        "ns" : "test.people",
        "count" : 10128817,
        "size" : 729274896,
        "avgObjSize" : 72.00000710843132,
        "storageSize" : 891340544,
        "numExtents" : 22,
        "nindexes" : 2,
        "lastExtentSize" : 155079936,
        "paddingFactor" : 1,
        "flags" : 1,
        "totalIndexSize" : 1241788192,
        "indexSizes" : {
                "_id_" : 420325264,
                "name_1" : 821462928
        },
        "ok" : 1
}

[root@chn-xg-5-5c1 db]# ll -lh
总用量 3.0G
-rwxr-xr-x  1 root root    6  8月 18 17:42 mongod.lock
drwxr-xr-x  3 root root 4.0K  8月 19 10:48 moveChunk
-rw-------  1 root root  64M  8月 18 17:56 test.0
-rw-------  1 root root 128M  8月 18 17:56 test.1
-rw-------  1 root root 256M  8月 19 10:46 test.2
-rw-------  1 root root 512M  8月 19 10:48 test.3
-rw-------  1 root root 512M  8月 19 10:52 test.4
-rw-------  1 root root 512M  8月 19 10:58 test.5
-rw-------  1 root root 512M  8月 19 11:04 test.6
-rw-------  1 root root 512M  8月 19 11:12 test.7
-rw-------  1 root root  16M  8月 18 17:56 test.ns
drwxr-xr-x  2 root root 4.0K  8月 18 17:58 _tmp
[root@chn-xg-5-5c1 db]# 
问题2、
创建shard时,两个shard不能有相同的数据库
>  db.runCommand( { addshard : "192.168.100.212:27018" } );
{
        "ok" : 0,
        "errmsg" : "trying to add shard 192.168.100.212:27018 because local database recommender exists in another shard0000:192.168.100.210:27018"
}
可以在192.168.100.212:27018通过 db.dropDatabase() 删除recommender
问题3、
replica set 配置完毕后才可以添加为shard,否则会出错
> db.runCommand( { addshard : "foo/192.168.100.212:27018,192.168.100.212:27019,192.168.100.212:27020" } );
{ "shardAdded" : "shard0001", "ok" : 1 }


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • ch3中可视化软件pangolin的安装步骤及注意事项
    本文介绍了在ch3中安装可视化软件pangolin的步骤及注意事项。首先提供了pangolin的下载地址,并说明了下载后需要放到与虚拟机交互的文件夹地址。然后详细介绍了安装pangolin所需的依赖项,并提供了在终端进行安装的命令。最后给出了解压pangolin的步骤。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
author-avatar
pyg2358_586
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有