Windows上的MongoDB副本集面临一些基本问题

Posted

技术标签:

【中文标题】Windows上的MongoDB副本集面临一些基本问题【英文标题】:MongoDB replica set on windows facing some basic issues 【发布时间】:2018-07-10 08:06:12 【问题描述】:

我在 Windows 10 环境中。我想在 MongoDB 上实现副本集。我遇到了一些问题..

为此,我介绍了几乎许多在 Windows 机器上实现这些东西的教程。

我想创建一个由一个主节点和另一个节点组成的副本集,它将复制数据。

我的结构是这样的:

安装文件夹:C:/Programs Files\MongoDb\Server\3.4\bin\ 数据库文件夹:C:/data/db 日志文件夹:C:/data/log 配置:C:/data/mongod.cfg

我已经用这个命令定义了服务:

sc.exe 创建 MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe\" --service --config=\"C:\data\mongod.cfg\ "" DisplayName="MongoDB" start="auto"

我已经用这个命令启动了服务:

net start mongodb

运行成功。

但是,现在我遇到了复制问题。我设置副本集的做法是:

    在data文件夹下创建三个子文件夹rs1, rs2, rs3,使用命令mkdir \data\rs1 \data\rs1 \data\rs2 实现 Replset 以复制三台服务器。

我的三个启动命令是: 1. 启动mongod --replSet udd --logpath \data\rs1\1.log --dbpath \data\rs1 --port 27017 --smallfiles --oplogSize 64 2. 启动mongod --replSet udd --logpath \data\rs1\2.log --dbpath \data\rs2 --port 27018 --smallfiles --oplogSize 64 3. 启动mongod --replSet udd --logpath \data\rs1\3.log --dbpath \data\rs3 --port 27019 --smallfiles --oplogSize 64

在这些运行的情况下,我可以输入mongo --port 27017;这正确连接到 127.0.0.1:27017/

现在我的问题是之前 mongo shell 提示说 udd:PRIMARY>;但现在改为:udd:OTHER>

请指导我如何继续复制;非常感谢任何帮助。

我的 rs.reconfig(config,"force":true) 将是

    udd:OTHER> config =  _id: "udd", members: [
... _id: 0, host: "127.0.0.1:27017",
... _id: 1, host: "127.0.0.1:27018",
... _id: 2, host: "127.0.0.1:27019"
... ]

        "_id" : "udd",
        "members" : [
                
                        "_id" : 0,
                        "host" : "127.0.0.1:27017"
                ,
                
                        "_id" : 1,
                        "host" : "127.0.0.1:27018"
                ,
                
                        "_id" : 2,
                        "host" : "127.0.0.1:27019"
                
        ]

udd:OTHER> rs.reconfig(config,"force":true)
 "ok" : 1 
udd:OTHER> rs.status()

        "set" : "udd",
        "date" : ISODate("2018-01-31T11:58:15.717Z"),
        "myState" : 2,
        "term" : NumberLong(1),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : 
                "lastCommittedOpTime" : 
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                ,
                "appliedOpTime" : 
                        "ts" : Timestamp(1517381781, 1),
                        "t" : NumberLong(1)
                ,
                "durableOpTime" : 
                        "ts" : Timestamp(1517381781, 1),
                        "t" : NumberLong(1)
                
        ,
        "members" : [
                
                        "_id" : 0,
                        "name" : "127.0.0.1:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1506,
                        "optime" : 
                                "ts" : Timestamp(1517381781, 1),
                                "t" : NumberLong(1)
                        ,
                        "optimeDate" : ISODate("2018-01-31T06:56:21Z"),
                        "configVersion" : 37530,
                        "self" : true
                ,
                
                        "_id" : 1,
                        "name" : "127.0.0.1:27018",
                        "health" : 0,
                        "state" : 8,
                        "stateStr" : "(not reachable/healthy)",
                        "uptime" : 0,
                        "optime" : 
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        ,
                        "optimeDurable" : 
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        ,
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2018-01-31T11:58:15.677Z"),
                        "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "No connection could be made because the target machine actively refused it.",
                        "configVersion" : -1
                ,
                
                        "_id" : 2,
                        "name" : "127.0.0.1:27019",
                        "health" : 0,
                        "state" : 8,
                        "stateStr" : "(not reachable/healthy)",
                        "uptime" : 0,
                        "optime" : 
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        ,
                        "optimeDurable" : 
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        ,
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2018-01-31T11:58:15.670Z"),
                        "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "No connection could be made because the target machine actively refused it.",
                        "configVersion" : -1
                
        ],
        "ok" : 1

udd:SECONDARY>

现在 rs.conf() 将是

udd:SECONDARY> rs.conf()

        "_id" : "udd",
        "version" : 37530,
        "protocolVersion" : NumberLong(1),
        "members" : [
                
                        "_id" : 0,
                        "host" : "127.0.0.1:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : 

                        ,
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                ,
                
                        "_id" : 1,
                        "host" : "127.0.0.1:27018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : 

                        ,
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                ,
                
                        "_id" : 2,
                        "host" : "127.0.0.1:27019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : 

                        ,
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                
        ],
        "settings" : 
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "catchUpTimeoutMillis" : 60000,
                "getLastErrorModes" : 

                ,
                "getLastErrorDefaults" : 
                        "w" : 1,
                        "wtimeout" : 0
                ,
                "replicaSetId" : ObjectId("5a715e56bff9fd66ea55b862")
        

udd:SECONDARY>

【问题讨论】:

奇怪的格式使问题无法阅读。请阅读***.com/help/formatting 并修正错别字。 rs0, rs1, rs2, rs3 乱七八糟的真的很混乱。 你是如何初始化你的副本集的?请显示您的副本集配置。此外,您的输出显示 RepSet 名称为 udd,但从 mongod 开始,您的 repSet 名称为 sfr。你在用你的mongo.cfg 做什么?如果您使用命令行选项开始 mongod?? @N3i1 实际上我正在按照教程步骤进行操作。我只需要 1 个副本集。是的 udd 是 sfr。为了隐藏一些信息,我将 sfr 编辑为 udd @AlexBlex 对此感到非常抱歉。我编辑了这个问题。如果可以,请通过它。 @N3i1 youtube.com/watch?v=okrZdlO9_3Q 【参考方案1】:

清除错误信息:InvalidReplicaSetConfig

所有3个rep mongod都启动了,然后试试:

rs.reconfig(force:true)

db.isMaster()

【讨论】:

当我执行 rs.initiate() 时,它会返回错误消息:已初始化。并指向未在 PRIMARY 上的 OTHER 问题用 rs.conf() 和 rs.status() 结果更新 为什么它会在次要而不是主要? reconfig force 选项将强制重新配置,即使在辅助服务器上也是如此。所以现在你只需要找到哪个是你的主要问题,解决了问题 我解决了。首先,我将为这两个服务器创建服务,然后启动主服务器。它自动转换为主要

以上是关于Windows上的MongoDB副本集面临一些基本问题的主要内容,如果未能解决你的问题,请参考以下文章

创建MongoDB副本集教程

如何从外部访问托管在 kubernetes 集群上的 mongodb 副本集?

MongoDB副本集其他细节

MongoDb 4.2.7 配置复制(副本集replSet)实现主从同步(Windows)

MongoDB4.0 WINDOWS环境下 副本集分片部署

windows版本 MongoDB副本集搭建及开启身份验证