MongoDB 主從和Replica Set


目前主要的MongoDB高可用架構包含:

  • 主從架構

  • Replica set副本集方式

  • sharding分片

本文不討論sharding,在另一篇博客中單獨描述了sharding的架構和搭建方式,參考:MongoDB Sharding分片配置

一、主從架構

https://docs.mongodb.com/v3.6/core/master-slave/index.html

Master配置文件:
dbpath = /home/wang/mongodbDATA/master
port = 27017
bind_ip = 192.168.1.100 --3.6開始mongodb默認bind本地localhost
master = true
Slave配置文件:
dbpath = /home/wang/mongodbDATA/slave
port = 27017
bind_ip = 192.168.1.101
source = 192.168.1.100:27017
slave = true
這樣主從就搭建完畢了,很簡單。你可以通過剪切DATA文件夾來初始化,或者直接不初始化,mongo從庫會自動從主庫拉取數據進行初始化。
db.isMaster()
rs.printReplicationInfo()  --只能在master執行
rs.printSlaveReplicationInfo()  --只能在slave執行

Master-slave架構主庫宕機后備庫不能自動切換,因此官方推薦使用replica set。且自3.2版本以后shard環境已經不再允許使用master-slave只能使用replica set。

更多的關於如何將master-slave架構升級為replica set的步驟,參考如上的官網鏈接。
如何進行主從切換:
  1. 關閉master節點
  2. 關閉slave節點
  3. 備份並刪除slave節點的dbpath下的所有local開頭的文件
  4. 修改slave節點的配置文件,將其角色變為master。(注意此過程是不可逆的,原master節點想要成為slave必須重做一次full initial sync)
如何將主從架構轉變為replica set架構:(事實上主從不能直接轉化為副本集,只能先轉為單節點replica set,然后rs.add()添加節點,這需要secondary進行數據初始化)
事實上不必參考官網的鏈接,只需要手動將master的配置文件修改為rs的配置,然后重啟節點,其他節點清空dbpath目錄並配好rs配置項啟動即可,這樣會自動初始化數據,也可以停止主庫拷貝dbpath然后傳輸到slave節點進行初始化,避免了自動resync。
二、Replica Set
注意自動failover需要集群節點數為奇數,如下為雙節點+仲裁節點的結構。
配置步驟:
1. 三節點的配置文件全部修改為如下格式:
dbpath=/mongodb/data/
logpath=/mongodb/log/mongo.log
pidfilepath=/mongodb/mongo.pid
directoryperdb=true
logappend=true
replSet=rep
port=27017
oplogSize=10000
fork=true
noprealloc=true
2. 在任意一個節點設置replica set
use admin
cfg={ _id:"rep", members:[ {_id:0,host:'192.168.20.70:27017',priority:2}, {_id:1,host:'192.168.20.71:27017',priority:1},
{_id:2,host:'192.168.20.72:27017',arbiterOnly:true}] };
--priority的取值范圍為0-1000,值越大優先級越高,可以為小數。
(一般不設為0,普通節點默認為1,仲裁節點默認為0,仲裁節點即便設置為1也會自動變成0)
--如果priority設為0,那么意味着此節點永遠不會變為主,但是有投票權。
--修改此參數操作參見:https://docs.mongodb.com/manual/tutorial/adjust-replica-set-member-priority/index.html
--關於hidden副本集參見:https://docs.mongodb.com/manual/core/replica-set-hidden-member/#replica-set-hidden-members
###########
初始化生效:
###########
rs.initiate(cfg)
3. 等待幾秒后查看集群狀態
rs.status()
"stateStr" : "RECOVERING" --表示配置正在生效,生效后為PRIMARY/SECONDARY/ARBITER
注意slave默認是不允許讀寫的,如果想要讀,那么需要執行rs.slaveOk()
當primary宕機后,secondary自動轉換為主,當primary重新啟動后,又會自動切換回去。
此外關於節點的添加刪除重新配置等等,強烈建議閱讀官網關於replication提供的各種方法:
重配rs的步驟為:
1.rs.conf()查看之前的集群信息,集群名需要與mongo.conf中一致
2.新建cfg配置,使用rs.reconfig(cfg,{force:true})來重置rs
3.查看新的rs狀態
如果以上配置失敗可以更改data文件重新配置rs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM