mongodb复制集+分片

复制集相当于集群配置,分片相当于对分表。因为需要的端口太多,方便观察在2个机器操作。也可以在一个机器的不同位置放多份mongodb的文件夹。
复制是2个机器之间的(也可以同机器不同端口),分片是同一个机器上的数据表分片。那复制就是要配置好各机器上对应的分片的复制,保证数据同步。
一、启动mongod进程
win ip:192.168.2.106

d:\MongoDB\bin\mongod.exe –shardsvr –replSet shard1 –port 27016 –dbpath “d:\MongoDB\data\shardReplSet\shard1_win”

d:\MongoDB\bin\mongod.exe –shardsvr –replSet shard2 –port 27018 –dbpath “d:\MongoDB\data\shardReplSet\shard2_win”

mac ip:192.168.2.107

/work/mongo/bin/mongod –shardsvr –replSet shard1 –port 27016 –dbpath /work/mongo/data/shardReplSet/shard1_mac

/work/mongo/bin/mongod –shardsvr –replSet shard2 –port 27018 –dbpath /work/mongo/data/shardReplSet/shard2_mac

复制集的配置还没做,2台机器分别的2个窗口都会输出
[rsStart] replSet can’t get local.system.replset config from self or any seed (EMPTYCONFIG)

二、配置复制集
1.配置 shard1 所用到的 Replica Sets
mongo 连接 win或mac 的27016端口 mongo –port 27016

rs.initiate({_id: ‘shard1′, members: [{_id: 0, host: '192.168.2.106:27016'},{_id: 1, host: '192.168.2.107:27016'},]});
配置好后 2边对应的窗口会输出相关的信息包括最终分配谁是primary 和secondary。连接的mongo串口随便操作一个命令前面就会变成 shard1:PRIMARY> 或者shard1:SECONDARY>

2.配置 shard2 所用到的 Replica Sets
mongo 连接 win或mac 的27018端口 mongo –port 27018

rs.initiate({_id: ‘shard2′, members: [{_id: 0, host: '192.168.2.106:27018'},{_id: 1, host: '192.168.2.107:27018'},]});
配置好后 2边对应的窗口会输出相关的信息包括最终分配谁是primary 和secondary 。连接的mongo串口随便操作一个命令前面就会变成 shard2:PRIMARY> 或者shard2:SECONDARY>

都是win的2个数据库服务进程成了primary

三、配置分片
1.配置 2 台 Config Server
d:\MongoDB\bin\mongod.exe –configsvr –port 30000 –dbpath “d:\mongodb\data\shardReplSet\config” –directoryperdb
/work/mongo/bin/mongod –configsvr –port 30000 –dbpath /work/mongo/data/shardReplSet/config –directoryperdb

2.配置 2 台 Route Process   提示只能1个或3个 没办法,实际执行去掉了192.168.2.107:30000
win:
d:\MongoDB\bin\mongos.exe –configdb 192.168.2.106:30000,192.168.2.107:30000 –port 40000 –chunkSize 1
mac:
/work/mongo/bin/mongos –configdb 192.168.2.106:30000,192.168.2.107:30000 –port 40000 –chunkSize 1

3.连接到win的端口 40000 的 mongos 进程,并切换到 admin 数据库做以下配置
> use admin
switched to db admin
>db.runCommand({addshard:”shard1/192.168.2.106:27016,192.168.2.107:27016″});
{ “shardAdded” : “shard1″, “ok” : 1 }
>db.runCommand({addshard:”shard2/192.168.2.106:27018,192.168.2.107:27018″});
{ “shardAdded” : “shard2″, “ok” : 1 }

激活数据库及集合的分片
db.runCommand({ enablesharding:”test” })
db.runCommand({ shardcollection: “test.users”, key: { _id:1 }})

连接到mac的端口 40000 的 mongos 进程,并切换到 test 数据库,以便添加测试数

use test
for(var i=1;i<=200000;i++) db.users.insert({id:i,addr_1:”Beijing”,addr_2:”Shanghai”});
db.users.stats()

连接到win进mongos 查看 db.users.stats()

两台机器显示的count值都一直在变化,primary这边的进行不断显示moveChunk ,用db.user.count()看的数也一直在变化,同步过程中的值比实际值大。同步时间也比较长。。。
等同步完全结束后(primary这边的没怎么刷了)连续几次显示 [initandlisten] connection accepted from 192.168.2.107:xxxx 再查看就同步完成了。查看数据量也和实际的相等。

最终结果:

win:

mac:

 

关于 Administrator

爱拼才会赢!
此条目发表在 Nosql 分类目录,贴了 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>