溫馨提示×

溫馨提示×

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

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

MongoDB復(fù)制集選舉原理及管理詳解

發(fā)布時間:2020-02-28 08:34:28 來源:網(wǎng)絡(luò) 閱讀:1273 作者:明月幽谷 欄目:MongoDB數(shù)據(jù)庫

MongoDB復(fù)制集的節(jié)點(diǎn)是通過選舉產(chǎn)生主節(jié)點(diǎn)的,下面將介紹復(fù)制集節(jié)點(diǎn)間選舉的過程

  • MongoDB復(fù)制的原理

復(fù)制是基于操作日志oplog,相當(dāng)于MySQL中的二進(jìn)制日志,只記錄發(fā)生改變的記錄。復(fù)制是將主節(jié)點(diǎn)的oplog日志同步并應(yīng)用到其他從節(jié)點(diǎn)過程

  • MongoDB選舉的原理

節(jié)點(diǎn)類型分為標(biāo)準(zhǔn)(host)節(jié)點(diǎn) 、被動(passive)節(jié)點(diǎn)和仲裁(arbiter)節(jié)點(diǎn)。

(1)只有標(biāo)準(zhǔn)節(jié)點(diǎn)可能被選舉為主(primary)節(jié)點(diǎn),有選舉權(quán);被動節(jié)點(diǎn)有完整副本,只能作為復(fù)制集保存,不可能成為主節(jié)點(diǎn),沒有選舉權(quán);仲裁節(jié)點(diǎn)不存放數(shù)據(jù),只負(fù)責(zé)投票選舉,不可能成為主節(jié)點(diǎn),不存放數(shù)據(jù),依然沒有選舉權(quán)

(2)標(biāo)準(zhǔn)節(jié)點(diǎn)與被動節(jié)點(diǎn)的區(qū)別:priority值高者是標(biāo)準(zhǔn)節(jié)點(diǎn),低者則為被動節(jié)點(diǎn)

(3)選舉規(guī)則是票數(shù)高者獲勝,priority是優(yōu)先權(quán)為0~1000的值,相當(dāng)于額外增加0~1000的票數(shù)。選舉結(jié)果:票數(shù)高者獲勝;若票數(shù)相同,數(shù)據(jù)新者獲勝

  • MongoDB復(fù)制集節(jié)點(diǎn)間選舉如圖所示

MongoDB復(fù)制集選舉原理及管理詳解

下面通過實(shí)例來演示MongoDB復(fù)制集節(jié)點(diǎn)間的選舉原理

  • 在一臺CentOS7主機(jī)上使用yum在線安裝Mongodb,并創(chuàng)建多實(shí)例,進(jìn)行部署MongoDB復(fù)制集

首先配置網(wǎng)絡(luò)YUM源,baseurl(下載路徑)指定為mongodb官網(wǎng)提供的yum倉庫

vim /etc/yum.repos.d/mongodb.repo

[mongodb-org]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/???????????? #指定獲得下載的路徑

gpgcheck=1???????????????????? #表示對從這個源下載的rpm包進(jìn)行校驗(yàn)

enabled=1?????????????????? #表示啟用這個源。

gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

重新加載yum源,并使用yum命令下載安裝mongodb

yum list

yum -y install mongodb-org

準(zhǔn)備4個實(shí)例,設(shè)置兩個標(biāo)準(zhǔn)節(jié)點(diǎn), 一個被動節(jié)點(diǎn)和一個仲裁節(jié)點(diǎn)???

  • 創(chuàng)建數(shù)據(jù)文件和日志文件存儲路徑,并賦予權(quán)限

    [root@localhost ~]# mkdir -p /data/mongodb{2,3,4}
    [root@localhost ~]# mkdir /data/logs
    [root@localhost ~]# touch /data/logs/mongodb{2,3,4}.log
    [root@localhost ~]# chmod 777 /data/logs/mongodb*
    [root@localhost ~]# ll /data/logs/
    總用量 0
    -rwxrwxrwx. 1 root root 0 9月? 15 22:31 mongodb2.log
    -rwxrwxrwx. 1 root root 0 9月? 15 22:31 mongodb3.log
    -rwxrwxrwx. 1 root root 0 9月? 15 22:31 mongodb4.log

編輯4個MongoDB實(shí)例的配置文件

  • 先編輯yum安裝的默認(rèn)實(shí)例的配置文件/etc/mongod.conf,指定監(jiān)聽IP,端口默認(rèn)為27017,開啟replication參數(shù)配置,replSetName:true(自定義)

[root@localhost ~]# vim /etc/mongod.conf

# mongod.conf

# for documentation of all options, see:
#?? http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
? destination: file
? logAppend: true
? path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
? dbPath: /var/lib/mongo
? journal:
??? enabled: true
#? engine:
#? mmapv1:
#? wiredTiger:

# how the process runs
processManagement:
? fork: true? # fork and run in background
? pidFilePath: /var/run/mongodb/mongod.pid? # location of pidfile
? timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:?

? port: 27017??????????????????? #默認(rèn)端口??????????
? bindIp: 0.0.0.0???????????? #監(jiān)聽任意地址

#security:

#operationProfiling:

replication:?????????????????? #去掉前面的“#”注釋,開啟該參數(shù)設(shè)置
replSetName: true????????? #設(shè)置復(fù)制集名稱

  • 復(fù)制配置文件給其他實(shí)例,并將mongodb2.conf 中的port參數(shù)配置為27018,mongod3.conf中的port參數(shù)配置為27019,mongod4.conf中的port參數(shù)配置為27020。 同樣也將dbpath和logpath參數(shù)修改為對應(yīng)的路徑值

cp? /etc/mongod.conf /etc/mongod2.conf

cp /etc/mongod2.conf /etc/mongod3.conf

cp /etc/mongod2.conf /etc/mongod4.conf

  • 實(shí)例2的配置文件mongodb2.conf 修改

vim /etc/mongod2.conf

systemLog:

? destination: file

? logAppend: true

path: /data/logs/mongodb2.log???

storage:

dbPath: /data/mongodb/mongodb2

? journal:

enabled: true

port: 27018?

bindIp: 0.0.0.0? # Listen to local interface only, comment to listen on all interfaces.

#security:

#operationProfiling:

replication:
replSetName: true

  • 實(shí)例3的配置文件mongodb3.conf 修改

vim /etc/mongod3.conf

systemLog:

? destination: file

? logAppend: true

path: /data/logs/mongodb3.log???

storage:

dbPath: /data/mongodb/mongodb3?

? journal:

enabled: true

port: 27019?

bindIp: 0.0.0.0? # Listen to local interface only, comment to listen on all interfaces.

#security:

#operationProfiling:

replication:
replSetName: true

  • 實(shí)例4的配置文件mongodb4.conf 修改

vim /etc/mongod4.conf

systemLog:

? destination: file

? logAppend: true

path: /data/logs/mongodb4.log

storage:

dbPath: /data/mongodb/mongodb4

? journal:

enabled: true

port: 27020

bindIp: 0.0.0.0? # Listen to local interface only, comment to listen on all interfaces.

#security:

#operationProfiling:

replication:
replSetName: true

啟動mongodb各實(shí)例

[root@localhost ~]# mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 93576
child process started successfully, parent exiting
[root@localhost ~]# mongod -f /etc/mongod2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 93608
child process started successfully, parent exiting
[root@localhost ~]# mongod -f /etc/mongod3.conf
about to fork child process, waiting until server is ready for connections.
forked process: 93636
child process started successfully, parent exiting
[root@localhost ~]# mongod -f /etc/mongod4.conf
about to fork child process, waiting until server is ready for connections.
forked process: 93664
child process started successfully, parent exiting
[root@localhost ~]# netstat -antp | grep mongod??????????????????????? //查看mongodb進(jìn)程狀態(tài)
tcp??????? 0????? 0 0.0.0.0:27019?????????? 0.0.0.0:*?????????????? LISTEN????? 93636/mongod??????
tcp??????? 0????? 0 0.0.0.0:27020?????????? 0.0.0.0:*?????????????? LISTEN????? 93664/mongod??????
tcp??????? 0????? 0 0.0.0.0:27017?????????? 0.0.0.0:*?????????????? LISTEN????? 93576/mongod??????
tcp??????? 0????? 0 0.0.0.0:27018?????????? 0.0.0.0:*?????????????? LISTEN????? 93608/mongod

配置復(fù)制集的優(yōu)先級

  • 登錄默認(rèn)實(shí)例 mongo,配置4個節(jié)點(diǎn) MongoDB 復(fù)制集,設(shè)置兩個標(biāo)準(zhǔn)節(jié)點(diǎn),一個被動節(jié)點(diǎn)和一個仲裁節(jié)點(diǎn),

  • 根據(jù)優(yōu)先級確定節(jié)點(diǎn): 優(yōu)先級為 100的為標(biāo)準(zhǔn)節(jié)點(diǎn),端口號為 27017和27018? ,優(yōu)先級為0 的為被動節(jié)點(diǎn),端口號為27019;仲裁節(jié)點(diǎn)為27020

[root@localhost ~]# mongo
MongoDB shell version v3.6.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.7

> cfg={"_id":"true","members":[{"_id":0,"host":"192.168.195.137:27017","priority":100},???????????????????????

{"_id":1,"host":"192.168.195.137:27018","priority":100},{"_id":2,"host":"192.168.195.137:27019","priority":0},{"_id":3,"host":"192.168.195.137:27020","arbiterOnly":true}]}???????????????????????
{
??? "_id" : "true",
??? "members" : [
??????? {
??????????? "_id" : 0,
??????????? "host" : "192.168.195.137:27017",??????????????? #標(biāo)準(zhǔn)節(jié)點(diǎn)1,優(yōu)先級為100
??????????? "priority" : 100
??????? },
??????? {
??????????? "_id" : 1,
??????????? "host" : "192.168.195.137:27018",?????????????? #標(biāo)準(zhǔn)節(jié)點(diǎn)2,優(yōu)先級為100
??????????? "priority" : 100
??????? },
??????? {
??????????? "_id" : 2,
??????????? "host" : "192.168.195.137:27019",????????????? #被動節(jié)點(diǎn),優(yōu)先級為0
??????????? "priority" : 0
??????? },
??????? {
??????????? "_id" : 3,
??????????? "host" : "192.168.195.137:27020",??????????????? #仲裁節(jié)點(diǎn)
??????????? "arbiterOnly" : true

> rs.initiate(cfg)?????????????????????????????? #初始化配置
{
??? "ok" : 1,
??? "operationTime" : Timestamp(1537077618, 1),
??? "$clusterTime" : {
??????? "clusterTime" : Timestamp(1537077618, 1),
??????? "signature" : {
??????????? "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
??????????? "keyId" : NumberLong(0)
??????? }
??? }

  • 使用命令 rs.isMaster()? 查看各節(jié)點(diǎn)身份

true:PRIMARY> rs.isMaster()
{
??? "hosts" : [
??????? "192.168.195.137:27017",?????????????? #標(biāo)準(zhǔn)節(jié)點(diǎn)
??????? "192.168.195.137:27018"
??? ],
??? "passives" : [
??????? "192.168.195.137:27019"????????????? ? #被動節(jié)點(diǎn)
??? ],
??? "arbiters" : [
??????? "192.168.195.137:27020"????????????? #仲裁節(jié)點(diǎn)
??? ],
??? "setName" : "true",
??? "setVersion" : 1,
??? "ismaster" : true,
??? "secondary" : false,
??? "primary" : "192.168.195.137:27017",
??? "me" : "192.168.195.137:27017",

  • 在主節(jié)點(diǎn)上進(jìn)行增,刪,改。查操作

true:PRIMARY> use kfc
switched to db kfc
true:PRIMARY> db.info.insert({"id":1,"name":"tom"})
WriteResult({ "nInserted" : 1 })
true:PRIMARY> db.info.insert({"id":2,"name":"jack"})
WriteResult({ "nInserted" : 1 })
true:PRIMARY> db.info.find()
{ "_id" : ObjectId("5b9df3ff690f4b20fa330b18"), "id" : 1, "name" : "tom" }
{ "_id" : ObjectId("5b9df40f690f4b20fa330b19"), "id" : 2, "name" : "jack

true:PRIMARY> db.info.update({"id":2},{$set:{"name":"lucy"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
true:PRIMARY> db.info.remove({"id":1})
WriteResult({ "nRemoved" : 1 })

?

  • 查看主節(jié)點(diǎn)的oplog日志記錄所有操作 ,在默認(rèn)數(shù)據(jù)庫 local 中的oplog.rs?? 查看


true:PRIMARY> use local
switched to db local
true:PRIMARY> show tables
me
oplog.rs
replset.election
replset.minvalid
startup_log
system.replset
system.rollback.id
true:PRIMARY> db.oplog.rs.find()?????????????????? #查看日志記錄所有操作????

............?????????????????????????????????????????????????????? # 通過日志記錄,可以找到剛才的操作信息

{ "ts" : Timestamp(1537078271, 2), "t" : NumberLong(1), "h" : NumberLong("-5529983416084904509"), "v" : 2, "op" : "c", "ns" : "kfc.$cmd", "ui" : UUID("2de2277f-df99-4fb2-96ef-164b59dfc768"), "wall" : ISODate("2018-09-16T06:11:11.072Z"), "o" : { "create" : "info", "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "kfc.info" } } }
{ "ts" : Timestamp(1537078271, 3), "t" : NumberLong(1), "h" : NumberLong("-1436300260967761649"), "v" : 2, "op" : "i", "ns" : "kfc.info", "ui" : UUID("2de2277f-df99-4fb2-96ef-164b59dfc768"), "wall" : ISODate("2018-09-16T06:11:11.072Z"), "o" : { "_id" : ObjectId("5b9df3ff690f4b20fa330b18"), "id" : 1, "name" : "tom" } }
{ "ts" : Timestamp(1537078287, 1), "t" : NumberLong(1), "h" : NumberLong("9052955074674132871"), "v" : 2, "op" : "i", "ns" : "kfc.info", "ui" : UUID("2de2277f-df99-4fb2-96ef-164b59dfc768"), "wall" : ISODate("2018-09-16T06:11:27.562Z"), "o" : { "_id" : ObjectId("5b9df40f690f4b20fa330b19"), "id" : 2, "name" : "jack" } }

...............

{ "ts" : Timestamp(1537078543, 1), "t" : NumberLong(1), "h" : NumberLong("-5120962218610090442"), "v" : 2, "op" : "u", "ns" : "kfc.info", "ui" : UUID("2de2277f-df99-4fb2-96ef-164b59dfc768"), "o2" : { "_id" : ObjectId("5b9df40f690f4b20fa330b19") }, "wall" : ISODate("2018-09-16T06:15:43.494Z"), "o" : { "$v" : 1, "$set" : { "name" : "lucy" } } }

模擬標(biāo)準(zhǔn)節(jié)點(diǎn)1故障

  • 如果主節(jié)點(diǎn)出現(xiàn)故障,另一個標(biāo)準(zhǔn)節(jié)點(diǎn)會選舉成為新的主節(jié)點(diǎn)。

[root@localhost ~]# mongod -f /etc/mongod.conf --shutdown??????????? #關(guān)閉主節(jié)點(diǎn)服務(wù)
killing process with pid: 52986
[root@localhost ~]# mongo --port 27018?????????????????????????????? #登錄另一個標(biāo)準(zhǔn)節(jié)點(diǎn)端口 27018

MongoDB shell version v3.6.7
connecting to: mongodb://127.0.0.1:27018/
MongoDB server version: 3.6.7

true:PRIMARY> rs.status()????????????????????????????? #查看狀態(tài),可以看到這臺標(biāo)準(zhǔn)節(jié)點(diǎn)已經(jīng)選舉為主節(jié)點(diǎn)

"members" : [
??????? {
??????????? "_id" : 0,
??????????? "name" : "192.168.195.137:27017",
??????????? "health" : 0,????????????????????????????????????????????? #健康值為 0 ,說明端口27017 已經(jīng)宕機(jī)了
??????????? "state" : 8,
??????????? "stateStr" : "(not reachable/healthy)",
??????????? "uptime" : 0,
??????????? "optime" : {
??????????????? "ts" : Timestamp(0, 0),
??????????????? "t" : NumberLong(-1)
??????????? },
??????????? "optimeDurable" : {
??????????????? "ts" : Timestamp(0, 0),
??????????????? "t" : NumberLong(-1)
??????????? },

{
??????????? "_id" : 1,
??????????? "name" : "192.168.195.137:27018",
??????????? "health" : 1,??????????????
??????????? "state" : 1,
??????????? "stateStr" : "PRIMARY",?????????????????????????? #此時另一臺標(biāo)準(zhǔn)節(jié)點(diǎn)被選舉為主節(jié)點(diǎn),端口為 27018
??????????? "uptime" : 3192,
??????????? "optime" : {
??????????????? "ts" : Timestamp(1537080552, 1),
??????????????? "t" : NumberLong(2)
??????????? },

模擬標(biāo)準(zhǔn)節(jié)點(diǎn)2故障

  • 將標(biāo)準(zhǔn)節(jié)點(diǎn)服務(wù)全部關(guān)閉,查看被動節(jié)點(diǎn)是否會被選舉為主節(jié)點(diǎn)

[root@localhost ~]# mongod -f /etc/mongod2.conf --shutdown???????? #關(guān)閉第二個標(biāo)準(zhǔn)節(jié)點(diǎn)服務(wù)
killing process with pid: 53018
[root@localhost ~]# mongo --port 27019?????????????????????????? #進(jìn)入第三個被動節(jié)點(diǎn)實(shí)例
MongoDB shell version v3.6.7
connecting to: mongodb://127.0.0.1:27019/
MongoDB server version: 3.6.7

true:SECONDARY> rs.status()??????????????????????????? #查看復(fù)制集狀態(tài)信息??????????????????????

..............

"members" : [
??????? {
??????????? "_id" : 0,
??????????? "name" : "192.168.195.137: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)
??????????? },

.................

{
??????????? "_id" : 1,
??????????? "name" : "192.168.195.137:27018",
??????????? "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)
??????????? },

..................

{
??????????? "_id" : 2,
??????????? "name" : "192.168.195.137:27019",
??????????? "health" : 1,
??????????? "state" : 2,
??????????? "stateStr" : "SECONDARY",????????????????????????? #被動節(jié)點(diǎn)并沒有被選舉為主節(jié)點(diǎn),說明被動節(jié)點(diǎn)不可能成為活躍節(jié)點(diǎn)
??????????? "uptime" : 3972,
??????????? "optime" : {
??????????????? "ts" : Timestamp(1537081303, 1),
??????????????? "t" : NumberLong(2)
??????????? },

..................

{
??????? "_id" : 3,
??????? "name" : "192.168.195.137:27020",
??????? "health" : 1,
??????? "state" : 7,
??????? "stateStr" : "ARBITER",
??????? "uptime" : 3722,

另外我們可以通過啟動標(biāo)準(zhǔn)節(jié)點(diǎn)的先后順序,實(shí)現(xiàn)人為指定主節(jié)點(diǎn),默認(rèn)誰先啟動,誰就是主節(jié)點(diǎn)。

允許從節(jié)點(diǎn)讀取數(shù)據(jù)

  • 默認(rèn)MongoDB復(fù)制集的從節(jié)點(diǎn)不能讀取數(shù)據(jù),可以使用rs.slaveOk()命令允許能夠在從節(jié)點(diǎn)讀取數(shù)據(jù)

  • 重新啟動兩個標(biāo)準(zhǔn)節(jié)點(diǎn)

[root@localhost ~]# mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 54685
child process started successfully, parent exiting
[root@localhost ~]# mongod -f /etc/mongod2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 54773
child process started successfully, parent exiting

  • 進(jìn)入復(fù)制集的其中一個從節(jié)點(diǎn),配置其允許讀取數(shù)據(jù)


[root@localhost ~]# mongo --port 27018
MongoDB shell version v3.6.7
connecting to: mongodb://127.0.0.1:27018/
MongoDB server version: 3.6.7

true:SECONDARY> rs.slaveOk()?????????????????????????? #允許默認(rèn)從節(jié)點(diǎn)讀取數(shù)據(jù)
true:SECONDARY> show dbs????????????? #讀取成功
admin?? 0.000GB
config? 0.000GB
kfc???? 0.000GB
local?? 0.000GB

查看復(fù)制狀態(tài)信息

  • 可以使用rs.printReplicationInfo()和rs.printSlaveReplicationInfo()命令來查看復(fù)制集狀態(tài)

true:SECONDARY> rs.printReplicationInfo()???????? #查看日志文件能夠使用的大小 默認(rèn)oplog大小會占用64位實(shí)例5%的可用磁盤空間
configured oplog size:? 990MB
log length start to end: 5033secs (1.4hrs)
oplog first event time:? Sun Sep 16 2018 14:00:18 GMT+0800 (CST)
oplog last event time:?? Sun Sep 16 2018 15:24:11 GMT+0800 (CST)
now:???????????????????? Sun Sep 16 2018 15:24:13 GMT+0800 (CST)
true:SECONDARY> rs.printSlaveReplicationInfo()??????????????? #查看節(jié)點(diǎn)????????
source: 192.168.195.137:27018
??? syncedTo: Sun Sep 16 2018 15:24:21 GMT+0800 (CST)
??? 0 secs (0 hrs) behind the primary
source: 192.168.195.137:27019
??? syncedTo: Sun Sep 16 2018 15:24:21 GMT+0800 (CST)
??? 0 secs (0 hrs) behind the primary

會發(fā)現(xiàn)仲裁節(jié)點(diǎn)并不具備數(shù)據(jù)復(fù)制

更改oplog大小

  • oplog即operations log簡寫,存儲在local數(shù)據(jù)庫中。oplog中新操作會自動替換舊的操作,以保證oplog不會超過預(yù)設(shè)的大小。默認(rèn)情況下,oplog大小會占用64位的實(shí)例5%的可用磁盤

  • 在MongoDB復(fù)制的過程中,主節(jié)點(diǎn)應(yīng)用業(yè)務(wù)操作修改到數(shù)據(jù)庫中,然后記錄這些操作到oplog中,從節(jié)點(diǎn)復(fù)制這些oplog,然后應(yīng)用這些修改。這些操作是異步的。如果從節(jié)點(diǎn)的操作已經(jīng)被主節(jié)點(diǎn)落下很遠(yuǎn),oplog日志在從節(jié)點(diǎn)還沒執(zhí)行完,oplog可能已經(jīng)輪滾一圈了,從節(jié)點(diǎn)跟不上同步,復(fù)制就會停下,從節(jié)點(diǎn)需要重新做完整的同步,為了避免此種情況,盡量保證主節(jié)點(diǎn)的oplog足夠大,能夠存放相當(dāng)長時間的操作記錄

  • (1)關(guān)閉mongodb

true:PRIMARY> use admin
switched to db admin
true:PRIMARY> db.shutdownServer()

  • (2)修改配置文件,注銷掉replication相關(guān)設(shè)置,并修改端口號,目的使其暫時脫離復(fù)制集成為一個獨(dú)立的單體,

vim /etc/mongod.conf

port: 27027

#replication:

# replSetName: true

  • (3)單實(shí)例模式啟動,并將之前的oplog備份一下

mongod -f /etc/mongod.conf

mongodump --port=27028 -d local -c oplog.rs -o /opt/

  • (4)進(jìn)入實(shí)例中,刪除掉原來的oplog.rs,使用db.runCommand命令重新創(chuàng)建oplog.rs,并更改oplog大小

[root@localhost logs]# mongo --port 27027

> use local
> db.oplog.rs.drop()
> db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )

AI