溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MongoDB中怎么實(shí)現(xiàn)副本集

發(fā)布時(shí)間:2021-07-16 16:50:58 來源:億速云 閱讀:106 作者:Leah 欄目:關(guān)系型數(shù)據(jù)庫

MongoDB中怎么實(shí)現(xiàn)副本集,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

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個(gè)節(jié)點(diǎn)安裝配置和啟動(dòng)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>},
     ]
}
配置其中一個(gè)節(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、測(cè)試數(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)報(bào)錯(cuò):
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 }

另一個(gè)副本節(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、測(cè)試故障切換
先關(guān)閉主節(jié)點(diǎn):
stoners:PRIMARY> use admin
switched to db admin
stoners:PRIMARY> db.shutdownServer();
server should be down...

其中一個(gè)副本節(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 }

在另一個(gè)副本節(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)在啟動(dòng)關(guān)閉的節(jié)點(diǎn):
[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
啟動(dòng)后自動(dòng)成為副本節(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個(gè)節(jié)點(diǎn)安裝配置和啟動(dòng)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>},
     ]
}
配置其中一個(gè)節(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、測(cè)試數(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)報(bào)錯(cuò):
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 }

另一個(gè)副本節(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、測(cè)試故障切換
先關(guān)閉主節(jié)點(diǎn):
stoners:PRIMARY> use admin
switched to db admin
stoners:PRIMARY> db.shutdownServer();
server should be down...

其中一個(gè)副本節(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 }

在另一個(gè)副本節(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)在啟動(dòng)關(guān)閉的節(jié)點(diǎn):
[root@D2-POMS15 ~]# mongod -f /usr/local/mongodb/mongodb.conf
啟動(dòng)后自動(dòng)成為副本節(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中怎么實(shí)現(xiàn)副本集問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI