MongoDB高可用方案之主從復制
MongoDB 是當前比較流行的文檔型數據庫,其擁有易使用、易擴展、功能豐富、性能卓越等特性。
主節點會記錄寫有關的操作,讀操作不記錄。這些操作記錄在local數據庫中的oplog.admin和slave兩個集合。slave記錄從節點信息。
從節點會定時去連接主節點,獲取主節點的操作日志從而執行主節點一樣的操作,從而達到數據同步。從節點的local數據庫會有 source、me兩個集合。source記錄主節點信息,me記錄從節點標識。
下面看一下怎么一步步搭建MongoDB的主從復制節點:
準備兩臺機器 10.43.159.56 和 10.43.159.58。10.43.159.56當作主節點, 10.43.159.58作為從節點。
分別下載MongoDB安裝程序包。在10.43.159.56上建立文件夾/data/MongoDBtest/master,10.43.159.58建立文件夾/data/MongoDBtest/slave。
在10.43.159.56啟動MongoDB主節點程序。注意后面的這個 “ –master ”參數,標示主節點:
mongod –dbpath /data/MongoDBtest/master–master
輸出日志如下,成功:
[initandlisten] MongoDB starting :pid=18285 port=27017 dbpath=/data/MongoDBtest/master master=1
在10.43.159.58啟動MongoDB從節點程序。關鍵配置:指定主節點ip地址和端口 –source 10.43.159.56:27017 和標示從節點 –slave參數:
mongod –dbpath /data/MongoDBtest/slave–slave –source 10.43.159.56:27017
輸出日志如下,成功:
[initandlisten] MongoDB starting : pid=17888port=27017 dbpath=/data/MongoDBtest/slave slave=1
日志顯示從節點從主節點同步復制數據 :
[replslave] repl: from host: 10.43.159.56:27017
這樣,主從結構的MongoDB集群就搭建好了,是不是很簡單?
下面我們來看看這個集群能做什么?先登錄到從節點shell上,執行插入數據:
mongo 127.0.0.1:27017
> db.testdb.insert({"test3":"testval3"});
not master
可以看到 MongoDB的從節點是只能讀,不能執行寫操作的。
那么如果主服務器掛掉,從服務器可以接替工作嗎?
可以試一下,強制關掉主節點上的MongoDB進程,登錄在從節點上,再次執行插入數據:
> db.testdb.insert({"test3":"testval3"});
not master
看來從節點并沒有自動接替主節點的工作,那就只有人工處理了,停止從節點,再以master的方式啟動從節點,由于從節點上數據跟主節點一樣,此時從節點是可以替代主節點工作的,這屬于人工切換。
此外,我們可以搭建多個從節點,實現數據庫的讀寫分離,比如主節點負責寫,多個從節點負責讀,對于移動APP,絕大部分操作都是讀操作,可以實現負荷分擔。
































