溫馨提示×

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

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

MongoDB復(fù)制集配置步驟

發(fā)布時(shí)間:2020-03-04 19:54:52 來(lái)源:網(wǎng)絡(luò) 閱讀:4476 作者:amount1234 欄目:MongoDB數(shù)據(jù)庫(kù)

1.       配置三個(gè)節(jié)點(diǎn)的配置文件(/etc/28001.conf

 

28002.conf

 

#bind_ip=192.168.20.144

port=28001

logpath=/data/db/mongodb_log/28001.log

logappend=true

pidfilepath=/data/db/mongodb_data28001/28001.pid

oplogSize=500

dbpath=/data/db/mongodb_data28001

replSet=imooc

fork=true

 

 

28002.conf

 

#bind_ip=192.168.20.144

port=28002

logpath=/data/db/mongodb_log/28002.log

logappend=true

pidfilepath=/data/db/mongodb_data28002/28002.pid

oplogSize=500

dbpath=/data/db/28002

replSet=imooc

fork=true

 

 

28003.conf

 

#bind_ip=192.168.20.144

port=28003

logpath=/data/db/mongodb_log/28003.log

logappend=true

pidfilepath=/data/db/mongodb_data28003/28003.pid

oplogSize=500

dbpath=/data/db/28003

replSet=imooc

fork=true

 

 

2.       使用配置文件啟動(dòng)mongod服務(wù)

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/28001.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/28002.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/28003.conf

 

 

3.       登錄到運(yùn)行的monogd機(jī)器

/usr/local/mongodb/bin/mongo 127.0.0.1:28001/admin

 

 

4.       配置復(fù)制集節(jié)點(diǎn)配置文件

config={_id : "imooc",members : [{_id : 1, host : "127.0.0.1:28001"},{_id : 2, host : "127.0.0.1:28002"},{_id : 3, host : "127.0.0.1:28003"}]} 

 

5.       查看節(jié)點(diǎn)成員

config.members

 

6.       設(shè)置3節(jié)點(diǎn)為仲裁節(jié)點(diǎn)

config.members[3] ={"_id":3,"host":"127.0.0.1:28003",arbiterOnly:true}

 

或在主節(jié)點(diǎn)中輸入:

rs.addArb("127.0.0.1:28003")

 

7.       初始化副本集

rs.initiate(config)  (如果初始化一直報(bào)已經(jīng)初始化過(guò),需要將數(shù)據(jù)備份后,重新創(chuàng)建主節(jié)點(diǎn)。)

 

8.       重新加載config參數(shù)(每次修改config之后都要reconfig一次,但reconfig會(huì)使復(fù)制集的連接短暫斷開(kāi),要避免在生產(chǎn)環(huán)境中隨便執(zhí)行,需要維護(hù)時(shí)間窗口才可執(zhí)行)

rs.reconfig(cnf,{force:true})

(運(yùn)行此命令必須在primary節(jié)點(diǎn),如果不是顯示primary,可能是other,則需要加上force的參數(shù))

 

9.       查看復(fù)制集狀態(tài)

rs.status()

 

10. mongodb的前端引用程序是通過(guò)isMaster命令來(lái)區(qū)分主從節(jié)點(diǎn)的(隱藏節(jié)點(diǎn)可以通過(guò)rs.status()看到其信息,而rs.isMaster是沒(méi)法看到的)

rs.isMaster()

 

 

維護(hù):

添加副本,在登錄到主節(jié)點(diǎn)下輸入:

rs.add("ip:port")

 

刪除副本

rs.remove("ip:port")

(前提是這個(gè)ip:port必須是使用了同一個(gè)relpSet名稱(chēng)的mongodb實(shí)例即可)

 

 

導(dǎo)入原有數(shù)據(jù)后,導(dǎo)入命令

mongorestore -h 127.0.0.1:12345 -d syt --directoryperdb /mnt/mongo_data/

其中/mnt/mongo_data為要導(dǎo)入的json文件,后發(fā)現(xiàn)從節(jié)點(diǎn)都變成recovering狀態(tài)。

問(wèn)題原因
出現(xiàn)這個(gè)問(wèn)題的原因主要是secondary節(jié)點(diǎn)同步oplog的速度追不上primary幾點(diǎn)的速度,造成一直處于recovering狀態(tài)。

 

解決辦法:
    首先停掉從節(jié)點(diǎn)mongod進(jìn)程,然后刪除目錄(rs)下面所有的數(shù)據(jù),然后重啟mongod進(jìn)程,這里有一點(diǎn)需要注意,如果有arbitermongod進(jìn)程也需要停掉,啟動(dòng)的時(shí)候,先啟動(dòng)replSetmongod進(jìn)程,再啟動(dòng)arbitermongod進(jìn)程,啟動(dòng)之后,會(huì)自動(dòng)由recovering狀態(tài)切換為startup2狀態(tài),最后切換為secondary狀態(tài)

第二種辦法就是先將recovering節(jié)點(diǎn)下的data目錄刪除,再將primary里的data都拷貝到該節(jié)點(diǎn)下,再重啟就好了!操作前,務(wù)必要停止所有的mongodb數(shù)據(jù)庫(kù)!

 

 

可以看到,在從節(jié)點(diǎn)使用show tables 報(bào)錯(cuò),顯示“此節(jié)點(diǎn)非主節(jié)點(diǎn),從節(jié)點(diǎn)的ok狀態(tài)是失敗的”。如果需要在從節(jié)點(diǎn)讀取數(shù)據(jù)的話,需要將slave做設(shè)置:


rs.slaveOk(true)

再執(zhí)行show tables就可以成功了。

 

 

模擬宕機(jī):

在主節(jié)點(diǎn)執(zhí)行:db.shutdownServer()

出現(xiàn)報(bào)錯(cuò)"errmsg" : "shutdown must run from localhost when running db without auth",

此報(bào)錯(cuò)說(shuō)明在沒(méi)有開(kāi)啟驗(yàn)證的情況下需要到localhost下執(zhí)行,如果啟動(dòng)配置文件里指定了bin_ip,則只能通過(guò)bin_ip去執(zhí)行,這里我們沒(méi)法登錄localhost執(zhí)行,只能通過(guò)kill的方式。

 

通過(guò)查看ps –ef|grep ****查找到對(duì)應(yīng)進(jìn)程號(hào)

使用kill -2 **** (不到萬(wàn)不得已不建議使用kill來(lái)關(guān)閉進(jìn)程實(shí)例,即使是要使用,也要用較溫和的方式kill -2 {SIGINT} 的方式來(lái)關(guān)閉, kill -2 會(huì)把實(shí)例中所有隊(duì)列的進(jìn)程都關(guān)閉后再關(guān)閉實(shí)例)

 

關(guān)閉之后測(cè)試:

查看原先主節(jié)點(diǎn),敲enter已經(jīng)出現(xiàn)報(bào)錯(cuò)

查看原先從節(jié)點(diǎn),在兩個(gè)從節(jié)點(diǎn)中敲enter,可發(fā)現(xiàn)有一個(gè)節(jié)點(diǎn)已經(jīng)變?yōu)?/span>PRIMARY

 

通過(guò)show log rs可以看到節(jié)點(diǎn)的切換情況。

MongoDB Enterprise imooc:PRIMARY> show log rs

2017-10-30T01:53:15.617-0700 I REPL     [replExecDBWorker-0] New replica set config in use: { _id: "imooc", version: 1, protocolVersion: 1, members: [ { _id: 1, host: "127.0.0.1:28001", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 }, { _id: 2, host: "127.0.0.1:28002", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 }, { _id: 3, host: "127.0.0.1:28003", arbiterOnly: false, buildIndexes: true, h


2017-10-30T01:53:15.617-0700 I REPL     [replExecDBWorker-0] transition to STARTUP2

2017-10-30T01:53:15.618-0700 I REPL     [rsSync] transition to RECOVERING

2017-10-30T01:53:15.619-0700 I REPL     [rsSync] transition to SECONDARY

2017-10-30T01:53:15.621-0700 I REPL     [ReplicationExecutor] Member 127.0.0.1:28001 is now in state SECONDARY

2017-10-30T01:53:20.624-0700 I REPL     [ReplicationExecutor] Member 127.0.0.1:28003 is now in state SECONDARY

2017-10-30T01:53:25.625-0700 I REPL     [ReplicationExecutor] Member 127.0.0.1:28001 is now in state PRIMARY

2017-10-30T02:13:53.329-0700 I REPL     [rsBackgroundSync] could not find member to sync from

2017-10-30T02:14:01.816-0700 I REPL     [ReplicationExecutor] transition to PRIMARY

2017-10-30T02:14:03.033-0700 I REPL     [rsSync] transition to primary complete; database writes are now permitted

 

 

 

(待驗(yàn)證)

如果出現(xiàn)有一個(gè)節(jié)點(diǎn)找不到oplog(通過(guò)日志看出),可通過(guò)將主節(jié)點(diǎn)的oplog 復(fù)制到從節(jié)點(diǎn)上

 

1.       備份出來(lái):
./mongodump --port 28011 -d local -c oplog.rs  -o  /opt/backup/0706local/

 

2.       恢復(fù)到另外一臺(tái)單節(jié)點(diǎn)MONGODB服務(wù)器

 

./mongorestore --port 28011 -d temp_local -c shard1_oplog  --dir /opt/backup/0706local/local/oplog.rs.bson

 

如果恢復(fù)時(shí)出現(xiàn)報(bào)錯(cuò)Failed: error connecting to db server: no reachable servers

…………….

…………..

 

 

如果出現(xiàn)有一個(gè)節(jié)點(diǎn)有問(wèn)題,刪除monogd.lock 在啟動(dòng)時(shí)加上—repair,再啟動(dòng)還是啟動(dòng)不了,而且只是作為一個(gè)不存儲(chǔ)數(shù)據(jù)的仲裁節(jié)點(diǎn)的話,最簡(jiǎn)單粗暴的方法是通過(guò)將節(jié)點(diǎn)下的data數(shù)據(jù)都刪除,然后再重啟,則可啟動(dòng)成功。

 


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

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

AI