引言
随着数据量的不断增长,单一MongoDB实例可能无法满足性能和存储的需求。此时,MongoDB的分片功能就派上了用场。分片是将数据水平拆分成多个片段,并将这些片段分散到集群中的不同服务器上的过程。在Windows环境下部署MongoDB分片集群,可以充分利用Windows系统的稳定性和易用性。本文将指导您在Windows上部署一个基本的MongoDB分片集群。
环境准备
1. 下载并安装MongoDB
访问MongoDB官网(MongoDB: 助力加速创新 | MongoDB),下载适合Windows系统的MongoDB安装包,并安装到本地计算机。
2. 创建目录结构
为分片集群创建必要的目录结构。假设我们在D:\MongoData
目录下创建以下子目录:
D:\MongoData\ConfigServer
(配置服务器数据目录)D:\MongoData\Shard1
(分片1数据目录)D:\MongoData\Shard2
(分片2数据目录)
每个分片目录下再创建data
和log
子目录,用于存放数据和日志文件。
配置和启动配置服务器
1. 配置MongoDB实例
在D:\MongoData\ConfigServer
目录下创建一个名为mongod.cfg
的配置文件,内容如下:
yaml复制代码
systemLog: | |
destination: file | |
path: "D:\\MongoData\\ConfigServer\\log\\mongod.log" | |
logAppend: true | |
storage: | |
dbPath: "D:\\MongoData\\ConfigServer\\data" | |
net: | |
bindIp: 127.0.0.1 | |
port: 27019 | |
replication: | |
replSetName: "configReplSet" | |
sharding: | |
clusterRole: "configsvr" |
2. 启动MongoDB实例
使用命令提示符或PowerShell,进入MongoDB的bin
目录,并运行以下命令启动配置服务器:
bash复制代码
mongod --config "D:\\MongoData\\ConfigServer\\mongod.cfg" --install | |
net start MongoDB |
3. 初始化配置服务器副本集
连接到MongoDB实例(使用mongo --port 27019
),并执行以下命令初始化副本集:
javascript复制代码
rs.initiate({ | |
_id: "configReplSet", | |
configsvr: true, | |
members: [ | |
{ _id: 0, host: "localhost:27019" } | |
] | |
}); |
注意:在实际部署中,您可能会添加多个配置服务器实例到副本集中。
配置和启动分片服务器
1. 配置MongoDB实例(分片1)
在D:\MongoData\Shard1
目录下创建一个名为mongod.cfg
的配置文件,内容类似配置服务器,但需要修改端口号和dbPath等。同样,您需要在Shard2
目录下也创建一个类似的配置文件。
2. 启动MongoDB实例(分片1和分片2)
使用与配置服务器相同的命令启动分片服务器实例。
3. 初始化分片服务器副本集
分别连接到分片1和分片2的MongoDB实例,并初始化副本集。例如,对于分片1:
javascript复制代码
rs.initiate({ | |
_id: "shard1ReplSet", | |
members: [ | |
{ _id: 0, host: "localhost:27017" }, | |
{ _id: 1, host: "localhost:27018" } // 假设分片1有两个成员 | |
] | |
}); |
对于分片2,您需要修改_id
和host
的值。
部署路由服务器(Mongos)
1. 启动路由服务器
在命令提示符或PowerShell中,进入MongoDB的bin
目录,并运行以下命令启动路由服务器:
bash复制代码
mongos --configdb configReplSet/localhost:27019 --port 27016 --logpath "D:\\MongoData\\mongos.log" |
注意:这里configReplSet/localhost:27019
是配置服务器的副本集名称和地址。
添加分片到集群
连接到路由服务器(使用mongo --port 27016
),并执行以下命令将分片添加到集群:
插入10000条数据验证,数据必须包含分片键:id
mongos> for(var i=1;i<=10000;i++){... db.c1.save({id:i,name:"a"+i,age:i});}
javascript复制代码
sh.addShard("shard1ReplSet/localhost:27017,localhost:27018"); | |
|
查看分片状态
输入sh.status() 查看分片集群状态
两个shard都有数据分布,说明分片成功!
robo 3T查看分片集
连接两个 shard 端口查看分片情况,若两个shard中的数据不同,则说明分片成功!!
shard1--4006端口中的数据存储,查看c1集合中的数据,可见分片键id的分布情况。
shard1--4007端口中的数据存储,查看c1集合中的数据,可见分片键id的分布情况和shard1--4006端口完全一样,说明shard1主从复制成功【副本集群部署成功】。
shard2--4008端口中的数据存储,查看c1集合中的数据,可见分片键id的分布情况和shard1完全不同。说明分片成功!
tips:
电脑版本比较高,所以的 cmd 需要使用管理员身份运行
启动服务均为一次性服务,关闭 cmd 即为关闭服务,所以在未完成前,请勿关闭
实例均未添加至系统环境变量,请在 bin 目录下启动
虽然窗口很多,操作不太友好,但是在 win 系统下,还是多有耐心一点, linux会简单一些