我一直在运行一个 shell 脚本,它在不同的机器上启动 mongod 实例,初始化它们(第一台机器)并将它们添加到副本集(其他机器)。以下是我运行的摘要:
机器 1 - mongod 并通过运行 rs.initiate() 启动为主
机器 2 - mongod 并联系主要运行 rs.add()
但是,当我添加第二个 mongod 实例时,响应还可以,但是在主服务器上运行 rs.status() 它显示机器 2 处于 STARTUP 状态
{“_id”:1,“名称”:“机器 2”,“健康”:1,“状态”:0,“状态Str”:“STARTUP”,“正常运行时间”:30,“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-06-14T07:07:11.336Z”),“lastHeartbeatRecv”:ISODate(“1970-01- 01T00:00:00Z"),“pingMs”:NumberLong(0),“configVersion”:-2
使用 的进一步调查db.runCommand({getLog:"rs"}
显示以下内容:
“2018-06-14T12:23:54.223+0800 I REPL [replexec-5] 成员机器 2 现在处于 RS_DOWN 状态”
为什么我的机器在第一次添加时处于启动状态?这个 RS_DOWN 是什么?我在两台机器上都使用 MONGO 3.64。我总是在尝试脚本之前删除本地数据库
我发现我的副本集集群出了什么问题。您需要为 提供一个参数
rs.initiate()
,即配置文档。如果您不指定该文档,它将从 /etc/mongod.conf 读取配置,该配置将没有任何副本集的配置。rs.initiate() 的配置如下所示:rs.initiate( { _id: "myReplSet", version: 1, members: [ { _id: 0, host : "mongodb0.example.net:27017" }, { _id: 1, host : "mongodb1.example.net:27017" }, { _id: 2, host : "mongodb2.example.net:27017" } ] } )
但是,如果您事先不知道要添加到集群中的副本集数量也没关系,只需指定第一个副本集,随后的副本集将毫无问题地添加:
rs.initiate( { _id: "myReplSet", version: 1, members: [ { _id: 0, host : "mongodb0.example.net:27017" } ] } )