【MongoDB】windows平臺搭建Mongo數據庫複製集(相似集羣)(轉)

原文連接:【MongoDB】windows平臺搭建Mongo數據庫複製集(相似集羣)(一)html

Replica  Sets(複製集)是在mongodDB1.6版本開始新增的功能,它能夠實現故障自動切換和自動修復功能成員節點的功能,各個DB之間的數據徹底一致,大大下降了單點故障的風險。 mongodb

【】數據庫

 

以上圖示是三個節點的Replica Set架構。該圖來源於紅丸編寫的《Mongodb管理與開發精要》這本書。從上圖能夠看出,結構相似與一個集羣,其實徹底能夠當作一個集羣。由於它確實和集羣實現的做用是相同的。 windows

1、部署Replica Sets. 

接下來顯示如何在一臺服務器上面演示部署3個節點的Replica Sets 服務器

 

2、啓動Replica服務

   分別打開三個命令窗口,而後分別執行下面三句話。網絡

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. mongod.exe  --replSet rs1 --keyFile "D:\Program Files\mongodb\data\replica\key\r0" --port 28010 --dbpath "D:\Program Files\mongodb\data\replica\data\r0" --logpath "D:\Program Files\mongodb\data\replica\log\r0.log" --logappend  
  2.   
  3.   
  4. mongod.exe  --replSet rs1 --keyFile "D:\Program Files\mongodb\data\replica\key\r1" --port 28011 --dbpath "D:\Program Files\mongodb\data\replica\data\r1" --logpath "D:\Program Files\mongodb\data\replica\log\r1.log" --logappend  
  5.   
  6. cd /d D:\Program Files\mongodb\bin  
  7.   
  8.   
  9. mongod.exe  --replSet rs1 --keyFile "D:\Program Files\mongodb\data\replica\key\r2" --port 28012 --dbpath "D:\Program Files\mongodb\data\replica\data\r2" --logpath "D:\Program Files\mongodb\data\replica\log\r2.log" --logappend  

 

 



3、登陸客戶端,初始化Replica Sets環境

 

【MongoDB】windows平臺搭建Mongo數據庫複製集(相似集羣)(二)

在上篇博客中,咱們主要闡述了在windows平臺下如何搭建mongodb複製集。詳細博客地址:架構

因爲篇幅有限在上篇沒有對結果進行驗證,在本篇博客中咱們主要進行測試:app

經過rs.status()命令咱們能夠查詢到各個節點運行正常。測試

 

1、數據同步測試

在280十一、28012端口上進行插入:spa

 

 

查看緣由:網上找到答案

首先這是正常的,由於SECONDARY是不容許讀寫的, 在寫多讀少的應用中,使用Replica Sets來實現讀寫分離。經過在鏈接時指定或者在主庫指定slaveOk,由Secondary來分擔讀的壓力,Primary只承擔寫操做。對於replica set 中的secondary 節點默認是不可讀的。

相詳細請看:http://stackoverflow.com/questions/8990158/mongdodb-replicates-and-error-err-not-master-and-slaveok-false-code

 

2、故障自適應測試

 

當檢測時主庫中止心跳了後,28012把本身選舉爲主庫,請看以下:

28012上面就能夠進行插入了:

28011上面如今仍是不能插入

【MongoDB】windows平臺搭建Mongo數據庫複製集(相似集羣)(三)

關於windows平臺搭建Mongo數據庫複製集這個話題,我已經在前面寫了兩篇博客

第一篇: 如何在windows平臺搭建Mongo數據庫複製集 

第二篇: 數據同步和故障自適應測試

在本篇裏面,我們重點總結一下複製集,以及分析一下它的工做原理

1、常見場景 

應用程序和數據庫之間的網絡鏈接丟失 

計劃停機、斷電、數據庫服務硬盤故障等等

複製能夠進行故障轉移,複製能讓你在副本間均衡讀負載,保證複製節點與主節點保持同步

2、工做原理 

副本集依賴於兩個基礎機制:oplog和「心跳」(heartbeat).oplog讓數據的複製成爲可能,而「心跳」則監控健康狀況並出發故障轉移;

2.1 關於oplog 

oplog是MongoDB複製的關鍵,oplog是一個固定集合,位於每一個複製節點的local數據庫中,記錄了對數據庫的全部變動,每次客戶端向主節點寫入數據,就會自動向主節點的oplog裏添加愛一條記錄,其中博客了足夠的信息來再現數據。一旦寫操做被複制到某個從節點上,從節點的oplog也會保存一條記錄。

local數據庫裏保存了全部的副本集元數據和oplog,由於自己不能被複制;

 

那咱們詳細在看oplog

在此注意,每一個從節點都有一份本身的oplog,從節點使用長輪詢的方式當即應用來自主節點oplog的新條目。若是叢節點在主節點的oplog中找不到本身要同步的點,那麼就永久中止複製。這是會在日誌中有以下異常:

replcation data too stale, halting

caught syncException 

調整oplog的大小,利用命令db.getReplicationInfo()能夠查看分配了多少oplog空間,同時利用以下命令能夠改變默認oplog大小

 

[html]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. mongod.exe --replSet myapp --oplogSize 1024   

 

 

2.2 心跳檢測以及故障轉移

 

副本集的心跳檢測有助於選舉和故障轉移。默認狀況下,每一個副本集成員每隔2s ping一次其餘成員。這樣一來系統就能夠弄清本身的健康情況了。運行rs.status()也能夠看到健康狀態。

注意:在三個節點中,若是兩個從節點都被殺掉了,在主節點的log會多以下一句話:

 

replSet can't see a majority of the set, 

replSet Secondary 

意思是沒有多數節點,主節點就把本身降級爲從節點;

3、管理

因爲副本集存在許多潛在的複雜配置項,接下來咱們詳細介紹這些複雜配置項目;

3.1 配置細節

能夠用rs.initiate()和rs.add()方法初始化副本集合。利用config.members.push({})增長節點;
 
 
其餘的一些方法:
 

3.2 故障轉移與恢復

恢復是在故障後講副本集還原到原始狀態的過程。有兩大類故障須要處理。第一類就是包含全部的無損故障,直接重啓服務就好。第二種是明確故障,主要是數據文件損壞等等,非正常關閉mongodb服務,若是不更改主機名稱和端口號則從新執行數據文件夾,啓動後數據後同步過來。若是修改屬性,則要用rs.reconfig();
 

3.3 部署策略

副本集最多包含12個節點,提供自動故障轉移的最小副本集合配置就是先前例子中。包含兩個副本和一個仲裁節點。在生產環境中,仲裁機節點能夠運行在應用服務器上,而副本則運行在本身的機器上。對於多數環境而言,這樣配置經濟又高校
相關文章
相關標籤/搜索