共計 17892 個字符,預(yù)計需要花費(fèi) 45 分鐘才能閱讀完成。
自動寫代碼機(jī)器人,免費(fèi)開通
MongoDB 中怎么實現(xiàn)副本集,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1、環(huán)境
節(jié)點(diǎn) IP 操作系統(tǒng) MongoDB 數(shù)據(jù)節(jié)點(diǎn) 110.163.91.15RHLE6.5_x64mongodb-linux-x86_64-rhel62-3.4.7.tgz 數(shù)據(jù)節(jié)點(diǎn) 210.163.91.16RHLE6.5_x64mongodb-linux-x86_64-rhel62-3.4.7.tgz 數(shù)據(jù)節(jié)點(diǎn) 310.163.91.17RHLE6.5_x64mongodb-linux-x86_64-rhel62-3.4.7.tgz
2、分別在 3 個節(jié)點(diǎn)安裝配置和啟動 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、在任一節(jié)點(diǎn)進(jìn)行副本集配置
初始化副本集配置。
語法:
{
_id : setname ,
members : [
{_id : 0, host : host0},
{_id : 1, host : host1},
{_id : 2, host : host2},
]
}
配置其中一個節(jié)點(diǎn)為仲裁的語法:
{
_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)
}
}
添加節(jié)點(diǎn):
stoners:PRIMARY rs.add(10.163.97.16)
{ok : 1}
stoners:PRIMARY rs.add(10.163.97.17)
{ok : 1}
查看狀態(tài):
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、測試數(shù)據(jù)寫入
主節(jié)點(diǎn)寫入數(shù)據(jù):
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 }
直接查詢副本節(jié)點(diǎn)報錯:
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
}
設(shè)置副本節(jié)點(diǎn)可讀:
stoners:SECONDARY db.getMongo().setSlaveOk();
stoners:SECONDARY db.emp.find();
{_id : ObjectId( 5996b96ca4ca3f4911a83ae8), num : 1 }
另一個副本節(jié)點(diǎn):
stoners:SECONDARY db.getMongo().setSlaveOk();
stoners:SECONDARY use hr
switched to db hr
stoners:SECONDARY db.emp.find();
{_id : ObjectId( 5996b96ca4ca3f4911a83ae8), num : 1 }
5、測試故障切換
先關(guān)閉主節(jié)點(diǎn):
stoners:PRIMARY use admin
switched to db admin
stoners:PRIMARY db.shutdownServer();
server should be down…
其中一個副本節(jié)點(diǎn)變?yōu)榱酥鞴?jié)點(diǎn):
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
}
在主節(jié)點(diǎn)插入數(shù)據(jù):
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 }
在另一個副本節(jié)點(diǎn)查看:
stoners:SECONDARY use hr
switched to db hr
stoners:SECONDARY db.emp.find();
{_id : ObjectId( 5996b96ca4ca3f4911a83ae8), num : 1 }
{_id : ObjectId( 5996bbcb5945237d11f3052d), num : 2 }
現(xiàn)在啟動關(guān)閉的節(jié)點(diǎn):
[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
啟動后自動成為副本節(jié)點(diǎn):
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
}
數(shù)據(jù)也同步過來了。
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 個節(jié)點(diǎn)安裝配置和啟動 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、在任一節(jié)點(diǎn)進(jìn)行副本集配置
初始化副本集配置。
語法:
{
_id : setname ,
members : [
{_id : 0, host : host0},
{_id : 1, host : host1},
{_id : 2, host : host2},
]
}
配置其中一個節(jié)點(diǎn)為仲裁的語法:
{
_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)
}
}
添加節(jié)點(diǎn):
stoners:PRIMARY rs.add(10.163.97.16)
{ok : 1}
stoners:PRIMARY rs.add(10.163.97.17)
{ok : 1}
查看狀態(tài):
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、測試數(shù)據(jù)寫入
主節(jié)點(diǎn)寫入數(shù)據(jù):
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 }
直接查詢副本節(jié)點(diǎn)報錯:
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
}
設(shè)置副本節(jié)點(diǎn)可讀:
stoners:SECONDARY db.getMongo().setSlaveOk();
stoners:SECONDARY db.emp.find();
{_id : ObjectId( 5996b96ca4ca3f4911a83ae8), num : 1 }
另一個副本節(jié)點(diǎn):
stoners:SECONDARY db.getMongo().setSlaveOk();
stoners:SECONDARY use hr
switched to db hr
stoners:SECONDARY db.emp.find();
{_id : ObjectId( 5996b96ca4ca3f4911a83ae8), num : 1 }
5、測試故障切換
先關(guān)閉主節(jié)點(diǎn):
stoners:PRIMARY use admin
switched to db admin
stoners:PRIMARY db.shutdownServer();
server should be down…
其中一個副本節(jié)點(diǎn)變?yōu)榱酥鞴?jié)點(diǎn):
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
}
在主節(jié)點(diǎn)插入數(shù)據(jù):
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 }
在另一個副本節(jié)點(diǎn)查看:
stoners:SECONDARY use hr
switched to db hr
stoners:SECONDARY db.emp.find();
{_id : ObjectId( 5996b96ca4ca3f4911a83ae8), num : 1 }
{_id : ObjectId( 5996bbcb5945237d11f3052d), num : 2 }
現(xiàn)在啟動關(guān)閉的節(jié)點(diǎn):
[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
啟動后自動成為副本節(jié)點(diǎn):
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
}
數(shù)據(jù)也同步過來了。
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 }
關(guān)于 MongoDB 中怎么實現(xiàn)副本集問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注丸趣 TV 行業(yè)資訊頻道了解更多相關(guān)知識。
向 AI 問一下細(xì)節(jié)