文章目录
前言
近期有搭建MongoDB副本集的需求,简单记录一下搭建过程(以本地Windows环境为例)。一、副本集选型
1 Primary节点、1 Secondary 节点、1 Arbiter节点模式副本集环境搭建。
二、搭建过程
1. 安装MongoDB服务
下载地址:https://www.mongodb.com,如下图所示:

选择版本下载,这里使用的是4.0版本。

下载完之后,安装步骤超简单,就不赘述了。
验证是否安装成功,cd到bin目录下,如C:\Program Files\MongoDB
\Server\4.0\bin,使用命令mongod -version验证,如下图所示:

正常显示版本信息即安装成功,为了方便使用可以配一下环境变量。
2.起一个MongoDB服务
(1)服务启动:
mongod --config ./mongod.cfg

(2)使用mongo客户端连接:
mongo --port 27017 //默认端口27017

3.副本集环境准备
分别创建3个节点配置文件及文件目录:
1、29017
配置文件:mongod-29017.cfg
E:\MongoDB\Server\4.0\db29017\data
E:\MongoDB\Server\4.0\db29017\log
2、29018
配置文件:mongod-29018.cfg
E:\MongoDB\Server\4.0\db29018\data
E:\MongoDB\Server\4.0\db29018\log
3、29019
配置文件:mongod-29019.cfg
E:\MongoDB\Server\4.0\db29019\data
E:\MongoDB\Server\4.0\db29019\log
4.副本集初始化
启动29017节点,mongod --config ./mongod-29017.cfg

使用mongo客户端连接29017节点:mongo --port 29017

如上所示,依次启动29018、29019。
按默认配置初始化副本集:rs.initiate()

副本集按默认配置初始化时,只有当前一个节点,默认是SECONDARY,接下来我们添加另一个正常节点和仲裁节点(只做投票,不存数据)。
rs.add(“ip:port”)、rs.addArb(“ip:port”),如下图所示:

两个节点添加成功,使用rs.status()命令查看一下副本集状态:



读图可知,此副本集3个成员(1 Primary 、 1 Secondary 、 1 Arbiter)。

从mongo客户端可以看出,当前29017是Primary节点,29018是Secondary节点(29017和29018可以根据彼此状态切换)。接下来测试Primary宕机之后,另一个服务是否能切换为Primary:

关掉29017服务之后,29018选举为Primary节点。此时再把29017服务启动,可以看到29017变为了Secondary节点:

5.副本集数据共享测试
接下来我们试一下副本集之间的数据共享。再强调一下各节点的功能:Primary负责读写、Secondary只读、Arbiter 只负责投票,不做数据同步。
主节点写入数据:

从节点查询:

在mongo客户端使用Secondary查询时,提示“not master and slaveOk=false”,需要执行rs.slaveOk()声明一下从节点准备就绪,然后再查询:

6.MongoDB访问控制设置

MongoDB默认不开启访问控制,如果想开启的话可以在启动时加 --auth命令或者在配置文件加security.authorization: enable。
开启之前访问控制之前先创建用户哦~
首先在admin库添加具有root权限用户, 如:

再去实际用到的存储库添加读写用户:

然后开启访问控制,这里我们使用改配置文件的方式开启访问控制:

重新启动MongoDB。

使用mongo连接MongoDB时是不用密码验证的,做读写操作时,则提示错误:

使用db.auth(“用户名”,“密码”)认证。

返回1,认证成功。

认证成功之后查询成功。
7.MongoDB访问控制设置规则(副本集)
相较单机设置来说,副本集访问控制多了一个keyFile 配置,是为了副本集成员之间认证的,官网对keyFile有如下解释:

每个副本集成员都要有一份fileKey,文件位置在cfg中配置,如下图所示:

创建keyFile规则如下,可以使用openssl随机生成,命令如下所示:
openssl rand -base64 666 > ./mongodb.keyfile

8.MongoDB访问控制设置实践(副本集)
首先,Primary节点创建root用户和readWrite用户(会同步到Secondary节点):


生成keyfile,分别放到3个节点的目录下,并分别配置到配置文件中。
我这里是手敲了一段符合base64规范的字符串,来当做keyfile:




配置完成之后,重启副本集三个节点,然后使用和单机一样的方式分别在Primary和Secondary来验证密码是否生效:


结语
以上搭建过程是通过查资料+实践摸索出来的,未尽之处还请留言斧正。
本文详述了在Windows环境下搭建MongoDB副本集的步骤,包括配置文件创建、副本集初始化、数据共享测试及访问控制设置。通过实例展示了在Primary节点故障时,Secondary节点自动切换为Primary的过程,确保高可用性。同时,介绍了启用访问控制的方法和注意事项,确保数据安全。
1629





