早期的版本使用master-slave,一主一從和mysql類型,但slave在此架構中為隻讀,如果主庫當機後,從庫不能自動切換為主 需要手動才行
後期mongodb開發了個新的架構方案副本集,是以呢,目前已經淘汰master-slave的架構 改為可副本集,這種模式有一個主(primary),和多個從(secondary),隻讀,給他們設定權重,當主宕掉後,權重最高的從切換為主。其他從會自動識别新的主
在次架構還可以建立一個仲裁(arbiter)的角色,它隻負責裁決,而不存儲資料,它清楚的告訴是否有問題,防止腦裂問題
在此架構中讀寫資料都是在主上,如果想實作負載均衡的目的需要手動指定讀庫的目标server
副本集搭建:
我有三台機器分别是192.168.191.21 192.168.191.22 192.168.191.23 其中21為主 22 23為從
1,首先三台機器分别安裝mongodb
參照我之前安裝mongodb的方法
cd /etc/yum.repos.d
vim mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
gpgcheck=1
enabled=1
yum install -y mongodb-org
2,三台機器編輯配置檔案
vim /etc/mongod.conf
找到replication 删除# 然後在replication下面 寫上如下倆行 記得前面有倆個空格
replication
oplogSizeMB: 20 //類似mysql binlog 20M
replSetName: sonice //副本集的名稱
找到bindIp後面的127.0.0.1加上本機的内網ip 21,22,23
3,分别重新開機三台機器
systemctl restart mongod
4,連接配接主,在主上運作指令mongo
use admin
config={_id:”sonice”,members:[{_id:0,host:”192.168.191.21:27017″},{_id:1,host:”192.168.191.22:27017″},{id:2,host:”192.168.191.23:27017″}]}
// 其中sonice為副本集的名稱 ,id為0的 是 主 其他id為1和2的是從
5,初始化
rs.initiate(config) //傳回ok:1為正确
配置完之後 使用rs.status() 檢視副本集的狀态
如果倆個從上的狀态為”stateStr”:”STARTUP”,則重新配置一遍即可
再次使用rs.status() 會發現從的狀态變為SECONDARY 主的狀态為STARTUP
mongodb的權重設定
使用rs.config 檢視三台機器的priority 權重都是 1
更改他們的權重 ,設定一個變量 用索引的方式 來設定權重
首先進入主的mongo裡面 執行下面5行操作
cfg = rs.config()
cfg.members[0].priority = 3
rs.reconfig(cfg)
這樣設定下來 用rc.status() 可以看到21的主上機器權重為3 22的權重為2 23的權重為1
這樣 當21宕了 會優先跳到22上 , 當21恢複後又跳回21為主了