mongodb 在windows下面进行分片

mongodb 更新很快,在做分片的时候,查找了不少文章,但是很多已经过时了。现在把我搭建的过程及命令分享给大家。我用的是最新版本windows版3.4.7。

命令中使用到的目录,需要手动创建。

首先确定各个组件的数量,mongos 1个, config server 3个,数据分3片 shard server 3个,每个shard 有一个副本一个仲裁也就是 3 * 2 = 6 个,,总共需要部署10个实例。这些实例可以部署在独立机器也可以部署在一台机器,我们这里测试资源有限,只准备了1台机器,在同一台机器只要端口不同就可以。,看一下物理部署图:

启动两个副本集

mongod --shardsvr --replSet shard-a --dbpath "C:\mongo\data\rs-a-1" --port 3000 --logpath "C:\mongo\log\rs-a-1.log" --nojournal --serviceName "mongodb_rs_1" --serviceDisplayName "mongodb_rs_1" --install

mongod --shardsvr --replSet shard-a --dbpath "C:\mongo\data\rs-a-2" --port 3001 --logpath "C:\mongo\log\rs-a-2.log" --nojournal  --serviceName "mongodb_rs_2" --serviceDisplayName "mongodb_rs_2" --install

mongod --shardsvr --replSet shard-a --dbpath "C:\mongo\data\rs-a-3" --port 3002 --logpath "C:\mongo\log\rs-a-3.log" --nojournal  --serviceName "mongodb_rs_3" --serviceDisplayName "mongodb_rs_3" --install

连接3000,初始化副本集配置,命令如下:

mongo 127.0.0.1:3000

config = { _id:"shard-a", members:[

{_id:0,host:"localhost:3000"},

{_id:1,host:"localhost:3001"},

{_id:2,host:"localhost:3002",arbiterOnly:true}

]

}

rs.initiate(config);

mongod --shardsvr --replSet shard-b --dbpath "C:\mongo\data\rs-b-1" --port 30100 --logpath "C:\mongo\log\rs-b-1.log" --nojournal  --serviceName "mongodb_rs_b1" --serviceDisplayName "mongodb_rs_b1" --install

mongod --shardsvr --replSet shard-b --dbpath "C:\mongo\data\rs-b-2" --port 30101 --logpath "C:\mongo\log\rs-b-2.log" --nojournal  --serviceName "mongodb_rs_b2" --serviceDisplayName "mongodb_rs_b2" --install

mongod --shardsvr --replSet shard-b --dbpath "C:\mongo\data\rs-b-3" --port 30102 --logpath "C:\mongo\log\rs-b-3.log" --nojournal  --serviceName "mongodb_rs_b3" --serviceDisplayName "mongodb_rs_b3" --install

连接30100,初始化副本集配置,命令如下:

mongo 127.0.0.1:30100

config = { _id:"shard-b", members:[

{_id:0,host:"localhost:30100"},

{_id:1,host:"localhost:30101"},

{_id:2,host:"localhost:30102",arbiterOnly:true}

]

}

rs.initiate(config);

启动配置服务器

mongod --configsvr --replSet config-a --dbpath "C:\mongo\data\config-1" --port 27019 --logpath "C:\mongo\log\config-1.log"  --serviceName "mongodb_config_1" --serviceDisplayName "mongodb_config_1" --install

mongod --configsvr  --replSet config-a --dbpath "C:\mongo\data\config-2" --port 27020 --logpath "C:\mongo\log\config-2.log"  --serviceName "mongodb_config_2" --serviceDisplayName "mongodb_config_2" --install

mongod --configsvr  --replSet config-a --dbpath "C:\mongo\data\config-3" --port 27021 --logpath "C:\mongo\log\config-3.log"   --serviceName "mongodb_config_3" --serviceDisplayName "mongodb_config_3" --install

连接27019,初始化副本集配置,命令如下:

mongo 127.0.0.1: 27019

rs.initiate(

{

_id: "config-a",

configsvr: true,

members: [

{ _id : 0, host : "127.0.0.1:27019" },

{ _id : 1, host : "127.0.0.1:27020" },

{ _id : 2, host : "127.0.0.1:27021" }

]

}

)

服务安装错误,使用删除MongoDB服务:SC DELETE mongos-a

如果MongoDB服务处于运行状态,请先停止该服务:mongos-a

开启mongos服务器

mongos --configdb config-a/127.0.0.1:27019,localhost:27020,localhost:27021 --logpath "C:\mongo\log\mongos.log" --port 40005  --serviceName "mongos-a" --serviceDisplayName "mongos-a" --install

目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到 mongos 路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。

配置Sharding

连接40005,命令如下:

mongo 127.0.0.1: 40005

sh.addShard( "shard-a/localhost:3000")

sh.addShard( "shard-b/localhost:30100")

#查看分片服务器的配置

db.runCommand( { listshards : 1 } );

#内容输出

{

"shards" : [

{

"_id" : "shard-a",

"host" : "shard-a/localhost:3000,localhost:3001",

"state" : 1

},

{

"_id" : "shard-b",

"host" : "shard-b/localhost:30100,localhost:30101",

"state" : 1

}

],

"ok" : 1

}

因为3002,30102是每个分片副本集的仲裁节点,所以在上面结果没有列出来。

目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片,就差那么一点点,一点点。。。

连接在mongos上,准备让指定的数据库、指定的集合分片生效。

#指定testliu分片生效

sh.enableSharding("testliu")

#指定数据库里需要分片的集合和片键

sh.shardCollection("testliu.accounts", {"name":1} )

我们设置testliu的accounts表需要分片,根据 id 自动分片到 shard-a ,shard-b 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!

#插入测试数据

for (var i = 1; i <= 100000; i++)db.accounts.insert({name:i,"test1":"testval1"});

#查看分片情况如下,部分无关信息省掉了

db.accounts.stats();

{

"sharded" : true,

"capped" : false,

"ns" : "testliu.accounts",

"count" : 305,

"size" : 31346,

"storageSize" : 77824,

"totalIndexSize" : 147456,

"indexSizes" : {

"_id_" : 73728,

"name_1" : 73728

},

"avgObjSize" : 102.65901639344263,

"nindexes" : 2,

"nchunks" : 3,

"shards" : {

"shard-a" : {

"ns" : "testliu.accounts",

"count" :42183,

"ok" : 1

},

"shard-b" : {

"ns" : "testliu.accounts",

"count" : 57817,

"ok" : 1

}

},

"ok" : 1

}

可以看到数据分到2个分片,各自分片数量为:shard-a “count” : 42183,shard-b “count” : 57817。已经成功了!不过分的好像不是很均匀,所以这个分片还是很有讲究的,后续再深入讨论。

原文:https://www.cnblogs.com/frankliu/articles/7526445.html

MongoDB 分片2的更多相关文章

  1. MongoDB 分片管理(不定时更新)

    背景: 通过上一篇的 MongoDB 分片的原理.搭建.应用 大致了解了MongoDB分片的安装和一些基本的使用情况,现在来说明下如何管理和优化MongoDB分片的使用. 知识点: 1) 分片的配置和 ...

  2. MongoDB 分片的原理、搭建、应用

    一.概念: 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载.基本思想就是将集合切成小块,这 ...

  3. MongoDB分片简单实例

    分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据也足以提供可接受的读写吞吐量.这时,我 ...

  4. (转)MongoDB分片实战 集群搭建

    环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NUMA CPU架构 Mo ...

  5. 搭建mongodb分片

    搭建mongodb分片 http://gong1208.iteye.com/blog/1622078 Sharding分片概念 这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在shardi ...

  6. mongodb分片

    在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来 ...

  7. mongodb 分片群集(sharding cluster)

    实际环境架构 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的s ...

  8. MongoDB基础教程系列--第九篇 MongoDB 分片

    1.分片介绍 分片(sharding)是将数据拆分,将其分散存到不同机器上的过程.MongoDB 支持自动分片,可以使数据库架构对应用程序不可见.对于应用程序来说,好像始终在使用一个单机的 Mongo ...

  9. mongodb分片部署

    Mongodb 分片部署 配置mongodb集群,比如 在3个server上配置 3 shard的Mongodb集群: 架构: 1.每片数据需要3个mongod server,2个为主从数据节点:1个 ...

  10. MongoDB分片原理篇

    MongoDB分片 为什么需要Sharded cluster? MongoDB目前3大核心优势:『灵活模式』+ 『高可用性』 + 『可扩展性』,通过json文档来实现灵活模式,通过复制集来保证高可用, ...

随机推荐

  1. VC 6.0下载 VC 6.0英文版下载 Visual C++ 6.0 英文企业版 集成SP6完美版(最新更新地址,百度网盘)

    下载地址1:Visual.C++.6.EN 下载地址2:Visual.C++.6.EN 更新下载地址可用(百度网盘)Visual.C++.6.EN 转载请注明出处,有技术问题,欢迎互相交流,或者留言.

  2. php后台添加样式写法

    和我们的光头后台讨论了样式的问题,总结一下 <span style="color:#6666cc;font-size: 12px" onclick="addwork ...

  3. 关于DO、VO的一些新的认识

    今天在开发前的定案以及业务介绍过程中,讲到了一些关于VO和DO的知识和理解. 听到之后就觉得很惊奇,也或许是自己以前不够深入理解开发的过程.认知的很浅薄. DO VO以前的认知里面,都是一样的,都属于 ...

  4. HDU1272(并查集判图连通)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. OpenCV绘图函数

    OpenCV几个绘图函数 矩形 rectangle(Mat& img,Point pt1, Point pt2, const Scalar&color, int thickness=1 ...

  6. $route路由

    <!DOCTYPE html><html ng-app="AngularApp"> <head> <meta charset=" ...

  7. postgresql 主从复制并切换

    1 环境 192.168.19.145 Kylin 3.3 mysqlhq  9.5.2  psql_master192.168.19.227 Kylin 3.3 mysql3    9.5.2  p ...

  8. BIOS简单设置 解析“集成显卡”内存占用问题

    很多使用集成显卡的用户会发现,在系统信息窗口中,内存容量和实际不一样.比如系统内存显示4GB,可用3.48G之类.这不可用的一部分内存到哪去了? 其实减少的这部分内存是被集成显卡占用当做显存使用了.而 ...

  9. SqlServer——判断对象是否存在

    对以下对象判断是否存在:database.table.proc.触发器.临时表.索引.对于这些对象的判断是通过数据表 SysObjects来获得的. 一.基础知识 1.SysObjects系统表 对于 ...

  10. linux 信号量之SIGNAL 0<转>

    我们可以使用kill -l查看所有的信号量解释,但是没有看到SIGNAL 0的解释. [root@testdb~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) ...