MongoDB/主從/副本集

主從復(fù)制:
主節(jié)點(diǎn)寫入數(shù)據(jù),從通過讀取主的oplog得到復(fù)制信息,開始復(fù)制數(shù)據(jù)并且將復(fù)制信息寫入到自己的oplog。oplog是一個(gè)特殊的固定大小的collection,固定大小意味著,新的操作記錄的寫入會導(dǎo)致最老的操作記錄的刪除,以保證oplog的大小。這個(gè)值如果不去設(shè)置,會自動(dòng)根據(jù)硬盤大小的5%來設(shè)定。
Local庫容量設(shè)置。我們知道Local庫主要存放oplog,oplog用于數(shù)據(jù)的同步和復(fù)制,oplog同樣要消耗內(nèi)存的,因此選擇一個(gè)合適的oplog值很重要。
如果是高插入高更新,并帶有延時(shí)從庫的副本集需要一個(gè)較大的oplog值(比如50G);如果沒有延時(shí)從庫,并且數(shù)據(jù)更新速度不頻繁,則可以適當(dāng)調(diào)小oplog值(比如5G)。總之,oplog值大小的設(shè)置取決于具體業(yè)務(wù)應(yīng)用場景。
master啟動(dòng)配置文件:

port=27018 #指定端口
fork=true #后臺運(yùn)行
dbpath=/home/map/mongodb/data #規(guī)定數(shù)據(jù)庫的位置
logpath=/home/map/mongodb/logs/mongodb.log #規(guī)定數(shù)據(jù)庫的日志文件
master=true #設(shè)置主
# bind_ip=127.0.0.1,192.168.0.4 #允許的地址 為了安全
nohttpinterface=true #禁止http訪問

slave啟動(dòng)配置文件:

port=27018 #指定端口
fork=true #后臺運(yùn)行
dbpath=/home/map/mongodb/mongo #規(guī)定數(shù)據(jù)庫的位置
logpath=/home/map/mongodb/mlog/mongodb.log #規(guī)定數(shù)據(jù)庫的日志文件
slave=true #聲明從
source=192.168.0.4:27018 #規(guī)定從屬于哪個(gè)ip  注意:ip是主服務(wù)器的  最好用內(nèi)網(wǎng)ip
# bind_ip=127.0.0.1,192.168.0.4 #允許的地址 為了安全
nohttpinterface=true #禁止http訪問

測試:

測試 主執(zhí)行
use word
db.wsd.save({name:”aaa”})
db.wsd.find()

在從服務(wù)器執(zhí)行
show dbs;
local  0.078GB
word   0.078GB  #如果出現(xiàn)主的數(shù)據(jù)  說明同步成功
use word
db.wsd.find()  #查到數(shù)據(jù)說明同步成功
{ “_id” : ObjectId(“55cc43470278a3d7b1c6f2c0″), “name” : “aaa” }

主從復(fù)制的其他設(shè)置項(xiàng):

  • only 從節(jié)點(diǎn)指定復(fù)制某個(gè)數(shù)據(jù)庫,默認(rèn)是復(fù)制全部數(shù)據(jù)庫
  • slavedelay 從節(jié)點(diǎn)設(shè)置主數(shù)據(jù)庫同步數(shù)據(jù)的延遲(單位是秒)
  • fastsync 從節(jié)點(diǎn)以主數(shù)據(jù)庫的節(jié)點(diǎn)快照為節(jié)點(diǎn)啟動(dòng)從數(shù)據(jù)庫
  • autoresync 從節(jié)點(diǎn)如果不同步則從新同步數(shù)據(jù)庫(即選擇當(dāng)通過熱添加了一臺從服務(wù)器之后,從服務(wù)器選擇是否更新主服務(wù)器之間的數(shù)據(jù))
  • oplogSize 主節(jié)點(diǎn)設(shè)置oplog的大小(主節(jié)點(diǎn)操作記錄存儲到local的oplog中)

動(dòng)態(tài)的添加或刪除從節(jié)點(diǎn):
我們在我們上面的從節(jié)點(diǎn)的local數(shù)據(jù)庫中,存在一個(gè)集合sources。這個(gè)集合就保存了我這個(gè)服務(wù)器的主服務(wù)器。


掛接主服務(wù):
db.sources.insert({“host”:”127.0.0.1:8888”})
刪除已經(jīng)掛接的主節(jié)點(diǎn):
db.sources.remove({“host”:”127.0.0.1:8888”})

副本集:

  • 通常在部署 MongoDB 時(shí), 哪怕目前只用到一個(gè)實(shí)例, 但為了方便擴(kuò)展也可以將其部署為一個(gè)只有一個(gè)成員的副本集. 這樣擴(kuò)展規(guī)模時(shí)就不需要停機(jī)創(chuàng)建副本集而直接添加成員即可。
  • 副本集沒有特定的主數(shù)據(jù)庫。如果哪個(gè)Primary數(shù)據(jù)庫宕機(jī)了,集群中就會推選出一個(gè)從屬庫作為主庫。原來的Primary庫恢復(fù)后成為從屬庫。
  • 在副本集的環(huán)境中,要是所有的Secondary都宕機(jī)了,只剩下Primary。最后Primary會變成Secondary,不能提供服務(wù)。所以最小的副本集也應(yīng)該具備一個(gè)primary節(jié)點(diǎn)和兩個(gè)secondary節(jié)點(diǎn)。兩個(gè)節(jié)點(diǎn)的副本集不具備真正的故障轉(zhuǎn)移能力。
  • 副本集要求參與選舉投票(vote)的節(jié)點(diǎn)數(shù)為奇數(shù),當(dāng)我們只有兩個(gè)(或偶數(shù))的節(jié)點(diǎn)參與仲裁,這時(shí)需引入仲裁者(arbiter)。因?yàn)榕紨?shù)情況下如果打成平局,那么每個(gè)成員都需要再等待30秒才能開始下一次選舉。
  • 最大50節(jié)點(diǎn),但是只能有7個(gè)投票節(jié)點(diǎn),其他是non-voting節(jié)點(diǎn)。
  • 當(dāng)集群中有1個(gè)primary節(jié)點(diǎn),1個(gè)secondary節(jié)點(diǎn)和1個(gè)arbit節(jié)點(diǎn),如果primary節(jié)點(diǎn)掛了,secondary節(jié)點(diǎn)也會自動(dòng)成為primary節(jié)點(diǎn)。利用仲裁節(jié)點(diǎn)可以實(shí)現(xiàn)最少的機(jī)器開銷達(dá)到兩個(gè)節(jié)點(diǎn)熱備的效果。
  • 挑有數(shù)據(jù)的機(jī)器進(jìn)行初始化,如果一個(gè)副本集有大于一臺機(jī)器有數(shù)據(jù)則不能創(chuàng)建副本集。
  • 默認(rèn)情況下,Secondary是不提供服務(wù)的,即不能讀和寫。在特殊情況下需要讀的話則需要:rs.slaveOk() ,只對當(dāng)前連接有效。

配置文件:

port=27018 #指定端口
fork=true #后臺運(yùn)行
dbpath=/home/map/mongodb/data #規(guī)定數(shù)據(jù)庫的位置
logpath=/home/map/mongodb/logs/mongodb.log #規(guī)定數(shù)據(jù)庫的日志文件
replSet=replSetName #設(shè)置副本集的名字,同一個(gè)副本集成員都用一樣的名字

登錄驗(yàn)證:
當(dāng)你的MongoDB啟用了身份驗(yàn)證時(shí),在多節(jié)點(diǎn)環(huán)境(副本、分片)下,mongoDB強(qiáng)制副本成員必要提供節(jié)點(diǎn)間驗(yàn)證的憑證才能相互通信。
在初始化節(jié)點(diǎn)

openssl rand -base64 21 > /usr/local/mongodb/keyfile
chmod 600 /usr/local/mongodb/keyfile

把keyfile文件復(fù)制到所有節(jié)點(diǎn)的/usr/local/mongodb/keyfile目錄下,修改文件權(quán)限為600
在上面的配置文件里添加

auth=true
keyFile=/usr/local/mongodb/keyfile

初始化:

config={"_id":"replSetName",
     "members":[
         {"_id":0,"host":"ip1:port1","priority":1},  
         {"_id":1,"host":"ip2:port2","priority":1},  
         {"_id":2,"host":"ip3:port3","priority":1},  
     ]
}
rs.initiate(config);//初始化副本集就完成了
//"_id": 副本集的名稱
//"members": 副本集的服務(wù)器列表
//"_id": 服務(wù)器的唯一ID
//"host": 服務(wù)器主機(jī)
//"priority": 是優(yōu)先級,默認(rèn)為1,優(yōu)先級0為被動(dòng)節(jié)點(diǎn),不能成為活躍節(jié)點(diǎn)。//優(yōu)先級不位0則按照有大到小選出活躍節(jié)點(diǎn)。
//"arbiterOnly": true/false 仲裁節(jié)點(diǎn),只參與投票,不接收數(shù)據(jù),也不能成為活躍節(jié)點(diǎn)。
//buildIndexes: 是否可以建立索引
//slaveDelay:延遲多長時(shí)間開始復(fù)制最新數(shù)據(jù)

增刪節(jié)點(diǎn):
在活躍的主機(jī)上

rs.status()
//查看副本集狀態(tài)
rs.add("ip:port")
//刪除副本
rs.remove("ip:port")
//查看配置
rs.config()
#重新加載配置文件,強(qiáng)制了副本集進(jìn)行一次選舉,優(yōu)先級高的成為Primary。
cfg=rs.conf()
cfg.members[1].priority=2
rs.reconfig(cfg)

讀寫分離:
讀寫分離是通過修改程序的driver的,應(yīng)用程序驅(qū)動(dòng)通過read reference來設(shè)定如何對副本集進(jìn)行讀取操作,默認(rèn)的,客戶端驅(qū)動(dòng)所有的讀操作都是直接訪問Primary節(jié)點(diǎn)。

  • primary
    主節(jié)點(diǎn),默認(rèn)模式,讀操作只在主節(jié)點(diǎn),如果主節(jié)點(diǎn)不可用,報(bào)錯(cuò)或者拋出異常。
  • primaryPreferred
    首選主節(jié)點(diǎn),大多情況下讀操作在主節(jié)點(diǎn),如果主節(jié)點(diǎn)不可用,如故障轉(zhuǎn)移,讀操作在從節(jié)點(diǎn)。
  • secondary
    從節(jié)點(diǎn),讀操作只在從節(jié)點(diǎn), 如果從節(jié)點(diǎn)不可用,報(bào)錯(cuò)或者拋出異常。
  • secondaryPreferred
    首選從節(jié)點(diǎn),大多情況下讀操作在從節(jié)點(diǎn),特殊情況(如單主節(jié)點(diǎn)架構(gòu))讀操作在主節(jié)點(diǎn)。
  • nearest
    最鄰近節(jié)點(diǎn),讀操作在最鄰近的成員,可能是主節(jié)點(diǎn)或者從節(jié)點(diǎn)。

參考 :
http://www.cnblogs.com/qiyebao/p/5157615.html
http://www.cnblogs.com/zhoujinyi/p/3554010.html
http://www.itdecent.cn/p/5b97ec07a279

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

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

  • 分布式系統(tǒng)面臨的第一個(gè)問題就是數(shù)據(jù)分布,即將數(shù)據(jù)均勻地分布到多個(gè)存儲節(jié)點(diǎn)。另外,為了保證可靠性和可用性,需要將數(shù)據(jù)...
    olostin閱讀 4,906評論 2 26
  • NoSql數(shù)據(jù)庫優(yōu)缺點(diǎn) 在優(yōu)勢方面主要體現(xiàn)在下面幾點(diǎn): 簡單的擴(kuò)展 快速的讀寫 低廉的成本 靈活的數(shù)據(jù)模型 在不足...
    dreamer_lk閱讀 2,873評論 0 6
  • 個(gè)人自行閱讀時(shí)候,翻譯的文檔。因?yàn)楸容^渣,如果有更合理或者錯(cuò)誤的地方煩勞告知,我會做修改。Oracle Data ...
    窩窩的小黑屋閱讀 1,301評論 0 3
  • 繁華塵世中,誰能為我織就一簾幽夢。 夢里的山清水秀,云淡風(fēng)清, 夢里有幽幽彎月,點(diǎn)點(diǎn)繁星。 春有時(shí)鳴山澗的飛鳥, ...
    陌上花開V緩緩歸矣閱讀 317評論 0 0
  • 此刻 遠(yuǎn)方一無所有 你靜下腳步 心中長出迷霧 雨后 秋街有消瘦的樹 像你轉(zhuǎn)身后 冷卻的領(lǐng)悟 穿透另一場雨 與你相遇...
    楊昊田閱讀 552評論 67 50

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