前言

近期有搭建MongoDB副本集的需求,简单记录一下搭建过程(以本地Windows环境为例)。

一、副本集选型

1 Primary节点、1 Secondary 节点、1 Arbiter节点模式副本集环境搭建。

二、搭建过程

1. 安装MongoDB服务

下载地址:https://www.mongodb.com,如下图所示:
MongoDB官网

选择版本下载,这里使用的是4.0版本。
MongoDB官网
下载完之后,安装步骤超简单,就不赘述了。
验证是否安装成功,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来验证密码是否生效:
在这里插入图片描述
在这里插入图片描述


结语

以上搭建过程是通过查资料+实践摸索出来的,未尽之处还请留言斧正。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐