目录
一、前言
在日常使用MongoDB数据库时,我们可以根据不同的需求选择不同的部署方式,比如单机部署的单节点MongoDB,通过多机部署MongoDB集群模式;并且在默认情况下,MongoDB存储数据是不用填写密码,只需要有对应的数据库名称即可。
但在实际项目中,出于安全问题考虑,又需要在MongoDB中开启加密认证模式来访问数据库,那么针对不同方式部署的MongoDB又该如何开启加密认证模式呢?开启该模式后超图又该如何使用呢?下面就由小编来为大家一一解锁。
二、单节点MongoDB开启加密认证模式
2.1 安装单节点MongoDB
这里使用MongoDB4.4.18版本,在Linux CentOS7.5操作系统中验证部署演示。
1、使用tar命令解压位于opt目录下的MongoDB4.4.18安装包,并将解压包重命名
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.18.tgz
mv mongodb-linux-x86_64-rhel70-4.4.18 mongodb
2、进入解压好的MongoDB目录下,创建数据、日志、配置文件目录:
cd mongodb
mkdir data logs conf
3、在conf目录下创建MongoDB配置文件mongodb.conf,并添加如下内容:
vim conf/mongodb.conf
#数据库路径
dbpath=/opt/mongodb/data
#日志输出文件路径
logpath=/opt/mongodb/logs/mongodb.log
#错误日志采用追加模式
logappend=true
#启用日志文件,默认启用
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true
#端口号 默认为27017
port=27017
#允许远程访问
bind_ip=0.0.0.0
#开启子进程
fork=true
#开启认证,必选先添加用户,先不开启(不用验证账号密码)
#auth=true
4、进入MongoDB的bin目录下使用以下命令启动MongoDB服务:
cd /opt/mongodb/bin
./mongod -f ../conf/mongodb.conf
5、检查MongoDB数据库是否启动成功,并查看默认的数据库:
2.2 开启加密认证模式
1、进入MongoDB数据库后使用以下命令添加数据库超级管理员用户,并授权,最后退出MongoDB:
use admin
db.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:"admin"}]})
exit
2、修改配置文件,启用安全加密认证:
修改mongodb.conf文件,将最后一段安全登录认证部分开启
vim /opt/mongodb/conf/mongodb.conf
3、重启MongoDB服务,使上述认证配置生效:
cd /opt/mongodb/bin
#关闭MongoDB服务
./mongod -f ../conf/mongodb.conf --shutdown
#重启MongoDB服务
./mongod -f ../conf/mongodb.conf
至此,单节点MongoDB安装并开启加密认证模式已完成,我们可以通过两种方式验证加密认证是否生效;
方法1:进入MongoDB数据库,查看数据库dbs,发现返回结果为空,再重新进入admin数据库,并使用db.auth()方式进入后,重新查看数据dbs,能支持返回数据库,说明开启加密认证模式成功;
方法2:使用数据库管理工具连接测试,默认情况不输入用户名密码时直接提示“[未经授权]数据库需要身份验证”;当输入用户名和密码时则可以正常连接。
三、MongoDB集群模式开启加密认证模式
在MongoDB的使用过程中,我们经常会遇到当发生硬件故障或者其他原因导致数据无法正常的情况,那么这个时候就可以引入MongoDB的集群模式,可以通过搭建Replica Set副本集模式,来实现当数据冗余时的故障恢复功能,或者当发宕机时也可以进行恢复;此外使用副本集模式,还可以做到读写分离,来减轻主节点读的压力。
接下来就带着大家一起来进行MongoDB副本集模式的搭建,以及如何对其开启加密认证模式。
3.1 部署MongoDB集群
服务器配置
1、MongoDB集群部署,在mongodb01机器上使用tar命令解压并重命名MongoDB
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.18.tgz
mv mongodb-linux-x86_64-rhel70-4.4.18 mongodb
2、进入到MongoDB目录并创建数据、日志、配置文件目录
cd mongodb
mkdir data logs conf
3、创建MongoDB配置文件mongodb.conf,当前以yaml格式将配置信息写入到文件中:
vim conf/mongodb.conf
systemLog:
destination: file
logAppend: true
path: /opt/mongodb/logs/mongod.log
storage:
dbPath: /opt/mongodb/data
journal:
enabled: true
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 16 #默认为内存的50%,如果部署多个实例根据情况分配
directoryForIndexes: true
processManagement:
fork: true
pidFilePath: /opt/mongodb/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIpAll: true
maxIncomingConnections: 10000
unixDomainSocket:
pathPrefix: /opt/mongodb/data
#security:
#keyFile: /opt/mongodb/bin/mongo.keyfile
#authorization: enabled
replication:
oplogSizeMB: 51200
replSetName: myset
4、使用scp命令将已经配置好的MongoDB目录同步到另外两台机器,并启动MongoDB:
scp -r /opt/mongodb root@192.168.112.129:/opt/
scp -r /opt/mongodb root@192.168.112.130:/opt/
三台机器都启动MongoDB服务:
cd /opt/mongodb/bin/
./mongod -f ../conf/mongodb.conf
5、使用以下命令进入MongoDB服务中,并配置主、副本节点内容:
./mongo 192.168.112.128:27017
use admin
cfg = {_id: "myset",members:[{_id: 0,host: '192.168.112.128:27017',priority: 3},{_id: 1,host: '192.168.112.129:27017',priority: 2},{_id: 2,host: '192.168.112.130:27017',priority: 1}]};
rs.initiate(cfg)
rs.status()
至此,MongoDB副本集集群普通模式就搭建完成。
3.2 开启加密认证模式
1、进入MongoDB数据库中为超级管理员admin创建密码,新建普通用户并授权:
use admin
db.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:"admin"}]})
use test1
db.createUser({user: "test1", pwd: "123456", roles: [{role:"readWrite",db:"test1"}]})
2、在MongoDB的bin目录下使用以下命令生成密钥文件mongo.keyfile并修改文件权限:
cd /opt/mongodb/bin
openssl rand -base64 666 > mongo.keyfile
chmod 400 mongo.keyfile
3、调整mongodb.conf配置文件,将生成的key文件添加到MongoDB的mongodb.conf配置文件中,并将其同步到另外两台机器中;
scp -r mongo.keyfile root@192.168.112.129:/opt/mongodb/bin/
scp -r mongo.keyfile root@192.168.112.130:/opt/mongodb/bin/
将3.1部分的第3步中注释掉的“security”节点取消注释,然后保存。
4、进入到MongoDB的bin目录下,关闭三台机器的MongoDB服务,按照先关闭副本集节点,最后关闭主节点的顺序,然后再按照先启动主节点、再启动副本集节点的顺序启动:
./mongod -f ../conf/mongodb.conf --shutdown
./mongod -f ../conf/mongodb.conf
5、在主节点的MongoDB数据库中使用以下方法验证加密认证模式是否生效:
至此,MongoDB副本集集群开启认证模式操作完成,接下来就可以通过实际使用来验证了。
四、实际应用
在实际项目中,我们该如何对接这种开启加密认证的MongoDB数据库,接下来我们分为两种情况来考虑:一、已有切好的MongoDB瓦片,该如何导入?二、iDesktop和iServer该如何操作才能将瓦片存到开启认证的MongoDB数据库中?
4.1 瓦片迁移并发布
对于已有的MongoDB备份数据文件,该如何将其恢复到新环境的MongoDB库中呢,可以按照以下步骤实现:
1、将MongoDB备份文件迁移到新MongoDB所在机器的目录下,然后启动MongoDB服务,执行以下命令来将瓦片数据导入:
./mongorestore -u '用户名' -p '密码' --authenticationDatabase '数据库' -h 192.168.112.128:27017 -d '新库名' '备份数据所在路径'
./mongorestore -u admin -p 123456 --authenticationDatabase admin -h 192.168.112.128:27017 -d Quanguo202310 /app/Quanguo2023
2、创建新用户并将导入的数据授权给该用户:
./mongo
use admin
db.auth("admin","123456")
use Quanguo202310
db.createUser({user:"supermap",pwd:"123456",roles:[{role:"readWrite",db:"Quanguo202310"}]})
3、使用数据库管理工具可以检查导入的数据是否有同步到其他副本集中;也可以在iDesktopX中使用“瓦片管理”功能检查瓦片是否正常。
4、上述操作检查后,说明瓦片已经正常导入到新库中,接下来就可以使用iServer进行服务发布了。
4.2 开启认证的MongoDB存储瓦片并发布
对于要使用超图产品来实现将瓦片存储到开启认证的MongoDB中,可以参考如下操作,将瓦片存储到MongoDB中;
1、在MongoDB中创建test1新用户,用来存储瓦片:
use admin
db.auth("admin","123456")
use test1
db.createUser({user: "test1", pwd: "123456", roles: [{role:"readWrite",db:"test1"}]})
2、在iDesktop中可以将瓦片存到当前新建的MongoDB库中,存储类型填写主节点的信息,然后填写数据库和用户名密码
3、在iServer中,可以使用分布式切图服务,选择将地图切到MongoDB集群中
4、在iServer中发布MongoDB集群瓦片,若当前选择的数据库为空库时,发布会提示“当前配置中没有任何地图瓦片”;若选择的数据库中包含瓦片则可以正常跳转到下一步选择发布的服务类型。
五、总结
1、关于MongoDB配置文件mongodb.conf在编写时,如果使用普通格式,只需要注意路径没有错误即可;但当使用yaml格式时,就需要注意在换行后,遵循换行空两格,而不是Tab或者四个空格;如果格式不规范,则会出现MongoDB无法正常启动,或者无法正常执行操作的情况;(3.1部分)
2、在进行瓦片迁移过程中需要用到MongoDB的mongorestore方法,但由于mongodb不同版本之间安装包的不同,会出现有的版本在安装后,bin目录下有mongorestore文件,而有的版本安装完后却没有mongorestore文件,这个时候我们可以将其他版本的mongorestore文件拷贝到没有mongorestore的版本中,这样再去执行备份恢复的命令就可以正常了,需要注意mongorestore文件对应的架构要一致,比如x86的不能在windows上和arm架构的机器上使用;(4.1部分)
3、在部署MongoDB集群模式时,默认MongoDB副本集初始化的时候使用的是服务器的IP名;但如果配置初始化时设置的为【机器名+IP】”,就需要保证MonogDB各节点间机器名之间访问互通(即在系统配置文件/etc/hosts中添加配置 MonogDB集群机器名+IP)
并且iServer所在机器,也需要将使用到的MonogDB集群机器名+IP写到/etc/hosts配置文件中