寫在前面這周在出差,手頭只有一臺MAC,所以這節(jié)的學(xué)習(xí)全程在 MacOS 10.15.2 環(huán)境下進(jìn)行。 第七天今天要學(xué)習(xí)的是《11 | 實(shí)驗(yàn):搭建MongoDB復(fù)制集》,是對昨天學(xué)習(xí)內(nèi)容的一個演練。 目標(biāo)通過在一個電腦上裝三個數(shù)據(jù)庫實(shí)例來搭建一個復(fù)制集,步驟如下: 啟動一個MongoDB實(shí)例; 將3個實(shí)例搭建成一個復(fù)制集 對復(fù)制集參數(shù)的常規(guī)調(diào)整
準(zhǔn)備安裝最新版本的MongoDB 配置環(huán)境變量,將Mongo的bin目錄配置到時PATH變量(如果是Windows就加到環(huán)境變量里) 確保10GB以上的硬盤空間
創(chuàng)建數(shù)據(jù)目錄因?yàn)槭?個實(shí)例,所以要創(chuàng)建3個不同的目錄來保存數(shù)據(jù)文件、配置文件及日志文件。 實(shí)例目錄/data/db1
/data/db2
/data/db3
可通過下面一條命令創(chuàng)建(MacOS及Linux) mkdir -p /data/db{1,2,3}
windows下一個一個建吧 日志文件統(tǒng)一命名為mongod.log,每個目錄下面一個 配置文件統(tǒng)計(jì)命名為mongod.conf,每個目錄下面一個 準(zhǔn)備配置文件端口28017、28018、28019,每個實(shí)例指向不同的端口 配置文件(mongod.conf)Linux/MacOSsystemLog:
destination: file
path: /data/db1/mongod.log ## 日志
logAppend: true
storage:
dbPath: /data/db1 ## 數(shù)據(jù)目錄
net:
bindIp: 0.0.0.0 ## 本機(jī)所有網(wǎng)卡連接都提供對外服務(wù)
port: 28017 ## 端口號
replication:
replSetName: rs0 ## 復(fù)制集的名字為 rs0
processManagement:
fork: true ## 進(jìn)程在后臺運(yùn)行
WindowssystemLog:
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進(jìn)程每個實(shí)例都需要啟動一下,通過ps命令可以查看到進(jìn)程是不是啟動了 ps -ef |grep mongod
Linux/MacOSmongod -f /data/db1/mongod.conf
Windows窗口不能關(guān),要不然進(jìn)程就關(guān)了 mongod -f c:\data\db1\mongod.conf
配置復(fù)制集方法1hostname替換成實(shí)際的主機(jī)名,需要 /etc/hosts 文件中做了配置,能解析 mongo --port 28017
> rs.initiate()
> rs.add("HOSTNAME:28018")
> rs.add("HOSTNAME:28019")
運(yùn)行結(jié)果記錄 > 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)
}
方法2mongo --port 28017
> rs.initiate({
_id: "rs0",
members: [
{
_id: 0,
host: "localhost:28017"
},
{
_id: 1,
host: "localhost:28018"
},
{
_id: 2,
host: "localhost:28019"
}
]
})
驗(yàn)證配置在28017上插入數(shù)據(jù),然后在28018上查看結(jié)果 28017rs0: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 }
28018rs0:SECONDARY> rs.slaveOk() ## 從結(jié)點(diǎn)可以讀數(shù)據(jù)
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>
總結(jié)今天主要學(xué)習(xí)了如何在一臺實(shí)體機(jī)器上,通過不同的端口來模擬搭建一個3結(jié)點(diǎn)的復(fù)制集
|