MongoDB 主從架構和復制集架構
阿新 • • 發佈:2018-04-19
MongoDB主從架構和復制集架構
主從架構:
mongodb支持傳統的master-slave架構。master節點負責數據的讀寫,slave沒有寫入權限。沒有自動故障轉移功能,需要指定master和slave端,不推薦在生產中使用。
主從架構的配置
環境:CentOS6.5 MongoDB3.4
master配置文件
master.conf
dbpath=/data/mongo/master logpath=/var/log/mongo/master/mongodb.log port=27017 bind_ip=127.0.0.1 master=true fork=true //後臺運行mongodb服務
slave配置文件
dbpath=/data/mongo/slave logpath=/var/log/mongo/slave/mongodb.log port=27018 bind_ip=127.0.0.1 slave=true fork=true //後臺運行mongodb服務 source=127.0.0.1:27017 //配置主的ip和端口
分別啟動master和slave
mongo --config master.conf mongo --config slave.conf
分別登錄master和slave
mongo 127.0.0.1:27017 mongo 127.0.0.1:27018
master上執行show dbs
> show dbs admin 0.000GB local 0.005GB
slave上執行show dbs報錯
> show dbs 2018-04-19T11:31:35.982+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435, "codeName" : "NotMasterNoSlaveOk" } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1 shellHelper.show@src/mongo/shell/utils.js:782:19 shellHelper@src/mongo/shell/utils.js:672:15 @(shellhelp2):1:1
這個報錯是因為默認情況下slave上沒有讀寫權限,可以在slave上執行下面的命令解決
> rs.slaveOk() //2.6版本設置方法不一樣 > show dbs admin 0.000GB local 0.000GB
測試:
在主庫上創建數據庫 masterslavetest 並創建一些測試數據
> use masterslave switched to db masterslave > for (i = 5000; i < 100000; i++) { ... db.users.insert({ ... "i": i, ... "userName": "user" + i, ... ... "age": Math.floor(Math.random() * 120), ... "created": new Date(), ... total: Math.floor(Math.random() * 100) * i ... }) ... } WriteResult({ "nInserted" : 1 })
在兩個實例上分別執行 以下命令 可以看到在兩個數據庫上的數據保持一致,這時在主數據庫上執行CRUD等操作時,從庫數據依然與主庫一致
db.users.find()
slave上同樣執行上面的命令
測試在slave節點上面添加一條數據看看
> db.mycoll.insert({"i":9999,"username":"test","age":30}) WriteResult({ "writeError" : { "code" : 10107, "errmsg" : "not master" } })
可以看到slave節點沒有寫入權限。
關掉master上的mongo進程看看
> show dbs 2018-04-19T11:58:43.464+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435, "codeName" : "NotMasterNoSlaveOk" } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1 shellHelper.show@src/mongo/shell/utils.js:782:19 shellHelper@src/mongo/shell/utils.js:672:15 @(shellhelp2):1:1 > rs.slaveOk() > > > show dbs admin 0.000GB local 0.000GB masterslave 0.005GB
slave還是沒有寫入權限
MongoDB 主從架構和復制集架構