写在前面这周在出差,手头只有一台MAC,所以这节的学习全程在 MacOS 10.15.2 环境下进行。 第七天今天要学习的是《11 | 实验:搭建MongoDB复制集》,是对昨天学习内容的一个演练。 目标通过在一个电脑上装三个数据库实例来搭建一个复制集,步骤如下: 启动一个MongoDB实例; 将3个实例搭建成一个复制集 对复制集参数的常规调整
准备安装最新版本的MongoDB 配置环境变量,将Mongo的bin目录配置到时PATH变量(如果是Windows就加到环境变量里) 确保10GB以上的硬盘空间
创建数据目录因为是3个实例,所以要创建3个不同的目录来保存数据文件、配置文件及日志文件。 实例目录/data/db1
/data/db2
/data/db3
可通过下面一条命令创建(MacOS及Linux) mkdir -p /data/db{1,2,3}
windows下一个一个建吧 日志文件统一命名为mongod.log,每个目录下面一个 配置文件统计命名为mongod.conf,每个目录下面一个 准备配置文件端口28017、28018、28019,每个实例指向不同的端口 配置文件(mongod.conf)Linux/MacOSsystemLog:
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 ## 进程在后台运行
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进程每个实例都需要启动一下,通过ps命令可以查看到进程是不是启动了 ps -ef |grep mongod
Linux/MacOSmongod -f /data/db1/mongod.conf
Windows窗口不能关,要不然进程就关了 mongod -f c:\data\db1\mongod.conf
配置复制集方法1hostname替换成实际的主机名,需要 /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)
}
方法2mongo --port 28017
> rs.initiate({
_id: "rs0",
members: [
{
_id: 0,
host: "localhost:28017"
},
{
_id: 1,
host: "localhost:28018"
},
{
_id: 2,
host: "localhost:28019"
}
]
})
验证配置在28017上插入数据,然后在28018上查看结果 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() ## 从结点可以读数据
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结点的复制集
|