溫馨提示×

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

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

MongoDB中副本集的示例分析

發(fā)布時(shí)間:2021-08-07 10:25:19 來(lái)源:億速云 閱讀:140 作者:小新 欄目:MongoDB數(shù)據(jù)庫(kù)

這篇文章主要介紹了MongoDB中副本集的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

具體如下:

replication set復(fù)制集,
復(fù)制集,多臺(tái)服務(wù)器維護(hù)相同的數(shù)據(jù)副本,提高服務(wù)器的可用性。
MongoDB復(fù)制是將數(shù)據(jù)同步在多個(gè)服務(wù)器的過(guò)程。
復(fù)制提供了數(shù)據(jù)的冗余備份,并在多個(gè)服務(wù)器上存儲(chǔ)數(shù)據(jù)副本,提高了數(shù)據(jù)的可用性, 并可以保證數(shù)據(jù)的安全性。
復(fù)制還允許您從硬件故障和服務(wù)中斷中恢復(fù)數(shù)據(jù)。

設(shè)置過(guò)程:

(1)創(chuàng)建示例

假設(shè)創(chuàng)建三臺(tái),創(chuàng)建三個(gè)實(shí)例目錄和日志目錄:
mkdir /home/m17 /home/m18 /home/m19 /home/mlog
啟動(dòng)三個(gè)示例,端口分別為27017、27018、27019。

./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=rs2 --smallfiles
./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=rs2 --smallfiles
./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=rs2 --smallfiles

說(shuō)明:

參數(shù)--replSet設(shè)置一樣,才能屬于同一個(gè)復(fù)制集
參數(shù)--smallfiles可以節(jié)省空間,提高速度。

然后使用ps aux | grep mongo可以查看到啟動(dòng)起來(lái)的三個(gè)端口。

(2)配置

使用客戶端連接mongo進(jìn)行配置:

[test@localhost bin]$ ./mongo

要管理配置,所以切換到admin上:

>use admin

(配置是json格式)

var rsconf = {
_id:'rs2',
members:[
{"_id":0,host:'192.168.8.172:27017'},
{_id:1,host:'192.168.8.172:27018'},
{_id:2,host:'192.168.8.172:27019'}
]
}

如果沒(méi)有配置ip,使用127.0.0.1

var rsconf = {
_id:'rs2',
members:[
{_id:0,host:'127.0.0.1:27017'},
{_id:1,host:'127.0.0.1:27018'},
{_id:2,host:'127.0.0.1:27019'}
]
}

執(zhí)行后,使用 printjson(rsconf)查看剛才的配置。

然后執(zhí)行初始化:

>rs.initiate(rsconf);
> rs.initiate(rsconf);
{
"ok" : 1,
"operationTime" : Timestamp(1539933041, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1539933041, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
rs2:SECONDARY>

查看節(jié)點(diǎn):

rs.status()

刪除節(jié)點(diǎn):

rs.remove('127.0.0.1:27019')

添加節(jié)點(diǎn):

rs.add('127.0.0.1:27019')

切換節(jié)點(diǎn):

默認(rèn)是在27017端口,即rs2:PRIMARY>狀態(tài),
退出mongo客戶端命令模式,
切換到另一個(gè)端口:

[test@localhost bin]$ ./mongo --port=27018,

即切換到rs2:SECONDARY>狀態(tài)。

測(cè)試:

在主服務(wù)上,創(chuàng)建庫(kù)和集合,

rs2:PRIMARY> use student
switched to db student
rs2:PRIMARY> db.user.insert({uid:1,name:'zhang san'})
WriteResult({ "nInserted" : 1 })
rs2:PRIMARY> db.user.find();
{ "_id" : ObjectId("5bc9889f85a0986431fd2499"), "uid" : 1, "name" : "zhang san" }

去從服務(wù)上查看

show dbs

然后看到有錯(cuò)誤,具體錯(cuò)誤信息是:

...
"errmsg" : "not master and slaveOk=false",
...

是因?yàn)閟lave默認(rèn)不允許讀寫(xiě):

>rs.slaveOk();

然后就可以看到主服務(wù)器創(chuàng)建的庫(kù)和集合了。

同理27019也需要執(zhí)行這個(gè)命令才能自動(dòng)同步和讀寫(xiě)。

當(dāng)主服務(wù)器27017停掉的時(shí)候,
第二個(gè)27018就自動(dòng)變成主服務(wù)器master狀態(tài)。
但是27019需要再次執(zhí)行rs.slaveOk()才能自動(dòng)同步讀寫(xiě)。

shell腳本:

#!/bin/bash
IP=127.0.0.1
NA=rs2
sudo mkdir -p /home/m17 /home/m18 /home/m19 /home/mlog
sudo chmod -R 777 /home/m17 /home/m18 /home/m19 /home/mlog
./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=${NA} --smallfiles
./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=${NA} --smallfiles
./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=${NA} --smallfiles
./mongo <<EOF
use admin
var rsconf = {
_id:'rs2',
members:[
{_id:0,host:'${IP}:27017'},
{_id:1,host:'${IP}:27018'},
{_id:2,host:'${IP}:27019'}
]
}
rs.initiate(rsconf)

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MongoDB中副本集的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向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