《MongoDB高手課》學習記錄(第七天)

寫在前面

這周在出差,手頭只有一臺MAC,因此這節的學習全程在 MacOS 10.15.2 環境下進行。數據庫

第七天

今天要學習的是《11 | 實驗:搭建MongoDB複製集》,是對昨天學習內容的一個演練。windows

目標

經過在一個電腦上裝三個數據庫實例來搭建一個複製集,步驟以下:學習

  1. 啓動一個MongoDB實例;
  2. 將3個實例搭建成一個複製集
  3. 對複製集參數的常規調整

準備

  1. 安裝最新版本的MongoDB
  2. 配置環境變量,將Mongo的bin目錄配置到時PATH變量(若是是Windows就加到環境變量裏)
  3. 確保10GB以上的硬盤空間

建立數據目錄

由於是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

配置文件(mongod.conf)

Linux/MacOS

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 ## 進程在後臺運行

Windows

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

啓動MongoDB進程

每一個實例都須要啓動一下,經過ps命令能夠查看到進程是否是啓動了io

ps -ef |grep mongod

Linux/MacOS

mongod -f /data/db1/mongod.conf

Windows

窗口不能關,要否則進程就關了

mongod -f c:\data\db1\mongod.conf

配置複製集

方法1

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)
}

方法2

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上查看結果

28017

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 }

28018

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結點的複製集

相關文章
相關標籤/搜索