您好,登錄后才能下訂單哦!
MongoDB復制集角色類型
MongoDB復制集角色類型
1、標準節點: 參與primary選舉,當自身宕機或停止服務會自動讓出primary
2、被動節點: 只能成為second 不參與選舉,被設置為被動節點則不能參與選舉
3、仲裁節點:負責投票選舉,不存放數據,確保標準節點投票數不會相同
用實驗來驗證一下標準節點互相搶占和被動節點不會搶占以及仲裁節點不存放數據。
利用MongoDB多實例進行實驗,yum安裝MongoDB以及開啟多實例請參考以下
我的另一篇博客:https://blog.51cto.com/13760226/2174032
實驗角色
●標準節點1:192.168.60.135:27017
●標準節點2:192.168.60.135:27018
●被動節點 :192.168.60.135:27019
●仲裁節點 :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: #存儲模塊下修改數據配置文件
dbPath: /usr/local/mongo1
(同上,例:mongo2,mongo3,mongo4)
net:
port: 27017 每個實例端口號不能相同(例:27018,27019,27020)
bindIp: 0.0.0.0 監聽任意地址
直接添加如下兩行,開啟復制集
replication:
replSetName: repl
二、復制配置文件,創建各自數據存放目錄
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} #一次創建4個數據存放目錄(與配置文件的對應)
mkdir /usr/local/mongodb #創建日志存放目錄
touch mongod{1,2,3,4}.log #創建實例對應日志文件
(注意:不要忘記修改復制的配置文件,端口號不能相同)
三、開啟多實例,設置標準,被動,仲裁節點
[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進行設置,本文以27017為例
mongo進入數據庫,設置如下
>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優先級設置為100,
27019的優先級為0,沒有資格參與選舉,27020設置為arbite,為仲裁復制集。
> rs.initiate(cfg) #進行初始化
{ #提示如下信息
"ok" : 1,
"operationTime" : Timestamp(1536851525, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1536851525, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
2)查看狀態
repl:PRIMARY> rs.status()
27017被選為標準節點,27018有選舉權但是已經有標準節點,所以變為被動節點,
27019被選為被動節點,27020被設置為仲裁節點。
四、驗證
1)驗證標準節點會互相搶占
repl:PRIMARY> rs.stepDown() #主動放棄主復制權
2)驗證被動節點不搶占
[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
關閉27017和27018的MongoDB
[root@localhost ~]# mongo -port 27019 #進入mongodb端口27019
>rs.status()
結論:當兩臺標準節點宕機時,被動節點也不會頂替成為標準節點,因為沒有選舉權。
3)驗證仲裁服務器不存儲數據
開啟MongoDB27017端口
[root@localhost ~]# mongod -f /etc/mongod.conf
mongo #登陸
use list; #創建一個數據庫
db.list.insert({"name":"zhangsan"}) 創建list集合并插入信息
repl:PRIMARY> db.list.find(); 查詢list
{ "_id" : ObjectId("5b9a8ae579c4aae2378a4fd6"), "name" : "zhangsan" }
然后我們切換到27020仲裁服務器
[root@localhost ~]# mongo -port 27020
rs.slaveOk() #先輸出該命令,不然無法查看
repl:ARBITER> show dbs; #查看數據庫
local 0.000GB #只能看見一個數據庫local
結論:仲裁服務器只負責投票選舉,不參與數據存儲
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。