mongodb 简单使用

ddklj 贡献于2012-06-05

作者 mostar  创建于2011-03-30 00:33:00   修改者mostar  修改于2011-04-02 01:29:00字数5387

文档摘要:mongodb 简单使用
关键词:

一. Replica Set(数据副本节点集合) 【测试环境:单台windows下】 1. 在安装好mongodb前提下,新建几个用于存储数据的目录。例如:mkdir (D:\mongoShardingTest\db1 , D:\mongoShardingTest\db2, D:\mongoShardingTest\db1) 如下图: 2.在建好上面3个为mongodb存储目录前提下,输入命令 : mongod --replSet foo --port 27000 --dbpath D:\mongoShardingTest\db1 --logpath D:\mongoShardingTest\db1\MongoDB.log (针对这次的命令解释:mongod 代表每次运行DB通过此命令开启, --replSet 追加命令代表这次的数据存储属于一个副本集合,foo 是为了区分每个不同副本集合的命名,这个可以任意命名, --port代表服务器为数据库开启的监听端口,27000就是开启的端口号, --dbpath 代表数据将要存储的位置,D:\mongoShardingTest\db1就是存储的位置路径, --logpath代表操作中控制台打印的日志,D:\mongoShardingTest\db1\MongoDB.log .就是日志存储的位置,日志文件自己新建。 另外--logpath D:\mongoShardingTest\db1\MongoDB.log 可以去掉,那么数据信息不会存储在日志中,会直观打印在cmd中)。 如图: 再开启一个命令窗口输入: mongod --replSet foo --port 27001 --dbpath D:\mongoShardingTest\db2 (注意此次是不追加logpath) 如图: 接着开启一个命令窗口输入: mongod --replSet foo --port 27002 --dbpath D:\mongoShardingTest\db3(图略) 3.上面两步完成之后,要想让三个库做成一个副本集合必须通过命令初始化。再开启一个命令窗口输入: mongo 10.0.8.200:27000 (ip地址+端口号,默认不写的话是27017,但之前没定义27017) 如图: 接着在命令下输入:config = {_id:"foo",members:[ {_id:0,host:"10.0.8.200:27000"}, {_id:1,host:"10.0.8.200:27001"}, {_id:2,host:"10.0.8.200:27002"}] } (此次命令解释:config代表自己起的变量名称,_id:代表之前第二步replSet定义的名称,members对应你将要把哪些数据db做成一个副本集合) 如图: 接着输入命令:rs.initiate(config)初始化这个replica set。(rs是mongodb自带replica set的简写,initiate()自带函数。具体可通过rs.help()查看) 如图: 查看当前replica set状态,输入 rs.status()可以查看,如图: 图中 state:1,代表它是primary,state:2代表他是secondary。 另外也可以通过:http://:port/ 进行访问。本例则是: http://10.0.8.200:28000/( 因为web访问,要在原来端口基础上+1000才可以访问到,所以是28000)具体可看 http://www.mongodb.org/display/DOCS/Replica+Set+Admin+UI 。(注意:在浏览器中你超链接会报403,因为windows要求安全。如果想通过浏览器中查看,那么请在之前的第二部在mongod命令之后追加—rest就不会报错了) 4.个人总结: (1)mongodb发生故障之后,那么它会移除这个节点,自动机制选出新的节点作为primary运行。原来的节点如果修复之后,原来primary节点会和现有primary选举新的节点。 (2)mongdb除啦有正常的作为replica set之外,我们还可以通过配置配出两种别的replica set。比如 作为一个arbiter replicaset 。例子: config = {_id: 'foo', members: [ {_id: 0, host: 'localhost:27017'}, {_id: 1, host: 'localhost:27018'}, {_id: 2, host: 'localhost:27019', arbiterOnly: true}] } Abiter节点是不会同步数据,只是会作为存在的一个完好的replicaset去告诉所有参选者,因为当你节点数一般以上坏掉的时候就不能选举新的primary节点了。 还有个:{ _id: 'myset', members: [ { _id:0, host:'sf1', priority:1 }, { _id:1, host:'sf2', priority:1 }, { _id:2, host:'ny1', priority:0 } ]} Priority代表优先级。可以同步replicaset节点。但是为0代表不会选为primary。 (3)增加一个新replicaset,只要mongod --replSet name(你想添加的) ,然后在命令行中,输入:rs.add("10.0.8.200:27000").注意:必须在连接到现有primary 命令行下才能执行,连接别的执行不会成功。另外还有一点:新增加的副本节点默认是同步secondary节点,为了同步primary节点可以在 mongod的时候在后面追加上 --fastsyn。 二 master/slave (数据副本节点集合) Master/slave是进行数据副本节点复制的另一种策略。不过官网并不主推这种做法,介绍的篇幅相当少,而且目前不会有大力度的改进。 可以直接在http://www.mongodb.org/display/DOCS/Master+Slave 例子。 三 sharding(集群切片) Mongodb为了增加数据库的海量处理能力,提出了auto-sharding机制。简单看下sharding由实现由基本几部分组成。 上图中(1)最上面蓝色分的四组代表四个shard意味着数据可以由比较平衡的会分布在这四块区域里面。每个shard由图上可知是由一组replicaset组成,单个shard坏掉之后会推选出新的primary shard。 (2) 下边三个黄色代表三个shard config server,它的作用是存储上边蓝色里chunk和shard信息。Chunk是shard里面最小的进行sharding转移的最小单位,可以设置。 (3)蓝色代表routing ,是前端路由,客户端通过此去访问数据库,让整个数据库看起来好像单一的数据库,而非cluster。 由于上边已经介绍完replicaset,所以下边sharding联合replicaset做个使用例子。 1. 首先配置两个replicaset,每个replicaset由三个副本组成,同时追加——shardsvr表明都支持sharding(也可以把--logpath --oplogSize 追加上)。比如: 1)mongod --shardsvr --replSet shard1 --port 26001 --dbpath D:\mongoShardingTest\shard1\rs11 2)mongod --shardsvr --replSet shard1 --port 26002 --dbpath D:\mongoShardingTest\shard1\rs12 3)mongod --shardsvr --replSet shard1 --port 26003 --dbpath D:\mongoShardingTest\shard1\rs13 然后初始化replica set,用mongo连接其中的一个mongod,执行: >config = {_id:"shard1", members:[{_id:1,host:"10.0.8.200:26001"},{_id:2,host:"10.0.8.200:26002"},{_id:3,host:"10.0.8.200:26003"}]} >rs.initiate(config) 同样方法我们来配置第二个replicaset: 1)mongod --shardsvr --replSet shard2 --port 26011 --dbpath D:\mongoShardingTest\shard2\rs21 2)mongod --shardsvr --replSet shard2 --port 26012 --dbpath D:\mongoShardingTest\shard2\rs22 3)mongod --shardsvr --replSet shard2 --port 26013 --dbpath D:\mongoShardingTest\shard2\rs23 >config = {_id:"shard2", members:[{_id:1,host:"10.0.8.200:26011"},{_id:2,host:"10.0.8.200:26012"},{_id:3,host:"10.0.8.200:26013"}]} >rs.initiate(config) 2. 紧接着配置几台configserver,很容易理解,如: 1)mongod --configsvr --dbpath D:\mongoShardingTest\config1 --port 26021 2)mongod --configsvr --dbpath D:\mongoShardingTest\config2 --port 26022 3)mongod --configsvr --dbpath D:\mongoShardingTest\config3 --port 26023 3. 紧接着输入mongos --configdb 10.0.8.200:26021,10.0.8.200:26022,10.0.8.200:26023 --port 26031 --chunkSize 5 (注意如果你输入的host逗号之后有间隔系统不会识别会报错,因此要紧挨着输入)如正确图: 如果只配置两个configserver会出现下面这个 4. 连接到mongos,切换到 admin库下(注意db.runCommand()只支持在admin下运行)如图: 如果只是单个shard,直接用 db.runCommand({addshard:”[:]”}),如果shard是replicaset,如本例子则写成db.runCommand({addshard:”repliaSetName/[:],[:]”})可以看本例如输入: db.runCommand({addshard:"shard1/10.0.8.200:26001,10.0.8.200: 26002,10.0.8.200: 26003",maxsize:2000 }) db.runCommand({addshard:"shard2/10.0.8.200:26011,10.0.8.200: 26012,10.0.8.200: 26013",maxsize:2000 })(maxsize自己配置的shard最大占有空间Mb(默认可以不用配))(mongodb对空格尤其多个连续host之类特别敏感,多一个它就报些错) 查看直接配置的shard,输入 db.runCommand({listshards:1})如图: 5. 接着输入配置命令,是哪个库具有sharding能力,如: db.runCommand({enablesharding:"test"}) 通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作(必须给shard的属性给予key,而且系统会给默认的key添加index): db.runCommand({shardcollection:"test.test",key:{"name":1}}) 因为我们是test库下testcollection进行sharding,所以我们现在转到test下: use test 接着我们对testcollection进行操作,试验结果: for(var i = 1;i <= 200000;i++) db.test.save({id:i, "name":i, "value": "aaaaaaaaa"}) 执行完之后输入db.test.stats() 查看结果。 (注意一点:上面关于大小的应该是bit为单位,所以当你在mongos没有配置chunksize它默认是200mb,只有循环图上的几百万才能看出效果,要不会认为shard不成功的假象。)

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档