这周在出差,手头只有一台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结点的复制集