千家信息网

MongoDB中怎么实现副本集

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,MongoDB中怎么实现副本集,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、环境节点IP操作系统MongoDB数据节点110.1
千家信息网最后更新 2025年11月08日MongoDB中怎么实现副本集

MongoDB中怎么实现副本集,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1、环境

节点IP操作系统MongoDB
数据节点110.163.91.15RHLE6.5_x64mongodb-linux-x86_64-rhel62-3.4.7.tgz
数据节点210.163.91.16RHLE6.5_x64mongodb-linux-x86_64-rhel62-3.4.7.tgz
数据节点310.163.91.17RHLE6.5_x64mongodb-linux-x86_64-rhel62-3.4.7.tgz



2、分别在3个节点安装配置和启动MongoDB
[root@D2-POMS15 ~]# rpm -qa | grep openssl
openssl098e-0.9.8e-17.el6_2.2.x86_64
openssl-1.0.1e-15.el6.x86_64
[root@D2-POMS15 ~]# mkdir /usr/local/mongodb
[root@D2-POMS15 ~]# tar -xvzf mongodb-linux-x86_64-rhel62-3.4.7.tgz
[root@D2-POMS15 ~]# mv mongodb-linux-x86_64-rhel62-3.4.7/* /usr/local/mongodb/
[root@D2-POMS15 ~]# vim .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH=$PATH:/usr/local/mongodb/bin/
export PATH
[root@D2-POMS15 ~]# . .bash_profile
[root@D2-POMS15 ~]# mkdir /usr/local/mongodb/db
[root@D2-POMS15 ~]# mkdir /usr/local/mongodb/log
[root@D2-POMS15 ~]# touch /usr/local/mongodb/log/mongodb.log
[root@D2-POMS15 ~]# vim /usr/local/mongodb/mongodb.conf
dbpath=/usr/local/mongodb/db
logpath=/usr/local/mongodb/log/mongodb.log
logappend=true
noauth=true
port=27017
fork=true
replSet=stoners
[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 11580
child process started successfully, parent exiting
[root@D2-POMS15 ~]# mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
Welcome to the MongoDB shell.

[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
[root@D2-POMS16 ~]# mongod -f /usr/local/mongodb/mongodb.conf
[root@D2-POMS17 ~]# mongod -f /usr/local/mongodb/mongodb.conf


3、在任一节点进行副本集配置
初始化副本集配置。
语法:
{
_id : ,
members : [
{_id : 0, host : },
{_id : 1, host : },
{_id : 2, host : },
]
}
配置其中一个节点为仲裁的语法:
{
_id : "my_replica_set",
members : [
{_id : 0, host : "rs1.example.net:27017"},
{_id : 1, host : "rs2.example.net:27017"},
{_id : 2, host : "rs3.example.net", arbiterOnly: true},
]
}

> rs.initiate({_id:"stoners",members:[{_id:0,host:"10.163.97.15:27017"}]})
{ "ok" : 1 }
stoners:SECONDARY> rs.conf()
{
"_id" : "stoners",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "10.163.97.15:27017",
"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("5996b49a33625594149428f2")
}
}

添加节点:
stoners:PRIMARY> rs.add("10.163.97.16")
{ "ok" : 1 }
stoners:PRIMARY> rs.add("10.163.97.17")
{ "ok" : 1 }

查看状态:
stoners:PRIMARY> rs.status()
{
"set" : "stoners",
"date" : ISODate("2017-08-18T09:49:18.307Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.163.97.15:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 144,
"optime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-08-18T09:49:15Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1503049643, 2),
"electionDate" : ISODate("2017-08-18T09:47:23Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 1,
"name" : "10.163.97.16:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 86,
"optime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-08-18T09:49:15Z"),
"optimeDurableDate" : ISODate("2017-08-18T09:49:15Z"),
"lastHeartbeat" : ISODate("2017-08-18T09:49:17.787Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T09:49:16.774Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.163.97.15:27017",
"configVersion" : 3
},
{
"_id" : 2,
"name" : "10.163.97.17:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 52,
"optime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-08-18T09:49:15Z"),
"optimeDurableDate" : ISODate("2017-08-18T09:49:15Z"),
"lastHeartbeat" : ISODate("2017-08-18T09:49:17.787Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T09:49:16.883Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.163.97.15:27017",
"configVersion" : 3
}
],
"ok" : 1
}


4、测试数据写入
主节点写入数据:
stoners:PRIMARY> use hr
switched to db hr
stoners:PRIMARY> db.emp.insert({"num":1})
WriteResult({ "nInserted" : 1 })
stoners:PRIMARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }

直接查询副本节点报错:
stoners:SECONDARY> use hr
switched to db hr
stoners:SECONDARY> db.emp.find();
Error: error: {
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk"
}

设置副本节点可读:
stoners:SECONDARY> db.getMongo().setSlaveOk();
stoners:SECONDARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }

另一个副本节点:
stoners:SECONDARY> db.getMongo().setSlaveOk();
stoners:SECONDARY> use hr
switched to db hr
stoners:SECONDARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }


5、测试故障切换
先关闭主节点:
stoners:PRIMARY> use admin
switched to db admin
stoners:PRIMARY> db.shutdownServer();
server should be down...

其中一个副本节点变为了主节点:
stoners:SECONDARY>
stoners:PRIMARY>
stoners:PRIMARY> rs.status()
{
"set" : "stoners",
"date" : ISODate("2017-08-18T10:03:49.050Z"),
"myState" : 1,
"term" : NumberLong(2),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"appliedOpTime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"durableOpTime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.163.97.15:27017",
"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("2017-08-18T10:03:47.314Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T10:01:03.792Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "Connection refused",
"configVersion" : -1
},
{
"_id" : 1,
"name" : "10.163.97.16:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 929,
"optime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:03:44Z"),
"electionTime" : Timestamp(1503050473, 1),
"electionDate" : ISODate("2017-08-18T10:01:13Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 2,
"name" : "10.163.97.17:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 845,
"optime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:03:44Z"),
"optimeDurableDate" : ISODate("2017-08-18T10:03:44Z"),
"lastHeartbeat" : ISODate("2017-08-18T10:03:47.252Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T10:03:47.998Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.163.97.16:27017",
"configVersion" : 3
}
],
"ok" : 1
}

在主节点插入数据:
stoners:PRIMARY> use hr
switched to db hr
stoners:PRIMARY> db.emp.insert({"num":2})
WriteResult({ "nInserted" : 1 })
stoners:PRIMARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }
{ "_id" : ObjectId("5996bbcb5945237d11f3052d"), "num" : 2 }

在另一个副本节点查看:
stoners:SECONDARY> use hr
switched to db hr
stoners:SECONDARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }
{ "_id" : ObjectId("5996bbcb5945237d11f3052d"), "num" : 2 }

现在启动关闭的节点:
[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
启动后自动成为副本节点:
stoners:SECONDARY> rs.status()
{
"set" : "stoners",
"date" : ISODate("2017-08-18T10:08:25.401Z"),
"myState" : 2,
"term" : NumberLong(2),
"syncingTo" : "10.163.97.17:27017",
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"appliedOpTime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"durableOpTime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.163.97.15:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 49,
"optime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:09:34Z"),
"syncingTo" : "10.163.97.17:27017",
"configVersion" : 3,
"self" : true
},
{
"_id" : 1,
"name" : "10.163.97.16:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 48,
"optime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:09:34Z"),
"optimeDurableDate" : ISODate("2017-08-18T10:09:34Z"),
"lastHeartbeat" : ISODate("2017-08-18T10:08:24.973Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T10:08:23.753Z"),
"pingMs" : NumberLong(0),
"electionTime" : Timestamp(1503050473, 1),
"electionDate" : ISODate("2017-08-18T10:01:13Z"),
"configVersion" : 3
},
{
"_id" : 2,
"name" : "10.163.97.17:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 48,
"optime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:09:34Z"),
"optimeDurableDate" : ISODate("2017-08-18T10:09:34Z"),
"lastHeartbeat" : ISODate("2017-08-18T10:08:24.973Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T10:08:23.520Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.163.97.16:27017",
"configVersion" : 3
}
],
"ok" : 1
}

数据也同步过来了。
stoners:SECONDARY> db.getMongo().setSlaveOk();
stoners:SECONDARY> use hr
switched to db hr
stoners:SECONDARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }
{ "_id" : ObjectId("5996bbcb5945237d11f3052d"), "num" : 2 }

2、分别在3个节点安装配置和启动MongoDB
[root@D2-POMS15 ~]# rpm -qa | grep openssl
openssl098e-0.9.8e-17.el6_2.2.x86_64
openssl-1.0.1e-15.el6.x86_64
[root@D2-POMS15 ~]# mkdir /usr/local/mongodb
[root@D2-POMS15 ~]# tar -xvzf mongodb-linux-x86_64-rhel62-3.4.7.tgz
[root@D2-POMS15 ~]# mv mongodb-linux-x86_64-rhel62-3.4.7/* /usr/local/mongodb/
[root@D2-POMS15 ~]# vim .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH=$PATH:/usr/local/mongodb/bin/
export PATH
[root@D2-POMS15 ~]# . .bash_profile
[root@D2-POMS15 ~]# mkdir /usr/local/mongodb/db
[root@D2-POMS15 ~]# mkdir /usr/local/mongodb/log
[root@D2-POMS15 ~]# touch /usr/local/mongodb/log/mongodb.log
[root@D2-POMS15 ~]# vim /usr/local/mongodb/mongodb.conf
dbpath=/usr/local/mongodb/db
logpath=/usr/local/mongodb/log/mongodb.log
logappend=true
noauth=true
port=27017
fork=true
replSet=stoners
[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 11580
child process started successfully, parent exiting
[root@D2-POMS15 ~]# mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
Welcome to the MongoDB shell.

[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
[root@D2-POMS16 ~]# mongod -f /usr/local/mongodb/mongodb.conf
[root@D2-POMS17 ~]# mongod -f /usr/local/mongodb/mongodb.conf


3、在任一节点进行副本集配置
初始化副本集配置。
语法:
{
_id : ,
members : [
{_id : 0, host : },
{_id : 1, host : },
{_id : 2, host : },
]
}
配置其中一个节点为仲裁的语法:
{
_id : "my_replica_set",
members : [
{_id : 0, host : "rs1.example.net:27017"},
{_id : 1, host : "rs2.example.net:27017"},
{_id : 2, host : "rs3.example.net", arbiterOnly: true},
]
}

> rs.initiate({_id:"stoners",members:[{_id:0,host:"10.163.97.15:27017"}]})
{ "ok" : 1 }
stoners:SECONDARY> rs.conf()
{
"_id" : "stoners",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "10.163.97.15:27017",
"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("5996b49a33625594149428f2")
}
}

添加节点:
stoners:PRIMARY> rs.add("10.163.97.16")
{ "ok" : 1 }
stoners:PRIMARY> rs.add("10.163.97.17")
{ "ok" : 1 }

查看状态:
stoners:PRIMARY> rs.status()
{
"set" : "stoners",
"date" : ISODate("2017-08-18T09:49:18.307Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.163.97.15:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 144,
"optime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-08-18T09:49:15Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1503049643, 2),
"electionDate" : ISODate("2017-08-18T09:47:23Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 1,
"name" : "10.163.97.16:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 86,
"optime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-08-18T09:49:15Z"),
"optimeDurableDate" : ISODate("2017-08-18T09:49:15Z"),
"lastHeartbeat" : ISODate("2017-08-18T09:49:17.787Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T09:49:16.774Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.163.97.15:27017",
"configVersion" : 3
},
{
"_id" : 2,
"name" : "10.163.97.17:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 52,
"optime" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1503049755, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-08-18T09:49:15Z"),
"optimeDurableDate" : ISODate("2017-08-18T09:49:15Z"),
"lastHeartbeat" : ISODate("2017-08-18T09:49:17.787Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T09:49:16.883Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.163.97.15:27017",
"configVersion" : 3
}
],
"ok" : 1
}


4、测试数据写入
主节点写入数据:
stoners:PRIMARY> use hr
switched to db hr
stoners:PRIMARY> db.emp.insert({"num":1})
WriteResult({ "nInserted" : 1 })
stoners:PRIMARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }

直接查询副本节点报错:
stoners:SECONDARY> use hr
switched to db hr
stoners:SECONDARY> db.emp.find();
Error: error: {
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk"
}

设置副本节点可读:
stoners:SECONDARY> db.getMongo().setSlaveOk();
stoners:SECONDARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }

另一个副本节点:
stoners:SECONDARY> db.getMongo().setSlaveOk();
stoners:SECONDARY> use hr
switched to db hr
stoners:SECONDARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }


5、测试故障切换
先关闭主节点:
stoners:PRIMARY> use admin
switched to db admin
stoners:PRIMARY> db.shutdownServer();
server should be down...

其中一个副本节点变为了主节点:
stoners:SECONDARY>
stoners:PRIMARY>
stoners:PRIMARY> rs.status()
{
"set" : "stoners",
"date" : ISODate("2017-08-18T10:03:49.050Z"),
"myState" : 1,
"term" : NumberLong(2),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"appliedOpTime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"durableOpTime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.163.97.15:27017",
"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("2017-08-18T10:03:47.314Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T10:01:03.792Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "Connection refused",
"configVersion" : -1
},
{
"_id" : 1,
"name" : "10.163.97.16:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 929,
"optime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:03:44Z"),
"electionTime" : Timestamp(1503050473, 1),
"electionDate" : ISODate("2017-08-18T10:01:13Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 2,
"name" : "10.163.97.17:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 845,
"optime" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1503050624, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:03:44Z"),
"optimeDurableDate" : ISODate("2017-08-18T10:03:44Z"),
"lastHeartbeat" : ISODate("2017-08-18T10:03:47.252Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T10:03:47.998Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.163.97.16:27017",
"configVersion" : 3
}
],
"ok" : 1
}

在主节点插入数据:
stoners:PRIMARY> use hr
switched to db hr
stoners:PRIMARY> db.emp.insert({"num":2})
WriteResult({ "nInserted" : 1 })
stoners:PRIMARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }
{ "_id" : ObjectId("5996bbcb5945237d11f3052d"), "num" : 2 }

在另一个副本节点查看:
stoners:SECONDARY> use hr
switched to db hr
stoners:SECONDARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }
{ "_id" : ObjectId("5996bbcb5945237d11f3052d"), "num" : 2 }

现在启动关闭的节点:
[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
启动后自动成为副本节点:
stoners:SECONDARY> rs.status()
{
"set" : "stoners",
"date" : ISODate("2017-08-18T10:08:25.401Z"),
"myState" : 2,
"term" : NumberLong(2),
"syncingTo" : "10.163.97.17:27017",
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"appliedOpTime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"durableOpTime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.163.97.15:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 49,
"optime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:09:34Z"),
"syncingTo" : "10.163.97.17:27017",
"configVersion" : 3,
"self" : true
},
{
"_id" : 1,
"name" : "10.163.97.16:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 48,
"optime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:09:34Z"),
"optimeDurableDate" : ISODate("2017-08-18T10:09:34Z"),
"lastHeartbeat" : ISODate("2017-08-18T10:08:24.973Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T10:08:23.753Z"),
"pingMs" : NumberLong(0),
"electionTime" : Timestamp(1503050473, 1),
"electionDate" : ISODate("2017-08-18T10:01:13Z"),
"configVersion" : 3
},
{
"_id" : 2,
"name" : "10.163.97.17:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 48,
"optime" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1503050974, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2017-08-18T10:09:34Z"),
"optimeDurableDate" : ISODate("2017-08-18T10:09:34Z"),
"lastHeartbeat" : ISODate("2017-08-18T10:08:24.973Z"),
"lastHeartbeatRecv" : ISODate("2017-08-18T10:08:23.520Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.163.97.16:27017",
"configVersion" : 3
}
],
"ok" : 1
}

数据也同步过来了。
stoners:SECONDARY> db.getMongo().setSlaveOk();
stoners:SECONDARY> use hr
switched to db hr
stoners:SECONDARY> db.emp.find();
{ "_id" : ObjectId("5996b96ca4ca3f4911a83ae8"), "num" : 1 }
{ "_id" : ObjectId("5996bbcb5945237d11f3052d"), "num" : 2 }

关于MongoDB中怎么实现副本集问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

节点 副本 数据 配置 语法 测试 问题 故障 更多 状态 任一 仲裁 切换 同步 帮助 查询 解答 易行 操作系统 简单易行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 多媒体数据库的相关技术 互联网科技文献综述 北京网络技术服务是什么 潮州汽车软件开发 广州附近有什么学软件开发的 乔丹数据库考试 12306数据库结构猜想 计算机网络技术教程胡伏湘 服务器虚拟化安全软件 郓城软件开发有限公司电话 苏州学习软件开发价格 软件开发的产品生产怎么写 企业单位网络安全培训总结 网页没有图片保存到数据库吗 汽车总线通信网络技术 软件开发与运营企业 灵井一中小学网络安全大赛 山东安卓软件开发公司 剑三服务器断开 我的世界联机建筑服务器 济南奇贝多软件开发有限公司 pak是什么数据库的数据文件 网络安全你我他绘画 计算机网络技术教程胡伏湘 数据库数据类型 sql语句 南宁市中本网络技术有限公司 win11服务器未响应怎么修复 软件开发助理操作手册 天津联想服务器虚拟化定制云空间 数据库四个表查询
0