標籤:客戶 journal 模式 www init ODB 登入 slave href
簡單主從複製
- 採用一主一從或一主多從的布署模式,可以將讀寫分離開來,提高資料庫的可用性,不過mongodb的主從模式並不能在主節點崩潰後,從節點替換主節點的工作,一般可以在開發階段使用。
實現步驟
# mongodb.conf1 # 主節點dbpath=/var/lib/mongodb1 # 設定資料檔案#where to loglogpath=/var/log/mongodb/mongodb1.log # 設定記錄檔logappend=truebind_ip = 127.0.0.1,192.168.1.21 # 設定ipport = 27018 # 設定portjournal=truemaster = true # 設定主節點# mongodb.conf2 # 從節點dbpath=/var/lib/mongodb2 # 設定資料檔案#where to loglogpath=/var/log/mongodb/mongodb2.log # 設定記錄檔logappend=truebind_ip = 127.0.0.1,192.168.1.21 # 設定ipport = 27019 # 設定portjournal=trueslave = true # 設定從節點source = 192.168.1.21:27018 # 指定主節點
# 啟動主節點mongod -f /etc/mongodb.conf1 &# 啟動從節點mongod -f /etc/mongodb.conf2 &
- 測試發現,從節點可讀不可寫,主節點殺死後,從節點不能代替主節點。
複本集
主備節點儲存資料,仲裁節點不儲存資料。用戶端同時串連主節點與備節點,不串連仲裁節點。
所有節點分成3類,主節點,從節點和仲裁節點。
預設設定下,主節點提供所有增刪查改服務,備節點不提供任何服務。但是可以通過設定使備節點提供查詢服務;
自動容錯移轉
自動回復
實現步驟
- 設定三份設定檔,分別為主節點、從節點、仲裁節點配置
# mongodb.confdbpath=/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 # 綁定ipport=27017 # portfork=true # 後台運行noprealloc=true# mongodb.conf1dbpath=/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 # 綁定ipport=27018 # portfork=true # 後台運行noprealloc=true# mongodb.conf2dbpath=/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 # 綁定ipport=27019 # portfork=true # 後台運行noprealloc=true
mongo -f /etc/mongodb.confmongo -f /etc/mongodb1.confmongo -f /etc/mongodb2.conf
mongo ip:portuse 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();
- 殺死主節點,可以看到從節點變為主節點,重新啟動主節點後,主節點還是主節點,不會變為從節點(老大永遠是老大);
參考:
MongoDB之主從複製和複本集(四)