MongoDB(四)-- 主從配置

1、前言

雖然MongoDB官方已經不建議使用主從模式了,可是 熟悉下 也是有用的,替代方案是採用副本集的模式。slave默認狀況下是不支持讀寫的,可是master會把數據同步到slave,不支持客戶端讀寫。客戶端鏈接slave時用命令支持讀:rs.slaveOk()。java

2、主從配置

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

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

3.進入到 mongodbMaster-slave 文件夾中,新建 master 和 slave 文件夾,mkdir master slave數據庫

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

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

6.查看臨時的環境變量是否配置成功:echo $PATHapp

img

7.執行 mongod --help ,查看幫助信息ui

img

  • --master:指定master節點;
  • --slave:指定slave節點;
  • --source :指向服務的端口。

8.將 mongodb 的配置文件 拷貝到 master 和 slave 中:spa

cp mongodb.conf ../mongodbMaster-slave/master/mongodb.conf
cp mongodb.conf ../mongodbMaster-slave/slave/mongodb.conf
複製代碼

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

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

img

11.啓動slave,進入到 slave 文件夾中:

mongod --config mongodb.conf

img

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

1)客戶端鏈接 slave:

mongo --host 192.168.80.128 --port 27021

方法一:執行:db.printSlaveReplicationInfo() 查看 是不是從,source 指向的是 27020,即 master。

img

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中執行 以下,插入 一條數據:

img

在slave中 執行以下,查詢數據:

img

能夠看到 在 master 中 插入的數據,說明主從配置成功。

4)也能夠 經過 db.isMaster() 查看,在master中執行:

img

在 slave中 執行:

img


歡迎關注個人公衆號,第一時間接收最新文章~ 搜索公衆號: 碼咖 或者 掃描下方二維碼:

img
相關文章
相關標籤/搜索