這周在出差,手頭只有一臺MAC,因此這節的學習全程在 MacOS 10.15.2 環境下進行。數據庫
今天要學習的是《11 | 實驗:搭建MongoDB複製集》,是對昨天學習內容的一個演練。windows
經過在一個電腦上裝三個數據庫實例來搭建一個複製集,步驟以下:學習
由於是3個實例,因此要建立3個不一樣的目錄來保存數據文件、配置文件及日誌文件。日誌
/data/db1 /data/db2 /data/db3
可經過下面一條命令建立(MacOS及Linux)code
mkdir -p /data/db{1,2,3}
windows下一個一個建吧進程
統一命名爲mongod.log,每一個目錄下面一個ci
統計命名爲mongod.conf,每一個目錄下面一個hash
2801七、2801八、28019,每一個實例指向不一樣的端口it
systemLog: destination: file path: /data/db1/mongod.log ## 日誌 logAppend: true storage: dbPath: /data/db1 ## 數據目錄 net: bindIp: 0.0.0.0 ## 本機全部網卡鏈接都提供對外服務 port: 28017 ## 端口號 replication: replSetName: rs0 ## 複製集的名字爲 rs0 processManagement: fork: true ## 進程在後臺運行
systemLog: destination: file path: c:\data\db1\mongod.log logAppend: true storage: dbPath: c:\data\db1 net: bindIp: 0.0.0.0 port: 28017 replication: replSetName: rs0
每一個實例都須要啓動一下,經過ps命令能夠查看到進程是否是啓動了io
ps -ef |grep mongod
mongod -f /data/db1/mongod.conf
窗口不能關,要否則進程就關了
mongod -f c:\data\db1\mongod.conf
hostname替換成實際的主機名,須要 /etc/hosts 文件中作了配置,能解析
mongo --port 28017 > rs.initiate() > rs.add("HOSTNAME:28018") > rs.add("HOSTNAME:28019")
運行結果記錄
> rs.initiate() { "info2" : "no configuration specified. Using a default configuration for the set", "me" : "MacBook-Pro.local:28017", "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1577280751, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1577280751, 1) } rs0:SECONDARY> rs0:PRIMARY> rs.add("MacBook-Pro.local:28018") { "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1577280789, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1577280789, 1) } rs0:PRIMARY> rs.add("MacBook-Pro.local:28019") { "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1577280794, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1577280794, 1) }
mongo --port 28017 > rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "localhost:28017" }, { _id: 1, host: "localhost:28018" }, { _id: 2, host: "localhost:28019" } ] })
在28017上插入數據,而後在28018上查看結果
rs0:PRIMARY> db.test.findOne() null rs0:PRIMARY> db.test.insert({a:1}) WriteResult({ "nInserted" : 1 }) rs0:PRIMARY> db.test.findOne() { "_id" : ObjectId("5e03695cbed9486c92da1acd"), "a" : 1 } rs0:PRIMARY> db.test.insert({a:2}) WriteResult({ "nInserted" : 1 }) rs0:PRIMARY> db.test.find() { "_id" : ObjectId("5e03695cbed9486c92da1acd"), "a" : 1 } { "_id" : ObjectId("5e03696cbed9486c92da1ace"), "a" : 2 }
rs0:SECONDARY> rs.slaveOk() ## 從結點能夠讀數據 rs0:SECONDARY> db.test.find() ## 不然這條報錯 rs0:SECONDARY> db.test.find() { "_id" : ObjectId("5e03695cbed9486c92da1acd"), "a" : 1 } rs0:SECONDARY> db.test.find() { "_id" : ObjectId("5e03695cbed9486c92da1acd"), "a" : 1 } { "_id" : ObjectId("5e03696cbed9486c92da1ace"), "a" : 2 } rs0:SECONDARY>
今天主要學習瞭如何在一臺實體機器上,經過不一樣的端口來模擬搭建一個3結點的複製集