文章目录
前言
近期有搭建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来验证密码是否生效:
结语
以上搭建过程是通过查资料+实践摸索出来的,未尽之处还请留言斧正。