MongoDB復(fù)制集/副本集(Replica Set)搭建

1、副本集/復(fù)制集:

mongo副本集/復(fù)制集是mongo高可用性特征之一,是有自動(dòng)故障恢復(fù)功能的主要集群。由一個(gè)Primary節(jié)點(diǎn)和一個(gè)或多個(gè)Secondary節(jié)點(diǎn)組成。

復(fù)制集

復(fù)制是在多臺(tái)服務(wù)器之間同步數(shù)據(jù)的過程,由一組Mongod實(shí)例(進(jìn)程)組成,包含一個(gè)Primary節(jié)點(diǎn)和多個(gè)Secondary節(jié)點(diǎn)

Mongodb Driver(客戶端)的所有數(shù)據(jù)都寫入Primary,Secondary從Primary同步寫入的數(shù)據(jù)

通過上述方式來保持復(fù)制集內(nèi)所有成員存儲(chǔ)相同的數(shù)據(jù)集,提供數(shù)據(jù)的高可用

復(fù)制的目的

Failover (故障轉(zhuǎn)移,故障切換,故障恢復(fù))

Redundancy(數(shù)據(jù)冗余)

避免單點(diǎn),用于災(zāi)難時(shí)恢復(fù),報(bào)表處理,提升數(shù)據(jù)可用性

讀寫分離,分擔(dān)讀壓力

對(duì)用戶透明的系統(tǒng)維護(hù)升級(jí)

復(fù)制集的原理

主節(jié)點(diǎn)記錄所有的變更到oplog日志

輔助節(jié)點(diǎn)(Secondary)復(fù)制主節(jié)點(diǎn)的oplog日志并且將這些日志在輔助節(jié)點(diǎn)進(jìn)行重放(做)

各個(gè)節(jié)點(diǎn)之間會(huì)定期發(fā)送心跳信息,一旦主節(jié)點(diǎn)宕機(jī),則觸發(fā)選舉一個(gè)新的主節(jié)點(diǎn),剩余的輔助節(jié)點(diǎn)指向新的主

10s內(nèi)各輔助節(jié)點(diǎn)無法感知主節(jié)點(diǎn)的存在,則開始觸發(fā)選舉

通常1分鐘內(nèi)完成主輔助節(jié)點(diǎn)切換,10-30s內(nèi)感知主節(jié)點(diǎn)故障,10-30s內(nèi)完成選舉及切換

復(fù)制≠備份

用戶恢復(fù)數(shù)據(jù),防止數(shù)據(jù)丟失,實(shí)現(xiàn)災(zāi)難恢復(fù)

人為誤操作導(dǎo)致數(shù)據(jù)刪除,程序Bug導(dǎo)致數(shù)據(jù)損壞等

Primary

首要復(fù)制節(jié)點(diǎn),由選舉產(chǎn)生,提供讀寫服務(wù)的節(jié)點(diǎn),產(chǎn)生oplog日志

Secondary

備用(輔助)復(fù)制節(jié)點(diǎn),Secondary可以提供讀服務(wù),增加Secondary節(jié)點(diǎn)可以提供復(fù)制集的讀服務(wù)能力

在故障時(shí),備用節(jié)點(diǎn)可以根據(jù)設(shè)定的優(yōu)先級(jí)別提升為首要節(jié)點(diǎn)。提升了復(fù)制集的可用性

Arbiter

Arbiter節(jié)點(diǎn)只參與投票,不能被選為Primary,并且不從Primary同步數(shù)據(jù)

Arbiter本身不存儲(chǔ)數(shù)據(jù),是非常輕量級(jí)的服務(wù)。

當(dāng)復(fù)制集成員為偶數(shù)時(shí),最好加入一個(gè)Arbiter節(jié)點(diǎn),以提升復(fù)制集可用性


2、環(huán)境搭建:

Mongodb版本3.0以上, 三臺(tái)服務(wù)器均為64位

三臺(tái)服務(wù)器 ? ?-------- ?Primary(Centos7)、 Secondary(Centos7)、 Secondary(Debian8);架設(shè)IP分別為 192.168.1.1、1.2、 1.3

三臺(tái)服務(wù)器關(guān)閉防火墻 ? ?-------- systemctl ?stop firewalld.service

三臺(tái)服務(wù)器修改mongo配置文件 ? ?-------- ?vi ?/etc/mongod.conf?

? ? ? ? 偵聽地址除了 localhost 外再加上服務(wù)器IP; 設(shè)置復(fù)制集名字(RepliSetName)。


開啟mongod服務(wù): mongod

三臺(tái)服務(wù)器mongo各自初始化: rs.initiate()

Primary上副本集配置:

rsconf(配置名稱,可隨意取)={_id:"副本集名",member:[{_id:0,host:"IP:port",priority:2},{_id:1,host:"IP:port",priority:1},{_id:2,host:"IP:port",priority:1}]}

在初始化:rs.initiate(變量名,如下面的config)


Secondary上配置:

rs.slaveOk() ? ?#承認(rèn)自己是Secondary

三臺(tái)服務(wù)器上互相添加副本集成員:

rs.add("IP:port"), 如在Primary上 rs.add("192.168.1.2:27017"), rs.add("192.168.1.3:27017")

查看狀態(tài)

rs.status()



3、rs(replication set) 常用命令:

初始化副本集 ?---- ?rs.initiate()

mongo查看狀態(tài) ---- rs.status()

初始化副本集配置

rsconf = {_id: "rs0",

members: [{

_id: 0,

host: ":27017"}]}

rs.initiate( rsconf )

驗(yàn)證副本集配置 ?---- ?rs.config()

增加副本集成員 ?---- ?rs.add("Ip:port")

移除副本集成員 ?---- ?rs.remove("IP:port") ? ?#此步驟在Primary上操作

改變成員變量的優(yōu)先級(jí)

cfg = rs.conf()

cfg.members[0].priority = 3

cfg.members[1].priority = 1

cfg.members[2].priority = 2

rs.reconfig(cfg)

配置延遲副本集

cfg = rs.conf()

cfg.members[0].priority = 0

cfg.members[0].hidden = true

cfg.members[0].slaveDelay = 3600

rs.reconfig(cfg)


# ?07/03/2017

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容