一、前言

  雖然MongoDB官方已經不建議使用主從模式了,但是 熟悉下 也是有用的,替代方案是採用副本集的模式。slave預設情況下是不支援讀寫的,但是master會把資料同步到slave,不支援客戶端讀寫。客戶端連線slave時用命令支援讀:rs.slaveOk()。

二、主從配置

1.進入到 /usr/java 中,cd /usr/java

2.新建mongodbMaster-slave,mkdir  mongodbMaster-slave

3.進入到 mongodbMaster-slave 資料夾中,新建 master 和 slave 資料夾,mkdir  master  slave

4.進入到 master 和 slave 中,新建 data 和 log 檔案件,mkdir  data   log;進入到 data中,新建  db檔案件,mkdir  db

5.進入到 mongodbMaster-slave 中,配置 臨時的環境變數,export  PATH=/usr/java/mongodb/bin:$PATH

6.檢視臨時的環境變數是否配置成功:echo  $PATH

7.執行  mongod --help ,檢視幫助資訊

 

 --master:指定master節點;

 --slave:指定slave節點;

 --source :指向服務的埠。

8.將 mongodb 的配置檔案 拷貝到 master 和 slave 中:

 cp mongodb.conf ../mongodbMaster-slave/master/mongodb.conf

 cp mongodb.conf ../mongodbMaster-slave/slave/mongodb.conf

9.修改 master中的 mongodb.conf ,vim  mongodb.conf

dbpath=/usr/java/mongodbMaster-slave/master/data/db
logpath=/usr/java/mongodbMaster-slave/master/log/mongodb.log
logappend=true
fork=true
bind_ip=192.168.80.128 # master IP
port=27020 # master 埠
master=true # 設定為master
source=192.168.80.128:27021 # slave的IP 和 埠

同理修改 slave 中的mongodb.conf ,vim  mongodb.conf

dbpath=/usr/java/mongodbMaster-slave/slave/data/db
logpath=/usr/java/mongodbMaster-slave/slave/log/mongodb.log
logappend=true
fork=true
bind_ip=192.168.80.128 # slave IP
port=27021 # slave 埠
slave=true # 設定為 slave
source=192.168.80.128:27020 # master的IP 和 埠

10.啟動 master,進入到 master 資料夾中:

mongod --config mongodb.conf

  

11.啟動slave,進入到 slave 資料夾中:

mongod --config mongodb.conf

12.驗證主從是否配置成功

  1)客戶端連線 slave:

mongo --host  192.168.80.128  --port  27021

  方法一:執行:db.printSlaveReplicationInfo()  檢視 是否是從,source 指向的是 27020,即 master。

2)客戶端連線 slave,通過 檢視 local 資料庫中的 表的資訊 瞭解 對應的 master,我們 來看下 所有的 db,即 show  dbs,此時,發現報錯,如下:

2017-07-23T14:07:13.196-0700 E QUERY    Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }
at Error (<anonymous>)
at Mongo.getDBs (src/mongo/shell/mongo.js:47:15)
at shellHelper.show (src/mongo/shell/utils.js:630:33)
at shellHelper (src/mongo/shell/utils.js:524:36)
at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47

解決方法,執行 rs.slaveOK(),

  進入到local 資料庫,檢視 所有的表:show collections,發現有一個 sources ,我們 查詢 sources 表中的資料,db.sources.find():

查詢結果:{ "_id" : ObjectId("59750d91828f18cb9f133ef2"), "host" : "192.168.80.128:27020", "source" : "main", "syncedTo" : Timestamp(1500844337, 1) },發現 host對應的是 master 的IP和埠,說明 主從配置成功。

3)通過 在 master 中 插入幾條資料,然後 在 slave中 檢視 的方法,來看  主從 是否配置成功。

在master中執行 如下,插入 一條資料:

在slave中 執行如下,查詢資料:

可以看到 在 master 中 插入的資料,說明主從配置成功。

4)也可以 通過 db.isMaster() 檢視,在master中執行:

  在 slave中 執行: