創(chuàng)新互聯(lián)主營呼中網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā),呼中h5小程序制作搭建,呼中網(wǎng)站營銷推廣歡迎呼中等地區(qū)企業(yè)咨詢
MongoDB復(fù)制集角色類型
MongoDB復(fù)制集角色類型
1、標(biāo)準(zhǔn)節(jié)點(diǎn): 參與primary選舉,當(dāng)自身宕機(jī)或停止服務(wù)會(huì)自動(dòng)讓出primary
2、被動(dòng)節(jié)點(diǎn): 只能成為second 不參與選舉,被設(shè)置為被動(dòng)節(jié)點(diǎn)則不能參與選舉
3、仲裁節(jié)點(diǎn):負(fù)責(zé)投票選舉,不存放數(shù)據(jù),確保標(biāo)準(zhǔn)節(jié)點(diǎn)投票數(shù)不會(huì)相同
用實(shí)驗(yàn)來驗(yàn)證一下標(biāo)準(zhǔn)節(jié)點(diǎn)互相搶占和被動(dòng)節(jié)點(diǎn)不會(huì)搶占以及仲裁節(jié)點(diǎn)不存放數(shù)據(jù)。
利用MongoDB多實(shí)例進(jìn)行實(shí)驗(yàn),yum安裝MongoDB以及開啟多實(shí)例請(qǐng)參考以下
我的另一篇博客:https://blog.51cto.com/13760226/2174032
實(shí)驗(yàn)角色
●標(biāo)準(zhǔn)節(jié)點(diǎn)1:192.168.60.135:27017
●標(biāo)準(zhǔn)節(jié)點(diǎn)2:192.168.60.135:27018
●被動(dòng)節(jié)點(diǎn) :192.168.60.135:27019
●仲裁節(jié)點(diǎn) :192.168.60.135:27020
一、修改配置文件
vim /etc/mongod.conf
systemLog: #日志模塊下修改日志文件路徑
destination: file
logAppend: true
path: /usr/local/mongodb/mongod1.log
(剩下實(shí)例也要修改,例:mongod2.log,mongod3.log,mongod4.log)
storage: #存儲(chǔ)模塊下修改數(shù)據(jù)配置文件
dbPath: /usr/local/mongo1
(同上,例:mongo2,mongo3,mongo4)
net:
port: 27017 每個(gè)實(shí)例端口號(hào)不能相同(例:27018,27019,27020)
bindIp: 0.0.0.0 監(jiān)聽任意地址
直接添加如下兩行,開啟復(fù)制集
replication:
replSetName: repl
二、復(fù)制配置文件,創(chuàng)建各自數(shù)據(jù)存放目錄
cp /etc/mongod.conf /etc/mongod2.conf
cp /etc/mongod.conf /etc/mongod3.conf
cp /etc/mongod.conf /etc/mongod4.conf
mkdir /usr/local/mongo{1,2,3,4} #一次創(chuàng)建4個(gè)數(shù)據(jù)存放目錄(與配置文件的對(duì)應(yīng))
mkdir /usr/local/mongodb #創(chuàng)建日志存放目錄
touch mongod{1,2,3,4}.log #創(chuàng)建實(shí)例對(duì)應(yīng)日志文件
(注意:不要忘記修改復(fù)制的配置文件,端口號(hào)不能相同)
三、開啟多實(shí)例,設(shè)置標(biāo)準(zhǔn),被動(dòng),仲裁節(jié)點(diǎn)
[root@localhost ~]#mongod -f /etc/mongod.conf
[root@localhost ~]#mongod -f /etc/mongod2.conf
[root@localhost ~]#mongod -f /etc/mongod3.conf
[root@localhost ~]#mongod -f /etc/mongod4.conf
[root@localhost mongodb]# netstat -ntap | grep mongod
tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 2280/mongod
tcp 0 0 0.0.0.0:27020 0.0.0.0:* LISTEN 2308/mongod
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 2224/mongod
tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 2252/mongod
1)進(jìn)入其中一個(gè)Mongodb進(jìn)行設(shè)置,本文以27017為例
mongo進(jìn)入數(shù)據(jù)庫,設(shè)置如下
>cfg={"_id":"repl","members":
[{"_id":0,"host":"192.168.60.135:27017","priority":100},
{"_id":1,"host":"192.168.60.135:27018","priority":100},
{"_id":2,"host":"192.168.60.135:27019","priority":0},
{"_id":3,"host":"192.168.60.135:27020","arbiterOnly":true}]}
cfg只是一個(gè)名字,類似于變量。將27017和27018優(yōu)先級(jí)設(shè)置為100,
27019的優(yōu)先級(jí)為0,沒有資格參與選舉,27020設(shè)置為arbite,為仲裁復(fù)制集。
> rs.initiate(cfg) #進(jìn)行初始化
{ #提示如下信息
"ok" : 1,
"operationTime" : Timestamp(1536851525, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1536851525, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
2)查看狀態(tài)
repl:PRIMARY> rs.status()
27017被選為標(biāo)準(zhǔn)節(jié)點(diǎn),27018有選舉權(quán)但是已經(jīng)有標(biāo)準(zhǔn)節(jié)點(diǎn),所以變?yōu)楸粍?dòng)節(jié)點(diǎn),
27019被選為被動(dòng)節(jié)點(diǎn),27020被設(shè)置為仲裁節(jié)點(diǎn)。
四、驗(yàn)證
1)驗(yàn)證標(biāo)準(zhǔn)節(jié)點(diǎn)會(huì)互相搶占
repl:PRIMARY> rs.stepDown() #主動(dòng)放棄主復(fù)制權(quán)
2)驗(yàn)證被動(dòng)節(jié)點(diǎn)不搶占
[root@localhost ~]# mongod -f /etc/mongod.conf --shutdown
killing process with pid: 2224
[root@localhost ~]# mongod -f /etc/mongod2.conf --shutdown
killing process with pid: 2252
關(guān)閉27017和27018的MongoDB
[root@localhost ~]# mongo -port 27019 #進(jìn)入mongodb端口27019
>rs.status()
結(jié)論:當(dāng)兩臺(tái)標(biāo)準(zhǔn)節(jié)點(diǎn)宕機(jī)時(shí),被動(dòng)節(jié)點(diǎn)也不會(huì)頂替成為標(biāo)準(zhǔn)節(jié)點(diǎn),因?yàn)闆]有選舉權(quán)。
3)驗(yàn)證仲裁服務(wù)器不存儲(chǔ)數(shù)據(jù)
開啟MongoDB27017端口
[root@localhost ~]# mongod -f /etc/mongod.conf
mongo #登陸
use list; #創(chuàng)建一個(gè)數(shù)據(jù)庫
db.list.insert({"name":"zhangsan"}) 創(chuàng)建list集合并插入信息
repl:PRIMARY> db.list.find(); 查詢list
{ "_id" : ObjectId("5b9a8ae579c4aae2378a4fd6"), "name" : "zhangsan" }
然后我們切換到27020仲裁服務(wù)器
[root@localhost ~]# mongo -port 27020
rs.slaveOk() #先輸出該命令,不然無法查看
repl:ARBITER> show dbs; #查看數(shù)據(jù)庫
local 0.000GB #只能看見一個(gè)數(shù)據(jù)庫local
結(jié)論:仲裁服務(wù)器只負(fù)責(zé)投票選舉,不參與數(shù)據(jù)存儲(chǔ)