900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > MongoDB在单机上搭建分片副本集群(windows)

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

时间:2023-10-22 08:47:07

相关推荐

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();

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。