如何设置有效的 mongo 副本集
How to setup a valid mongo replicaset
我想研究一个场景,有多个MongoDB副本模式,但在特殊情况下,只有一个工作。我的配置如下。
我在 EC2 实例上有一个 MongoDB 容器,我的命令是
sudo docker run \
--name mongo \
-v /home/core/mongo-files/data:/data/db \
-p 27018:27017 -d mongo:3.2.1 \
--smallfiles \
--replSet "rs0"
然后我有 2 个使用此数据库的 Nodejs 开发的应用程序。他们使用此连接字符串连接:
uri: 'mongodb://192.168.0.100:27018/testmongo?replicaSet=rs0'
不幸的是,我的一个应用程序运行良好,但其他应用程序却不行。尝试连接数据库时的错误消息是
MongoDB connection error: MongoError: no valid replicaset members
found
我通过 运行 这个命令 rs.slaveOk()
、rs.status()
检查状态然后我有这个
rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2016-09-19T11:50:59.947Z"),
"myState" : 1,
"term" : NumberLong(2),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "02aaebd39d4b:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1194663,
"optime" : {
"ts" : Timestamp(1474285564, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2016-09-19T11:46:04Z"),
"electionTime" : Timestamp(1473091196, 1),
"electionDate" : ISODate("2016-09-05T15:59:56Z"),
"configVersion" : 1,
"self" : true
}
],
"ok" : 1
}
我的场景设置是否正确?如果不正确,如何修改?
也许重新开始,有 3 个阶段 来启动副本
启动 mongod 实例作为副本
mongod --port 27018 --replSet rs0 --dbpath /home/core/mongo-files/data:/data/db1 --logpath your/log/path --smallfiles --fork --logappend
mongod --port 27017 --replSet rs0 --dbpath /home/core/mongo-files/data:/data/db2 --logpath your/log/path --smallfiles --fork --logappend
连接到 mongodb 并启动副本并将包含的 mongod 定义为副本
rs.initiate(
{
_id: "rs0",
members: [
{ _id: 0, host : "Your.Machine's.LocalHost:27017" },
{ _id: 1, host : "Your.Machine's.LocalHost:27018" }
]
}
)
实际使用以下命令启动副本。
rs.initiate(rs0)
我想研究一个场景,有多个MongoDB副本模式,但在特殊情况下,只有一个工作。我的配置如下。
我在 EC2 实例上有一个 MongoDB 容器,我的命令是
sudo docker run \
--name mongo \
-v /home/core/mongo-files/data:/data/db \
-p 27018:27017 -d mongo:3.2.1 \
--smallfiles \
--replSet "rs0"
然后我有 2 个使用此数据库的 Nodejs 开发的应用程序。他们使用此连接字符串连接:
uri: 'mongodb://192.168.0.100:27018/testmongo?replicaSet=rs0'
不幸的是,我的一个应用程序运行良好,但其他应用程序却不行。尝试连接数据库时的错误消息是
MongoDB connection error: MongoError: no valid replicaset members found
我通过 运行 这个命令 rs.slaveOk()
、rs.status()
检查状态然后我有这个
rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2016-09-19T11:50:59.947Z"),
"myState" : 1,
"term" : NumberLong(2),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "02aaebd39d4b:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1194663,
"optime" : {
"ts" : Timestamp(1474285564, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2016-09-19T11:46:04Z"),
"electionTime" : Timestamp(1473091196, 1),
"electionDate" : ISODate("2016-09-05T15:59:56Z"),
"configVersion" : 1,
"self" : true
}
],
"ok" : 1
}
我的场景设置是否正确?如果不正确,如何修改?
也许重新开始,有 3 个阶段 来启动副本
启动 mongod 实例作为副本
mongod --port 27018 --replSet rs0 --dbpath /home/core/mongo-files/data:/data/db1 --logpath your/log/path --smallfiles --fork --logappend mongod --port 27017 --replSet rs0 --dbpath /home/core/mongo-files/data:/data/db2 --logpath your/log/path --smallfiles --fork --logappend
连接到 mongodb 并启动副本并将包含的 mongod 定义为副本
rs.initiate( { _id: "rs0", members: [ { _id: 0, host : "Your.Machine's.LocalHost:27017" }, { _id: 1, host : "Your.Machine's.LocalHost:27018" } ] } )
实际使用以下命令启动副本。
rs.initiate(rs0)