天天看點

mongodb的架構 副本集搭建

早期的版本使用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為主了

繼續閱讀