標籤:服務 ack false 缺點 mongo users 儲存 delay 記錄
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(): //查看從節點的資訊
MongoDB學習筆記——Master/Slave主從複製