MongoDB 高可用方案 - 主從複製

MongoDB 是當前比較流行的文檔型數據庫,其擁有易使用、易擴展、功能豐富、性能卓越等特性。

主節點會記錄寫有關的操作,讀操作不記錄。這些操作記錄在 local 數據庫中的 oplog.admin 和 slave 兩個集合。slave 記錄從節點信息。

從節點會定時去連接主節點,獲取主節點的操作日誌從而執行主節點一樣的操作,從而達到數據同步。從節點的 local 數據庫會有 source、me 兩個集合。source 記錄主節點信息,me 記錄從節點標識。

下面看一下怎麼一步步搭建 MongoDB 的主從複製節點:

  1. 準備兩臺機器 10.43.159.56 和 10.43.159.58。10.43.159.56 當作主節點, 10.43.159.58 作爲從節點。

  2. 分別下載 MongoDB 安裝程序包。在 10.43.159.56 上建立文件夾 / data/MongoDBtest/master,10.43.159.58 建立文件夾 / data/MongoDBtest/slave。

  3. 在 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
  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,絕大部分操作都是讀操作,可以實現負荷分擔。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/EvnjJz-OSov35HanTynZ-g