共计 17892 个字符,预计需要花费 45 分钟才能阅读完成。
自动写代码机器人,免费开通
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 : setname ,
members : [
{_id : 0, host : host0},
{_id : 1, host : host1},
{_id : 2, host : host2},
]
}
配置其中一个节点为仲裁的语法:
{
_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 : setname ,
members : [
{_id : 0, host : host0},
{_id : 1, host : host1},
{_id : 2, host : host2},
]
}
配置其中一个节点为仲裁的语法:
{
_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 中怎么实现副本集问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。
向 AI 问一下细节