目錄
- 一、復制集機制及原理
- 1 復制集的作用
- 2 典型復制集結構
- 3 資料是如何復制的?
- 4 通過選舉完成故障恢復
- 5 影響選舉的因素
- 6 復制集節點常見選項
- 7 復制集注意事項
- 二、搭建 MongoDB 復制集
- 1 搭建準備
- 2 復制集節點創建
- 2.1 在Linux原生環境下搭建
- 2.1.1 創建資料目錄
- 2.1.2 準備組態檔
- 2.1.3 啟動 MongoDB 行程
- 2.2 在Windows下搭建
- 2.2.1 創建資料目錄
- 2.2.2 準備組態檔
- 2.2.3 啟動 MongoDB 行程
- 3 配置復制集
- 4 驗證
一、復制集機制及原理
1 復制集的作用
-
MongoDB 復制集的主要意義在于實作服務高可用
-
它的現實依賴于兩個方面的功能:
1.資料寫入時將資料迅速復制到另一個獨立節點上
2.在接受寫入的節點發生故障時自動選舉出一個新的替代節點 -
在實作高可用的同時,復制集實作了其他幾個附加作用:
1.資料分發:將資料從一個區域復制到另一個區域,減少另一個區域的讀延遲
2.讀寫分離:不同型別的壓力分別在不同的節點上執行
3.異地容災:在資料中心故障時候快速切換到異地
2 典型復制集結構
- 一個典型的復制集由3個以上具有投票權的節點組成,包括:
- 一個主節點(PRIMARY):接受寫入操作和選舉時投票
- 兩個(或多個)從節點(SECONDARY):復制主節點上的新資料和選舉時投票
- 不推薦使用 Arbiter(投票節點/仲裁節點)

3 資料是如何復制的?
-
當一個修改操作,無論是插入、更新或洗掉,到達主節點時,它對資料的操作將被記錄下來(經過一些必要的轉換),這些記錄稱為 oplog,
-
從節點通過在主節點上打開一個 tailable 游標不斷獲取新進入主節點的 oplog,并在自己的資料上回放,以此保持跟主節點的資料一致,

4 通過選舉完成故障恢復
- 具有投票權的節點之間兩兩互相發送心跳;
- 當
5次心跳未收到時判斷為節點失聯; - 如果失聯的是主節點,從節點會發起選舉,選出新的主節點;
- 如果失聯的是從節點則不會產生新的選舉;
- 選舉基于
RAFT一致性演算法實作,選舉成功的必要條件是大多數投票節點存活; - 復制集中最多可以有
50個節點,但具有投票權的節點最多7個,

5 影響選舉的因素
-
整個集群必須有
大多數節點存活; -
被選舉為主節點的節點必須:
- 能夠與多數節點建立連接
- 具有較新的 oplog
- 具有較高的優先級(如果有配置)
6 復制集節點常見選項
- 是否具有投票權(v 引數):有則參與投票;
- 優先級(priority 引數):優先級越高的節點越優先成為主節點,優先級為0的節點無法成為主節點;
- 隱藏(hidden 引數):復制資料,但對應用不可見,隱藏節點可以具有投票僅,但優先級必須為0;
- 延遲(slaveDelay 引數):復制 n 秒之前的資料,保持與主節點的時間差,

7 復制集注意事項
-
關于硬體:
因為正常的復制集節點都有可能成為主節點,它們的地位是一樣的,因此硬體配置上盡可能一致;
為了保證節點不會同時宕機,各節點使用的硬體必須具有獨立性, -
關于軟體:
復制集各節點軟體版本必須一致,以避免出現不可預知的問題, -
增加節點不會增加系統寫性能!!!
二、搭建 MongoDB 復制集
搭建目標
本實驗中,我將通過在一臺機器上運行3個實體來搭建一個最簡單的復制集,我將會帶展示以下幾點:
- 如何啟動一個 MongoDB 實體
- 如何將3個 MongoDB 實體搭建成一個復制集
- 如何對復制集運行引數做一些常規調整
1 搭建準備
-
安裝最新的 MongoDB 版本
-
Windows 系統請事先配置好 MongoDB 可執行檔案的環境變數
-
Linux 和 Mac 系統請配置 PATH 變數
-
確保有 10GB 以上的硬碟空間
2 復制集節點創建
MongoDB 啟動時將使用一個資料目錄存放所有資料檔案,我們將為3個復制集節點創建各自的資料目錄,
2.1 在Linux原生環境下搭建
2.1.1 創建資料目錄
- mkdir -p /data/db{1,2,3}
2.1.2 準備組態檔
復制集的每個mongod行程應該位于不同的服務器,現在在一臺機器上運行3個行程,因此要為它們各自配置:
-
不同的埠,示例中將使用28017/28018/28019
-
不同的資料目錄,示例中將使用:
/data/db1
/data/db2
/data/db3 -
不同日志檔案路徑,示例中將使用:
/data/db1/mongod.log
/data/db2/mongod.log
/data/db3/mongod.log -
在相應的資料目錄下創建以下mongod.conf檔案,注意:
#注釋的代表那行是需要修改的
# /data/db1/mongod.conf
systemLog:
destination: file
path: /data/db1/mongod.log # log path
logAppend: true
storage:
dbPath: /data/db1 # data directory
net:
bindIp: 0.0.0.0 port: 28017 # port
replication:
replSetName: rs0
processManagement:
fork: true
2.1.3 啟動 MongoDB 行程
mongod -f /data/db1/mongod.conf
mongod -f /data/db2/mongod.conf
mongod -f /data/db3/mongod.conf
注意:如果啟用了 SELinux,可能阻止上述行程啟動,簡單起見請關閉 SELinux,
如果以上步驟都已完成,那么離成功就差一小步了,跳到
第三點查看復制集的配置,
2.2 在Windows下搭建
2.2.1 創建資料目錄
- md c:\data\db1
- md c:\data\db2
- md c:\data\db3
2.2.2 準備組態檔
復制集的每個mongod行程應該位于不同的服務器,現在在一臺機器上運行3個行程,因此要為它們各自配置:
-
不同的埠,示例中將使用28017/28018/28019
-
不同的資料目錄,示例中將使用:
c:\data\db1
c:\data\db2
c:\data\db3 -
不同日志檔案路徑,示例中將使用:
c:\data\db1\mongod.log
c:\data\db2\mongod.log
c:\data\db3\mongod.log -
在相應的資料目錄下創建以下mongod.conf檔案,注意:
#注釋的代表那行是需要修改的
# c:\data\db1\mongod.conf
systemLog:
destination: file
path: c:\data1\mongod.log # 日志檔案路徑
logAppend: true
storage:
dbPath: c:\data1 # 資料目錄
net:
bindIp: 0.0.0.0
port: 28017 # 埠
replication:
replSetName: rs0
2.2.3 啟動 MongoDB 行程
mongod -f c:\data1\mongod.conf
mongod -f c:\data2\mongod.conf
mongod -f c:\data3\mongod.conf
因為 Windows 不支持 fork,以上命令需要在3個不同的視窗執行,執行后不可關閉視窗否則行程將直接結束,
3 配置復制集
# mongo --port 28017
> rs.initiate({
_id: "rs0", members: [{
_id: 0,
host: "localhost:28017"
},{
_id: 1,
host: "localhost:28018"
},{
_id: 2,
host: "localhost:28019"
}]
4 驗證
- MongoDB 主節點進行寫入
# mongo localhost:28017
> db.test.insert({ a:1 })
> db.test.insert({ a:2 });
- MongoDB 從節點進行讀
# mongo localhost:28018
> rs.slaveOk()
> db.test.find()

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/395085.html
標籤:其他
