接下来将介绍怎样在 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主从复制