`
landyer
  • 浏览: 141916 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MongoDB auto shard配置说明

阅读更多

原文地址:http://www.cublog.cn/u/7121/showart_2306551.html

 

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 }

分享到:
评论

相关推荐

    Mongodb shard 简介

    从 MongoDB 1.6 版本开始,MongoDB 支持自动分片(auto-shard),这使得管理工作变得更加方便。MongoDB 可以自动将数据分布到多个 shard server 中,以实现负载均衡和故障自动切换。 Shard 架构 Shard 架构由多个...

    MongoDB资料shard,oplog等

    以Windows平台为例,可以从官方网站下载对应版本的压缩包(如`mongodb-win32-i386-1.8.2.zip`),解压后即可进行配置和使用。官方文档提供了详尽的指导,帮助用户完成部署过程。 综上所述,MongoDB以其独特的特性,...

    MongoDB之conf配置文件详解

    MongoDB之conf配置文件详解 MongoDB的配置文件是服务器的核心组件之一,它控制着MongoDB服务器的各种设置和行为。在本文中,我们将详细介绍MongoDB的配置文件的各个部分,并解释每个设置的作用和意义。 一、数据库...

    Mongodb安装https配置文档

    Mongodb安装https配置文档

    mongodb的配置文件标准化与三种通常的启动方式介绍

    MongoDB 配置文件标准化与三种通常的启动方式介绍 MongoDB 的配置文件标准化是指在 MongoDB 中配置文件的标准化设置,以便更好地管理和维护 MongoDB 数据库。配置文件是 MongoDB 的核心组件之一,它定义了 MongoDB ...

    mongoDB环境配置

    关于mongoDB环境的配置,包括windows、liunx和苹果系统。

    Mongodb副本集群配置.docx

    "Mongodb 副本集群配置" MongoDB 副本集群配置是 MongoDB 的一个重要概念,它允许用户创建一个高可用性的数据库集群,以确保数据的安全和可靠性。在这个配置文件中,我们将学习如何配置 MongoDB 副本集群,以便在...

    MongoDB 4.4 数据库全部参数详细说明

    MongoDB 是一个流行的开源文档数据库系统,其4.4版本提供了丰富的配置参数来优化和管理数据库的性能、安全性和稳定性。以下是对这些参数的详细解释: ### 验证参数 这些参数涉及到数据库的安全认证和权限控制: - `...

    MongoDB数据库安全配置规范

    ### MongoDB数据库安全配置规范 #### 一、MongoDB权限配置概览 MongoDB是一款非常流行的文档型NoSQL数据库,被广泛应用于多种业务场景之中。为了确保数据的安全性,MongoDB提供了丰富的权限控制机制。本文将详细...

    mongodb安装集群

    - shard 服务器日志路径:`/data/mongodb/shard1/log/shard1.log`,`/data/mongodb/shard2/log/shard2.log`,`/data/mongodb/shard3/log/shard3.log` #### 四、启动配置服务器 (Config Server) 配置服务器是 ...

    MongoDB部署 配置简要手册

    每个数据节点都需要一个配置文件,例如`/work/mongodb/shard11.conf`。 - 主要配置项包括: - `shardsvr=true`:表明这是一个数据节点。 - `replSet=shard1` 或 `replSet=shard2`:指定所属的副本集名称。 - `...

    mongodb3.2集群配置

    以下是Shard1的配置文件内容,详细说明了各个参数的意义: 1. **systemLog**: - `quiet: false`:表示日志不会被静音。 - `path`:指定日志文件路径。 - `logAppend: true`:表示日志记录方式为追加模式。 - `...

    mongoDB配置文件.docx

    MongoDB配置文件详细解析 MongoDB配置文件是 MongoDB 数据库的核心组件,它控制着 MongoDB 的行为和性能。本文档将详细讲述 MongoDB 配置文件的各种配置项和其作用。 一. 配置文件格式 MongoDB 配置文件采用 YAML...

    MongoDB+Nginx配置

    ### MongoDB+Nginx配置详解 #### 一、概述 在现代Web开发中,高效的数据存储与灵活的内容分发网络(CDN)对于提升用户体验至关重要。MongoDB作为一种高性能、易扩展的文档型数据库,广泛应用于各类应用程序中;而...

    MongoDB数据库安装配置

    MongoDB数据库安装配置 MongoDB是一个基于分布式文件存储的开源文档数据库,它使用bson存储数据,旨在提供高性能和灵活的数据存储解决方案。下面是 MongoDB 在 Windows 10 平台上的安装和配置基本信息。 创建数据...

    mongodb集群搭建说明

    - `/data/mongodb/shard1/data` - `/data/mongodb/shard1/log` - `/data/mongodb/shard2/data` - `/data/mongodb/shard2/log` - `/data/mongodb/shard3/data` - `/data/mongodb/shard3/log` 5. **规划端口号*...

    mongodb集群配置文档

    ### MongoDB集群配置详解 #### 一、MongoDB集群与分片概述 MongoDB是一种非常流行的非关系型数据库系统,以其灵活的数据模型、高性能和可扩展性而受到广泛欢迎。随着数据量的增长,单一MongoDB实例可能无法满足高...

    mongoDB安装与配置主从

    MongoDB 安装与配置主从关系 MongoDB 是一个基于分布式文件存储的开源文档数据库,允许用户灵活地存储、处理和分析数据。以下是 MongoDB 安装与配置主从关系的详细步骤和相关知识点。 安装 MongoDB 在 RedHat:...

    MongoDB复制集集群配置文件.rar

    在MongoDB复制集中,每个成员都有一个配置文件,用于定义成员的角色、连接信息等。配置文件通常包含以下内容: 1. `replicaSet`:设置复制集的名称。 2. `net`:网络设置,如端口、绑定IP等。 3. `storage`:数据...

Global site tag (gtag.js) - Google Analytics