Master/Slave主從複製 主從複製MongoDB中比較常用的一種方式,如果要實現主從複製至少應該有兩個MongoDB實例,一個作為主節點負責客戶端請求,另一個作為從節點負責從主節點映射數據,提供數據備份,客戶端讀取等,推薦一主多從模式 MongoDB主從複製的實現方式: 主節點的操作會被記錄... ...
Master/Slave主從複製
主從複製MongoDB中比較常用的一種方式,如果要實現主從複製至少應該有兩個MongoDB實例,一個作為主節點負責客戶端請求,另一個作為從節點負責從主節點映射數據,提供數據備份,客戶端讀取等,推薦一主多從模式
MongoDB主從複製的實現方式:
- 主節點的操作會被記錄為oplog,存儲在系統資料庫local的集合oplog.$main中,這個集合中的每個文檔都代表主節點的一個操作(不包括查詢)
- 從節點定期從主伺服器獲取oplog數據,併在本機進行執行
- oplog使用的是固定集合,隨著操作的逐漸增加,新的文檔會逐漸覆蓋舊的文檔
MongoDB使用註意點或缺點:
- 每個從節點必須知曉其對應的主節點地址
- 只允許主節點進行數據更新操作
- 主節點宕機服務不可用
- 3.2版本以後已經移除
Mongodb主從複製配置項詳解:
- master:預設為false,當設置為true,則配置當前實例作為主節點。
- slave:預設為false,當設置為true,則配置當前實例作為從節點。
- source:預設為空,用於從節點,指定從節點的複製來源(主節點的IP+埠),格式為:<host><:port>
- only:預設為空,用於從節點,主動複製預設複製主節點上所有的資料庫,通過設置此項指定需要複製的資料庫名稱
- slavedelay:設置從庫同步主庫的延遲時間,用於從設置,預設為0,單位秒。
- autoresync:預設為false,用於從設置。是否自動重新同步。設置為true,如果落後主超過10秒,會強制從自動重新同步。如果oplogSize太小,此設置可能有問題。如果OPLOG大小不足以存儲主的變化狀態和從的狀態變化之間的差異,這種情況下強制重新同步是不必要的。當設置autoresync選項設置為false,10分鐘內從不會進行大於1次的自動重新同步。
主從配置實例(一主一從)
主節點 master.conf
dbpath=D:\mongodb\zhucong\master\data
logpath=D:\mongodb\zhucong\master\logs\mongodb.log
port=27017
bind_ip=127.0.0.1
master=true
從節點配置
dbpath=D:\mongodb\zhucong\slave\data
logpath=D:\mongodb\zhucong\slave\logs\mongodb.log
port=27018
bind_ip=127.0.0.1
master=true
slave=true
source=127.0.0.1:27017
分別啟動兩個MongoDB實例
mongod --config D:\mongodb\zhucong\master\master.conf
mongod --config D:\mongodb\zhucong\slave\slave.conf
使用 Robomongo 客戶端分別連接上兩個MongoDB實例
在主庫上創建資料庫 masterslavetest 並創建一些測試數據
use masterslavetest
for (i = 5000; i < 100000; i++) {
db.users.insert({
"i": i,
"userName": "user" + i,
"age": Math.floor(Math.random() * 120),
"created": new Date(),
total: Math.floor(Math.random() * 100) * i
})
}
在兩個實例上分別執行 以下命令 可以看到在兩個資料庫上的數據保持一致,這時在主資料庫上執行CRUD等操作時,從庫數據依然與主庫一致
db.users.find({})
兩條指令
db.printReplicationInfo(): //查看主節點的信息
db.printSlaveReplicationInfo(): //查看從節點的信息