MongoDB之主從復制和副本集(四)
阿新 • • 發佈:2018-08-14
dmi 數據庫 mongo alloc already urn tor 安全性 db2
簡單主從復制
- 采用一主一從或一主多從的布署模式,可以將讀寫分離開來,提高數據庫的可用性,不過mongodb的主從模式並不能在主節點崩潰後,從節點替換主節點的工作,一般可以在開發階段使用。
實現步驟
- 設置配置文件
# mongodb.conf1 # 主節點 dbpath=/var/lib/mongodb1 # 設置數據文件 #where to log logpath=/var/log/mongodb/mongodb1.log # 設置日誌文件 logappend=true bind_ip = 127.0.0.1,192.168.1.21 # 設置ip port = 27018 # 設置port journal=true master = true # 設置主節點 # mongodb.conf2 # 從節點 dbpath=/var/lib/mongodb2 # 設置數據文件 #where to log logpath=/var/log/mongodb/mongodb2.log # 設置日誌文件 logappend=true bind_ip = 127.0.0.1,192.168.1.21 # 設置ip port = 27019 # 設置port journal=true slave = true # 設置從節點 source = 192.168.1.21:27018 # 指定主節點
- 使用配置文件啟動
# 啟動主節點
mongod -f /etc/mongodb.conf1 &
# 啟動從節點
mongod -f /etc/mongodb.conf2 &
- 測試發現,從節點可讀不可寫,主節點殺死後,從節點不能代替主節點。
副本集
定義:復制提供了數據的冗余備份,並在多個服務器上存儲數據副本,提高了數據的可用性,並可以保證數據的安全性。
特點:
主備節點存儲數據,仲裁節點不存儲數據。客戶端同時連接主節點與備節點,不連接仲裁節點。
所有節點分成3類,主節點,從節點和仲裁節點。
默認設置下,主節點提供所有增刪查改服務,備節點不提供任何服務。但是可以通過設置使備節點提供查詢服務;
自動故障轉移
自動恢復
實現步驟
- 設置三份配置文件,分別為主節點、從節點、仲裁節點配置
# mongodb.conf dbpath=/var/lib/mongodb # 數據文件 logpath=/var/log/mongodb/mongodb.log # 日誌文件 pidfilepath=/var/lib/mongodb/mongodb.pid # 進程文件 logappend=true # 添加方式 replSet=name # 設置副本集名稱 bind_ip=192.168.1.21 # 綁定ip port=27017 # port fork=true # 後臺運行 noprealloc=true # mongodb.conf1 dbpath=/var/lib/mongodb1 # 數據文件 logpath=/var/log/mongodb/mongodb1.log # 日誌文件 pidfilepath=/var/lib/mongodb/mongodb1.pid # 進程文件 logappend=true # 添加方式 replSet=name # 設置副本集名稱 bind_ip=192.168.1.21 # 綁定ip port=27018 # port fork=true # 後臺運行 noprealloc=true # mongodb.conf2 dbpath=/var/lib/mongodb2 # 數據文件 logpath=/var/log/mongodb/mongodb2.log # 日誌文件 pidfilepath=/var/lib/mongodb/mongodb2.pid # 進程文件 logappend=true # 添加方式 replSet=name # 設置副本集名稱 bind_ip=192.168.1.21 # 綁定ip port=27019 # port fork=true # 後臺運行 noprealloc=true
- 啟動節點
mongo -f /etc/mongodb.conf
mongo -f /etc/mongodb1.conf
mongo -f /etc/mongodb2.conf
- 配置節點
mongo ip:port
use admin
fuben={ _id:"name", members:[ {_id:0,host:‘192.168.1.21:27017‘,priority:2}, {_id:1,host:‘192.168.1.21:27018‘,priority:1},
{_id:2,host:‘192.168.1.21:27019‘,arbiterOnly:true}] };
rs.initiate(fuben)
參數:
priority:優先級
arbiterOnly:仲裁節點
- 有時報錯
"errmsg" : "couldn‘t initiate : member 192.168.1.21:27018 has data already, cannot initiate set. All members except initiator must be empty."
# 需要清空數據庫,將數據庫文件都刪除
- 生效後,從節點目前是不允許讀寫的,設置:
# 登錄從節點
rs.slaveOk();
- 殺死主節點,可以看到從節點變為主節點,重新啟動主節點後,主節點還是主節點,不會變為從節點(老大永遠是老大);
參考:
https://www.cnblogs.com/hadoop-dev/p/6069780.html
https://docs.mongodb.com/manual/introduction/
MongoDB之主從復制和副本集(四)