文章目录
前言
资料均为网上整理, 记录供后续项目维护
搭建环境
- Windows 10
- MongoDB 6.0.0(社区版)
- mongosh 2.0.2
- MongoDBCompass
一、安装所需的软件
1.安装MongoDB
由于是内部项目需求, 所以只需要社区版功能即可
地址: https://www.mongodb.com/try/download/community
安装流程:
2.安装mongosh
这里以 msi 安装方式为例
地址: https://www.mongodb.com/try/download/shell?jmp=docs
二、环境准备
1.配置环境变量
打开系统环境变量
在 path 变量下配置刚才安装MongoDB的 bin 目录, 如下图所示 :
2.创建数据文件夹
进入MongoDB的安装目录下的 data 目录文件夹
在其内部创建 master 和 slaver 文件夹
三、配置副本集
1、准备配置文件:
- master.conf
- master.log
- master.pid
- db
- slaver.conf
- slaver.log
- slaver.pid
- db
下面是我创建的实例:
2、编写配置文件
PS: 所有文件均要手动创建好, 不然会无法启动 ! ! !
需要编写 master.conf 与 slaver.conf 文件
- master.conf 文件内容如下
# mongodb端口
port=27018
# 绑定ip,只有这个ip才可以访问上mongodb
bind_ip=127.0.0.1
# 日志文件的路径
logpath=D:\mongodb6.0.0\rs\data\master\master.log
# 数据文件的目录
dbpath=D:\mongodb6.0.0\rs\data\master\db
# 日志以追加的方式存在
logappend=true
# mongodb进程的pid的值将存入此文件
pidfilepath=D:\mongodb6.0.0\rs\data\master\master.pid
# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
# oplogSize=1024
# 复制集的名称,同一个复制集的名称必须要相同
replSet=rs0
#副本集共享秘钥(目录以自己存放位置为准)
#keyFile=/home/mongod/mongodb/keyfile
#开启访问控制
#auth=true
- slaver.conf 文件内容如下
# mongodb端口
port=27019
# 绑定ip,只有这个ip才可以访问上mongodb
bind_ip=127.0.0.1
# 日志文件的路径
logpath=D:\mongodb6.0.0\rs\data\slaver\slaver.log
# 数据文件的目录
dbpath=D:\mongodb6.0.0\rs\data\slaver\db
# 日志以追加的方式存在
logappend=true
# mongodb进程的pid的值将存入此文件
pidfilepath=D:\mongodb6.0.0\rs\data\slaver\slaver.pid
# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
# oplogSize=1024
# 复制集的名称,同一个复制集的名称必须要相同
replSet=rs0
#副本集共享秘钥(目录以自己存放位置为准)
#keyFile=/home/mongod/mongodb/keyfile
#开启访问控制
#auth=true
3、启动副本集
需要开启三个命令行窗口
- 选择其中两个cmd 来作为启动MongoDB的启动窗口
输入以下命令:
mongod --config "D:\mongodb6.0.0\rs\conf\master.conf"
mongod --config "D:\mongodb6.0.0\rs\conf\slaver.conf"
- 连接27018节点
mongosh --port 27018
- 切换 admin 管理员, 并配置副本集
use admin
rsconf = {_id: "rs0",members: [{_id: 0,host: "127.0.0.1:27018","priority":10},{_id: 1,host: "127.0.0.1:27019"}]}
rs.initiate(rsconf)
# priority数值越高,就越有可能成为主节点
- 查看配置情况
rs.config()
# 查看副本集的配置和状态子集
rs.isMaster()
PS: 如果需要配置仲裁节点, 可以多创建一个配置文件(arbiter)来配置仲裁节点, 文件类似master\slaver
然后在主节点上配置仲裁节点即可
rs.addArb("host:port")
重新初始化
rs.reconfig()
4、测试
使用MongoDBCompass连接上 27018 和 27019 节点, 然后在其中一个节点上增加或删除集合, 看另一个节点是否同步
四、注册服务
按照 三、配置副本集搭建,只要cmd不关那么mongodb就能一直运行下去,但是谁又能保证不会失手关掉呢?接下来我们可以注册一下mongodb的副本集服务
- 请以管理员的身份打开 cmd
- 输入以下两个注册命令, 路径根据实际情况修改
mongod.exe --config "D:\mongodb6.0.0\rs\conf\master.conf" --service --serviceName "mongodbMaster" --install
mongod.exe --config "D:\mongodb6.0.0\rs\conf\slaver.conf" --service --serviceName "mongodbSlaver" --install
- 启动注册好的两个服务即可
net start mongodbMaster
net start mongodbSlaver
PS: 这里可能会出现 服务名 未注册的情况, 那是因为刚安装完MongoDB后, 会自动起一个27017的服务, 可以在W+R输入services.msc找到mongoDB的服务使用管理员打开cmd然后输入sc delele 服务名即可删除,之后再重新注册一下副本集的服务;
如果还是不行, 可能不适用conf文件注册,将conf文件上所需的配置一一提到命令行,例子:
mongod.exe --dbpath "" --pidfilepath "" --logpath "" --replSet "" ...... --service --serviceName "" --install
# 特别注意 replSet这个配置一定不能忘记,并且两个服务的replSet必须一样
然后注册再启动就好了
五、权限控制
** PS ** : 如果你需要用户权限控制, 那么你可能注意到配置文件里面注释掉的auth、keyFile属性
- 首先: 添加身份认证之前,必须先创建用户并设置授权,只需在主节点(PRIMARY)上添加用户即可,会自动同步到备份节点。
#在主节点服务器上连接mongodb
mongosh --port 27018
#切换admin数据库
> use admin;
#创建并认证root权限的用户
> db.createUser({user:"root",pwd:"root",roles:["root"]});
> db.auth("root","root"); //返回“1”,则认证成功
#切换并创建testLogs数据库(用户是针对数据库创建的)
> use testLogs;
#创建并认证读写权限用户(提供给应用连接的用户)
> db.createUser({user:"test",pwd:"test",roles:[{role:"readWrite",db:"testLogs"}]});
> db.auth("test",test"); //返回“1”,则认证成功
- 服务重启: 可以使用命令, 也可以直接在Windows服务里面停止
- 去掉注释保存配置,重新启动服务,启动顺序 主-从-从
- 验证一下用户验证是否添加成功吧
#连接数据库
mongosh --port 27018
#切换admin库
> use admin;
#查看集群状态
> rs.status();
提示需要认证才能执行rs.status()命令,至此认证已生效
- 认证后,即可操作:
db.auth("root","root");