MongoDB復制集角色類型
MongoDB復制集角色類型
1、標準節(jié)點: 參與primary選舉,當自身宕機或停止服務(wù)會自動讓出primary
2、被動節(jié)點: 只能成為second 不參與選舉,被設(shè)置為被動節(jié)點則不能參與選舉
3、仲裁節(jié)點:負責投票選舉,不存放數(shù)據(jù),確保標準節(jié)點投票數(shù)不會相同
用實驗來驗證一下標準節(jié)點互相搶占和被動節(jié)點不會搶占以及仲裁節(jié)點不存放數(shù)據(jù)。
利用MongoDB多實例進行實驗,yum安裝MongoDB以及開啟多實例請參考以下
我的另一篇博客:https://blog.51cto.com/13760226/2174032
實驗角色
●標準節(jié)點1:192.168.60.135:27017
●標準節(jié)點2:192.168.60.135:27018
●被動節(jié)點 :192.168.60.135:27019
●仲裁節(jié)點 :192.168.60.135:27020
一、修改配置文件
vim /etc/mongod.conf
systemLog: #日志模塊下修改日志文件路徑
destination: file
logAppend: true
path: /usr/local/mongodb/mongod1.log
(剩下實例也要修改,例:mongod2.log,mongod3.log,mongod4.log)
storage: #存儲模塊下修改數(shù)據(jù)配置文件
dbPath: /usr/local/mongo1
(同上,例:mongo2,mongo3,mongo4)
net:
port: 27017 每個實例端口號不能相同(例:27018,27019,27020)
bindIp: 0.0.0.0 監(jiān)聽任意地址
直接添加如下兩行,開啟復制集
replication:
replSetName: repl
二、復制配置文件,創(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個數(shù)據(jù)存放目錄(與配置文件的對應(yīng))
mkdir /usr/local/mongodb #創(chuàng)建日志存放目錄
touch mongod{1,2,3,4}.log #創(chuàng)建實例對應(yīng)日志文件
(注意:不要忘記修改復制的配置文件,端口號不能相同)
三、開啟多實例,設(shè)置標準,被動,仲裁節(jié)點
[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)進入其中一個Mongodb進行設(shè)置,本文以27017為例
mongo進入數(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只是一個名字,類似于變量。將27017和27018優(yōu)先級設(shè)置為100,
27019的優(yōu)先級為0,沒有資格參與選舉,27020設(shè)置為arbite,為仲裁復制集。
> rs.initiate(cfg) #進行初始化
{ #提示如下信息
"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被選為標準節(jié)點,27018有選舉權(quán)但是已經(jīng)有標準節(jié)點,所以變?yōu)楸粍庸?jié)點,
27019被選為被動節(jié)點,27020被設(shè)置為仲裁節(jié)點。
四、驗證
1)驗證標準節(jié)點會互相搶占
repl:PRIMARY> rs.stepDown() #主動放棄主復制權(quán)
2)驗證被動節(jié)點不搶占
[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 #進入mongodb端口27019
>rs.status()
結(jié)論:當兩臺標準節(jié)點宕機時,被動節(jié)點也不會頂替成為標準節(jié)點,因為沒有選舉權(quán)。
3)驗證仲裁服務(wù)器不存儲數(shù)據(jù)
開啟MongoDB27017端口
[root@localhost ~]# mongod -f /etc/mongod.conf
mongo #登陸
use list; #創(chuàng)建一個數(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 #只能看見一個數(shù)據(jù)庫local
結(jié)論:仲裁服務(wù)器只負責投票選舉,不參與數(shù)據(jù)存儲
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。