搭建`mongodb`副本集-开启权限认证 mongo:7.0.5

搭建mongodb副本集-开启权限认证 mongo:7.0.5

1.5.1、创建文件

创建配置文件保存目录和数据保存目录
shell 复制代码
mkdir -p /data/mongodb/{/conf,/data,/logs}
  • 生成和设置权限

这个文件一定要在一个服务里面生成然后复制到其它服务器,所有服务器的这个key一定是相同的。

shell 复制代码
openssl rand -base64 756 > /data/mongodb/conf/mongodbKeyfile.key

chmod 400 /data/mongodb/conf/mongodbKeyfile.key

192.168.1.124节点生成,然后复制到其它4个节点中。

shell 复制代码
scp mongodbKeyfile.key root@192.168.1.125:/data/mongodb/conf
scp mongodbKeyfile.key root@192.168.1.126:/data/mongodb/conf
scp mongodbKeyfile.key root@192.168.1.127:/data/mongodb/conf
scp mongodbKeyfile.key root@192.168.1.128:/data/mongodb/conf

1.5.2、配置文件

  • 第一台MongoDB配置文件

注意:更改端口号为最终端口号。这里的配置文件里面,不增加任何认证的问题,因为这只是为了集群和创建用户用的,后面需要重新覆盖掉。

shell 复制代码
vim /data/mongodb/conf/mongod.conf
shell 复制代码
net:
  port: 27017 # 这是启动端口
  bindIp: 0.0.0.0  # 允许哪些ip连接(好像和下面的命令参数 --bind_ip_all 相类似的作用)
systemLog:
  logAppend: true #  重新启动的mongodb的时候日志拼接在以前的日志文件上,不用新建
security:
  keyFile: /data/configdb/mongodbKeyfile.key  # 这个路径很重要(注意这个路径是下面容器映射过的路径),不要写宿主机的绝对路径,容器是访问不到宿主机的,应该写容器中的路径。
  authorization: "enabled" # 开启客户端连接验证
replication:
  replSetName: "rs"  # 副本集的名称
setParameter:
  # 事务锁超时最长时间(毫秒)默认 3 毫秒
  maxTransactionLockRequestTimeoutMillis: 1000

1.5.3、创建启动命令

首先不要增加任何认证,先启动不用认证的mongodb,在里面将需要的集合、副本和用户名密码权限等信息创建好,在使用需要认证的命令重新创建容器。因为配置的信息已经映射到宿主机上了,只要不把宿主机上的数据删除,所有配置都是存在的。

shell 复制代码
mkdir -p /opt/docker
vi /opt/docker/mongodb.sh
  • 不用认证的命令
shell 复制代码
MONGODB_DIR=/data/mongodb
NAME=mognodb
CONF=/data/mongodb/conf
docker stop ${NAME}
docker rm ${NAME}
docker run --name ${NAME} \
	-p 35964:27017 \
    -v ${MONGODB_DIR}/data:/data/db \
    -v ${CONF}:/data/configdb \
    -v ${MONGODB_DIR}/logs:/data/log \
   -d mongo:7.0.5 \
     --replSet "rs"

  • 启动
sh 复制代码
sh /opt/docker/mongodb.sh

1.5.4、配置副本

  • 连接任意一个节点,进行副本集配置
shell 复制代码
docker exec -it mognodb /bin/bash

连接三个节点中的任意一个,链接这个就是主节点。

shell 复制代码
./usr/bin/mongosh
  • 配置副本
shell 复制代码
var config={
     _id:"rs",
     members:[
         {_id:1,host:"192.168.1.124:35964",priority:5},
         {_id:2,host:"192.168.1.125:35964",priority:4},
         {_id:3,host:"192.168.1.126:35964",priority:3},
         {_id:4,host:"192.168.1.127:35964",priority:2},
         {_id:5,host:"192.168.1.128:35964",priority:1},
]};
rs.initiate(config)
  • 查看副本集配置信息
shell 复制代码
 rs.conf()
  • 查看副本集状态
shell 复制代码
rs.status()

1.5.5、创建用户名和密码

  • 切换数据库和创建用户
shell 复制代码
use userdb
db.createUser({ user: 'oeirnergnekladc', pwd: 'aE3UurXjWtxbHN80RCxL', roles: [ { role: "root", db: "admin" } ] });
db.auth('oeirnergnekladc', 'aE3UurXjWtxbHN80RCxL');

这里需要注意权限的问题,权限给root似乎太大了,但是也不能给太小,给太小会发现干啥都没权限。

1.5.6、创建需要认证的启动命令

  • 先退出mongodb和容器,回到宿主机
shell 复制代码
exit
exit

把原来的启动命令删除,重新编辑启动命令。

shell 复制代码
rm -rf /opt/docker/mongodb.sh
vi /opt/docker/mongodb.sh
  • 写入启动命令
shell 复制代码
MONGODB_DIR=/data/mongodb
NAME=mognodb
CONF=/data/mongodb/conf
docker stop ${NAME}
docker rm ${NAME}
docker run --name ${NAME} \
	-p 35964:27017 \
    -v ${MONGODB_DIR}/data:/data/db \
	-v ${CONF}:/data/configdb \
    -v ${MONGODB_DIR}/logs:/data/log \
    --restart=always \
    -d mongo:7.0.5 \
     --replSet "rs"  \
	 --auth --bind_ip_all -f "/data/configdb/mongod.conf"
  • 重启mongodb
shell 复制代码
sh /opt/docker/mongodb.sh

原创不易,转发制定出处,感谢网友理解

相关推荐
Tttian6226 分钟前
基于Pycharm与数据库的新闻管理系统(2)Redis
数据库·redis·pycharm
做梦敲代码1 小时前
达梦数据库-读写分离集群部署
数据库·达梦数据库
小蜗牛慢慢爬行2 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger2 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud2 小时前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡2 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷2 小时前
Redis
数据库·redis·缓存
仰望大佬0073 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名3 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库