Windows下本机搭建MongoDB复制集
一、新建目录
打开windows的ctrl+r ,输入poweshell
输入以下命令,创建三个文件夹:
md d:\data\db1
md d:\data\db2
md d:\data\db3
实际环境上我们应该要搭建在三台不同的机器上(不然搭了白搭),但是现在我们要在一台机器上运行三个进程,因此我们为他们各自设置不同的配置。
其不同的配置分别为:
-
不同的端口
- 这里我们设置端口分别为:28017/28018/28019
-
不同的数据目录
-
数据目录为
-
d:\data\db1
d:\data\db2
d:\data\db3
-
-
不同日志文件路径
-
日志文件路径为:
d:\data\db1\mongod.log
d:\data\db2\mongod.log
d:\data\db3\mongod.log
-
二、写配置文件
我们来写一个配置文件:
第一个配置文件如下: d:\data\db1\mongod.conf
systemLog:
destination: file
path: d:\data1\mongod.log #日志文件路径
logAppend: true
storage:
dbPath: d:\data1\# 数据目录
net:
bindIp: 0.0.0.0 # mongoDB会在所有的网卡的地址上监听
port: 28017 # 端口
replication:
replSetName: rs0 # 表示当前是复制集,不加的话就表示当前是单节点
第二个配置文件如下: d:\data\db2\mongod.conf
systemLog:
destination: file
path: d:\data2\mongod.log #日志文件路径
logAppend: true
storage:
dbPath: d:\data2\ # 数据目录
net:
bindIp: 0.0.0.0 # mongoDB会在所有的网卡的地址上监听
port: 28018 # 端口
replication:
replSetName: rs0 # 表示当前是复制集,不加的话就表示当前是单节点
第三个配置文件如下: d:\data\db3\mongod.conf
systemLog:
destination: file
path: d:\data3\mongod.log #日志文件路径
logAppend: true
storage:
dbPath: d:\data3 # 数据目录
net:
bindIp: 0.0.0.0 # mongoDB会在所有的网卡的地址上监听
port: 28019 # 端口
replication:
replSetName: rs0 # 表示当前是复制集,不加的话就表示当前是单节点
运行前请先在D盘建立三个文件夹,分别为data1 data2 data3
至此,配置文件完成。
三、运行
win+r,打开一个新的cmd,输入:
mongod -f d:data/db1/mongod.conf
输入完之后再新开两个cmd,分别输入
mongod -f d:\data\db2\mongod.conf
mongod -f d:\data\db3\mongod.conf
注意,在windows中必须新开cmd才可以进行操作。否则进程将直接结束。
现在我们已经新开了三个数据节点,但是他们此时是彼此独立的。
四、让他们连起来~!
现在我们要配置复制集,当前有两个方法。
首先保证我们的hostname可以被解析:
输入hostname查看当前主机名
方法1:
在mongo里面设置。
在命令行输入
mongo localhost:28017
继续输入:
rs.initiate()
这时我们的输入变成了:
这表示我们当前节点已经不再是一个单节点,而是一个复制集节点。SECONDARY表示这时一个从节点。
再按一下回车,
这表示当前我们的节点已经从Secondary节点变为一个PRIMARY节点。输入rs.status()可以查看属性,其中members属性表示我们当前的复制集有多少个节点。
现在只有一个,我们往里面添加新的节点。
输入:
rs.add(Sitr2020:28018)
可以添加第二个节点。
同样的,输入以下可以添加第三个节点:
rs.add(Sitr2020:28019)
再输入rs.status(),查看属性members,会发现已经多了两个节点。
现在我们可以验证一下。
五、验证
为了更方便地看到效果,我们新开一个powershell查看效果。
我们打开,输入:
mongo localhost:28018
然后我们试一下往新开的powershell里面输入rs.salveOk()以便让我们可以在从节点读取数据。
在主节点的test数据库输入插入数据:
db.test.insert({a:1})
插入后,我们再往从节点的powershell上查询test数据库:
db.test.find()
可以发现,是可以查到新插入的数据的。