MongoDB在单机上搭建分片副本集群(windows)

------------------------------
1.安装MongoDB
...
...

------------------------------
2.准备好文件夹

--config:配置文件夹
mkdir F:\work\MongoDB\mongodb\data\mongodb\config20001
mkdir F:\work\MongoDB\mongodb\data\mongodb\config20002
mkdir F:\work\MongoDB\mongodb\data\mongodb\config20003

--shard1:分片1文件夹
mkdir F:\work\MongoDB\mongodb\data\shard37017
mkdir F:\work\MongoDB\mongodb\data\shard37018
mkdir F:\work\MongoDB\mongodb\data\shard37019

--shard2:分片2文件夹
mkdir F:\work\MongoDB\mongodb\data\shard37027
mkdir F:\work\MongoDB\mongodb\data\shard37028
mkdir F:\work\MongoDB\mongodb\data\shard37029

--logs:日志文件夹
mkdir F:\work\MongoDB\mongodb\data\mongodb\logs

------------------------------
3.创建日志文件
f:
cd F:\work\MongoDB\mongodb\data\mongodb\logs
--config servers日志
echo>configsvr_20001.log
echo>configsvr_20002.log
echo>configsvr_20003.log

--mongos servers日志
echo>mongos40004.log

--shard servers shard1分片副本集日志
echo>shard_m11_37017.log
echo>shard_m11_37027.log
echo>shard_m11_37037.log

--shard servers shard2分片副本集日志
echo>shard_m11_37018.log
echo>shard_m11_37028.log
echo>shard_m11_37038.log

------------------------------
4.启动配置进程(config servers)
mongod --configsvr --dbpath F:\work\MongoDB\mongodb\data\mongodb\config20001 --port 20001 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\configsvr_20001.log --logappend
mongod --configsvr --dbpath F:\work\MongoDB\mongodb\data\mongodb\config20002 --port 20002 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\configsvr_20002.log --logappend
mongod --configsvr --dbpath F:\work\MongoDB\mongodb\data\mongodb\config20003 --port 20003 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\configsvr_20003.log --logappend

------------------------------
5.启动路由进程(mongos)
F:\work\MongoDB\mongodb\bin\mongos --configdb 127.0.0.1:20001,127.0.0.1:20002,127.0.0.1:20003 --port 40000 --chunkSize 64 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\mongos40004.log --logappend

------------------------------
6.启动分片进程(shard servers)
--启动shard1副本集
F:\work\MongoDB\mongodb\bin\mongod --shardsvr --replSet shard1 --port 37017 --dbpath F:\work\MongoDB\mongodb\data\mongodb\shard37017 --oplogSize 2048 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\shard_m11_37017.log --logappend
F:\work\MongoDB\mongodb\bin\mongod --shardsvr --replSet shard1 --port 37027 --dbpath F:\work\MongoDB\mongodb\data\mongodb\shard37027 --oplogSize 2048 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\shard_m11_37027.log --logappend
F:\work\MongoDB\mongodb\bin\mongod --shardsvr --replSet shard1 --port 37037 --dbpath F:\work\MongoDB\mongodb\data\mongodb\shard37037 --oplogSize 2048 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\shard_m11_37037.log --logappend

--启动shard2副本集
F:\work\MongoDB\mongodb\bin\mongod --shardsvr --replSet shard2 --port 37018 --dbpath F:\work\MongoDB\mongodb\data\mongodb\shard37018 --oplogSize 2048 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\shard_m11_37018.log --logappend
F:\work\MongoDB\mongodb\bin\mongod --shardsvr --replSet shard2 --port 37028 --dbpath F:\work\MongoDB\mongodb\data\mongodb\shard37028 --oplogSize 2048 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\shard_m11_37028.log --logappend
F:\work\MongoDB\mongodb\bin\mongod --shardsvr --replSet shard2 --port 37038 --dbpath F:\work\MongoDB\mongodb\data\mongodb\shard37038 --oplogSize 2048 --logpath F:\work\MongoDB\mongodb\data\mongodb\logs\shard_m11_37038.log --logappend

------------------------------
7.开始设置分片副本集
--shard1副本集
a.设置第一个分片副本集,必须使用admin数据库,登录命令如下
F:\work\MongoDB\mongodb\bin\mongo 127.0.0.1:37017/admin

b.定义副本集配置(priority:被选举为主节点的优先级越大越高;arbiterOnly:仲裁者节点,只投票,不存储及读写)
config = { _id:"shard1",members:[
{_id:0,host:"127.0.0.1:37017",priority:1},
{_id:1,host:"127.0.0.1:37027",priority:2},
{_id:2,host:"127.0.0.1:37037",arbiterOnly:true}
]
}

c.初始化副本集命令
rs.initiate(config)

--shard2副本集
a.设置第二个分片副本集,必须使用admin数据库,登录命令如下
F:\work\MongoDB\mongodb\bin\mongo 127.0.0.1:37018/admin

b.定义副本集配置(priority:被选举为主节点的优先级越大越高;arbiterOnly:仲裁者节点,只投票,不存储及读写)
config = { _id:"shard2",members:[
{_id:0,host:"127.0.0.1:37018",priority:1},
{_id:1,host:"127.0.0.1:37028",priority:2},
{_id:2,host:"127.0.0.1:37038",arbiterOnly:true}
]
}

c.初始化副本集命令
rs.initiate(config)

------------------------------
8.检查下副本状态:
F:\work\MongoDB\mongodb\bin\mongo 127.0.0.1:37028/admin
rs.status();

------------------------------
9.设置自动分片生效
配置服务器,路由服务器,各个分片服务器,以上操作配置完毕
不过应用程序连接到 mongos 路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
a.连接到mongs,并切换到admin
新开命令行,输入:F:\work\MongoDB\mongodb\bin\mongo 127.0.0.1:40000/admin

b.串联路由服务器与分配副本集命令
db.runCommand( { addshard :"shard1/127.0.0.1:37017,127.0.0.1:37027,127.0.0.1:37037"});
db.runCommand( { addshard :"shard2/127.0.0.1:37018,127.0.0.1:37028,127.0.0.1:37038"});

------------------------------
10.查看分片服务器配置
db.runCommand({listshards : 1 });

执行结果
mongos> db.runCommand({listshards : 1});
{
"shards": [
{
"_id": "shard1",
"host": "shard1/127.0.0.1:37017,127.0.0.1:37027"
},
{
"_id": "shard2",
"host": "shard2/127.0.0.1:37018,127.0.0.1:37028"
}
],
"ok": 1
}

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

查看均衡器,默认是打开的:
sh.getBalancerState();

------------------------------
11.如何让录入的数据自动分片
希望插入数据,数据能够自动分片,那么还需要做如下工作:
连接在mongos上,准备让指定的数据库、指定的集合分片生效。
新开命令行,输入:F:\work\MongoDB\mongodb\bin\mongo 127.0.0.1:40000/admin

a.指定分片生效
db.runCommand( { enablesharding:"app"});--app是指定的数据库,随便指定,没有会自建,插入数据才会生效数据库

b.指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection :"app.download",key : {name: 1} } )
app:数据库
download:数据集collection,也就是表
name:表里的分片键

ex.根据name自动分片到 shard1,shard2,shard3 上面去。要这样设置是因为不是所有 mongodb 的数据库和表都需要分片!

------------------------------
12.配置片键
需要进入admin数据库里面去执行配置命令:
新开命令行,输入:F:\work\MongoDB\mongodb\bin\mongo 127.0.0.1:40000/admin
use app
show collections
for(var i = 0;i < 10; i ++){db.download.insert({"name":i})}

--建立索引
db.download.createIndex({"name": "hashed" })
sh.shardCollection("app.download", { "name": "hashed"})

--查看状态
db.stats()
db.download.stats()
关注count信息,及shard1和shard2种的count信息即可知道分片是否成功

--查看sharding分片状态
db.printShardingStatus();

 

posted on 2018-07-09 15:26  一批马赛克  阅读(816)  评论(0编辑  收藏  举报

导航