接下来将介绍怎样在 Win10 系统下面,创建 MongoDB 复制集。由于在一台机器上面要启动多个 MongoDB 进程,因此需要根据端口号进行区分。下面将介绍创建 MongoDB 复制的详细步骤:
(1)下载 mongodb-v4.0.2-x86.zip 安装包,将安装包解压到指定目录。目录结构如下:

(2)我们将分别开启 27030、27031、27032 三个端口,为了方便我们将创建三个批处理程序。分别如下:
start-mongodb-repl-27030.bat
@echo off set basePath=%~dp0 title mongodb 27030 %basePath%inmongod.exe --port 27030 --dbpath %basePath% epls0 --replSet rs0 pause
start-mongodb-repl-27031.bat
@echo off set basePath=%~dp0 title mongodb 27031 %basePath%inmongod.exe --port 27031 --dbpath %basePath% epls1 --replSet rs0 pause
start-mongodb-repl-27032.bat
@echo off set basePath=%~dp0 title mongodb 27032 %basePath%inmongod.exe --port 27032 --dbpath %basePath% epls2 --replSet rs0 pause
上面三个脚本均使用 --replSet rs0 设置复制集名称,复制集名称为 rs0。
(3)批处理文件写好后,再去创建数据目录。分别在 mongodb 安装目录下面创建 repl/s0、repl/s1 和 repl/s2。
(4)去执行步骤2创建的3个批处理文件,启动 mongodb。启动成功后,端口如下:
D:mongodb-v4.0.2-x86in>netstat -ano | findstr 270 TCP 127.0.0.1:5383 127.0.0.1:27030 TIME_WAIT 0 TCP 127.0.0.1:27030 0.0.0.0:0 LISTENING 15512 TCP 127.0.0.1:27031 0.0.0.0:0 LISTENING 10112 TCP 127.0.0.1:27032 0.0.0.0:0 LISTENING 2176
(5)使用 mongo 命令连接到 27030 端口,如下:
D:mongodb-v4.0.2-x86in>mongo --host localhost --port 27030
连接成功后,执行 rs.initiate() 方法来初始化副本集。如下:
> rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "localhost:27030",
"ok" : 1,
"operationTime" : Timestamp(1583329035, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1583329035, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}初始化成功后,使用 rs.add() 方法向复制集添加主机。如下:
rs0:PRIMARY> rs.add("localhost:27031")
{
"ok" : 1,
"operationTime" : Timestamp(1583329109, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1583329109, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
rs0:PRIMARY> rs.add("localhost:27032")
{
"ok" : 1,
"operationTime" : Timestamp(1583329112, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1583329112, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}最后,使用 rs.status() 查看复制集的状态。如下:
rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2020-03-04T13:40:00.574Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1583329197, 1),
"t" : NumberLong(1)
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1583329197, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1583329197, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1583329197, 1),
"t" : NumberLong(1)
}
},
"lastStableCheckpointTimestamp" : Timestamp(1583329157, 1),
"members" : [
{
"_id" : 0,
"name" : "localhost:27030",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 485,
"optime" : {
"ts" : Timestamp(1583329197, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-03-04T13:39:57Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1583329035, 2),
"electionDate" : ISODate("2020-03-04T13:37:15Z"),
"configVersion" : 3,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "localhost:27031",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 91,
"optime" : {
"ts" : Timestamp(1583329197, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1583329197, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-03-04T13:39:57Z"),
"optimeDurableDate" : ISODate("2020-03-04T13:39:57Z"),
"lastHeartbeat" : ISODate("2020-03-04T13:40:00.267Z"),
"lastHeartbeatRecv" : ISODate("2020-03-04T13:39:58.817Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "localhost:27030",
"syncSourceHost" : "localhost:27030",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 3
},
{
"_id" : 2,
"name" : "localhost:27032",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 88,
"optime" : {
"ts" : Timestamp(1583329197, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1583329197, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-03-04T13:39:57Z"),
"optimeDurableDate" : ISODate("2020-03-04T13:39:57Z"),
"lastHeartbeat" : ISODate("2020-03-04T13:40:00.277Z"),
"lastHeartbeatRecv" : ISODate("2020-03-04T13:39:59.499Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "localhost:27031",
"syncSourceHost" : "localhost:27031",
"syncSourceId" : 1,
"infoMessage" : "",
"configVersion" : 3
}
],
"ok" : 1,
"operationTime" : Timestamp(1583329197, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1583329197, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}如果你想在Linux上面搭建复制集,请查看MongoDB主从复制