本部署MongoDB副本集是没有用其他的配置什么的(例如: mongodb-compass)。是最简单的一个

我是为了mongodb的事务才配置的这个副本集,要使用mongodb的事务必须要副本集。

那我们直接入主题:

MongoDB的副本集最简单至少要有三个mongodb实例(已测试);

首先创建文件(这文件的路径想在哪里创建随你喜欢)但要和下面的名令路径对应:

在 root 文件夹下 创建 三个文件夹 分别是 mongo0,mongo1,mongo2。

再这 三个文件夹里分别 创建文件夹 configdb,db。 然后在文件夹 configdb 里创建文件 mongod.conf

在 mongod.conf 里配置

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: "rs0"                          # 副本集的名称
 (集群内部验证官方推荐使用 x.509证书,但用 keyFile 方式简单,大多数用于测试环境)。

再然后根据配置文件上 keyFile 的 路径创建 mongodbKeyfile.key(注意每个实例都要一个),命令如下:

openssl rand -base64 756 > /root/mongo0/configdb/mongodbKeyfile.key
 
// 密钥长度必须介于6到1024个字符之间,并且只能包含base64集中的字符。
 
chmod 400 /root/mongo0/configdb/mongodbKeyfile.key
 
// 仅为文件所有者提供读取权限
 如果你开了客户端验证,但没使用 keyFile 内部验证,在初始化集群的时候,会报错(大概意思是:196.168.0.1:端口号 的服务连接不上,需要授权验证),所以最好两个验证方式一起开启。

然后就可以创建实例了,在同一个服务器(ip如:196.168.0.1) 上的在docker上起三个实例,命令如下:

mongo_db:

image: mongo

container_name: mongo_db

restart: always

ports:

- "27017:27017"

environment:

TZ: Asia/Shanghai

volumes:

- "/etc/localtime:/etc/localtime"

- ./mongodb/configdb:/data/configdb

- "/mnt/sdb1/mongo/data/db:/data/db"

command: mongod --replSet rs0 -f /data/configdb/mongod.conf

#mongo_db:

mongotest_db:

image: mongo

container_name: mongotest_db

restart: always

ports:

- "27018:27017"

environment:

TZ: Asia/Shanghai

volumes:

- "/etc/localtime:/etc/localtime"

- ./mongodb2/configdb:/data/configdb

- "/mnt/sdb1/mongo2/data/db:/data/db"

command: mongod --replSet rs0 -f /data/configdb/mongod.conf

这是映射MongoDB的配置(但创建实例后里面没配置的,感觉好像没啥用,反正这样玩就对了)(这个路径随你写,但先要创建好)

/root/mongo0/db/:/data/db/                          这是映射MongoDB的储存数据的路径(这个路径随你写,但先要创建好)

--replSet "rs0"                                 "mongoRs" 这是你的集群的名称(一定要有 replSet 要不然机器认为你不是以副本集的形式启动,创建不了集群)

-f /data/configdb/mongod.conf                 这是以这个配置文件启动mongodb

然后就选取一个作为主节点,默认你在哪个实例开启副本集的初始化,哪个就是主节点,我这里选着mongo0。

运行以下命令:

docker exec -it fb1517df4885 mongo admin
这命令是以admin角色连接mongo。输完命令出现下面的页面:

然后就可以初始化集群了,这里面的主机地址是可以不一样的,但是要连接的上才行。像阿里云的就要开放端口才行

var myconf = {"_id":"rs0","members":[{"_id":0,"host":"192.168.0.185:27017"},{"_id":1,"host":"192.168.0.185:27018"}]}

rs.initiate(myconf)

初始化成功后就出现 “OK” : 1 ,还有下面的命令前缀也变了。这样配置就大功告成。

可以输入rs.status() 查看副本集的状态。

输入 rs.config() 查看副本集的配置。

副本集已经创建好,现在就可以添加用户验证了:

运行命令

先选择admin数据库 
   use admin
 
再创建用户 
   db.createUser({ user: 'admin', pwd: 'admin123456', roles: [ { role: "root", db: "admin" } ] });
// 这是创建一个超级管理员
// role: "root" 权限,这个你可以随便选
// db: "admin" 在这个数据库上创建

创建好了,再验证才能使用
  db.auth("admin","admin123456")

这样就完成啦!  这篇文章如果对你有帮助请 点赞 哟!!!

题外话:

我以配置文件启动容器的时候,容器启动失败,查看日志,提示Keyfile的找不到(之前的路径不是上面那个,是另外一个像/root/Keyfile.key这样的),当时我就郁闷了,这路径我拷贝过来的,我都确认两三遍了,怎么可能会错。而且是参考网上的博客的,怎么别人就行,我的就不行。查各种资料搞了蛮久,我就突然想起 docker 容器 是不可以 直接 访问外部的资源的,所以我们可以把 容器的路径映射 到 服务器的路径上 ,把文件放在里面,docker 容器就可以访问了。

<·········································································· 完毕 ····················································································>

参考资料:

mongodbKeyfile创建

官方网址:https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/

mongodb配置文件:

官方网址:https://docs.mongodb.com/manual/reference/configuration-options/#use-the-configuration-file

博客: https://www.jianshu.com/p/f9f1454f251f

副本集管理:http://blog.chinaunix.net/uid-26446098-id-5781438.html

https://blog.csdn.net/weixin_34034261/article/details/90275538

副本集配置:https://blog.csdn.net/pengjunlee/article/details/84101732

https://blog.csdn.net/quanmaoluo5461/article/details/85164588

https://www.cnblogs.com/cwp-bg/p/10403327.html

副本集角色说明:

https://blog.csdn.net/ljk168/article/details/79441327

DockerCompose MongoDB 副本集(集群) (客户端验证密码 - 集群内部使用mongodbKeyfile验证 ) 部署相关推荐

  1. 群晖服务器密码修改,群晖修改transmission默认账户密码

    群晖修改transmission默认账户密码 2020-03-15 16:36:52 3点赞 32收藏 2评论 前两天买了20多买了腾讯的10年域名,实名认证后dnspod解析到了家里的群晖上面,这下 ...

  2. html中验证密码中是包含字母,在JavaScript中确认密码验证

    在JavaScript中确认密码验证 在本章中,我们将讨论使用JavaScript进行密码验证.每当用户在任何网站或应用上创建帐户时,我们都需要验证密码.因此,我们必须验证有效的密码并进行确认密码验证 ...

  3. Mongodb 副本集+分片集群搭建

    环境需求: 在三台机器上搭建副本集,在副本集上做分片 服务器IP: 192.168.1.232/192.168.1.238/192.168.1.241 安装Mongodb all nodes: tar ...

  4. (2)MongoDB副本集自动故障转移原理(含客户端)

    前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的副本集均在主节点读写,辅助节点冗余部署,形成高可用和备份,具备自动故障转移能力. 集群心跳保活 ...

  5. mongodb副本集+分片集群部署 step by step

    mongodb副本集+分片集群部署step by step 本文只讲述mongodb副本集+分片集群的部署,关于mongdb shading & replica set原理优点等不在本文讨论范 ...

  6. 数据库系列之MongoDB副本集集群环境

    MongoDB集群环境有3种模式:主从复制.副本集和分片,本文详细介绍副本集模式的部署和配置,并进行测试验证. 数据库系列之MongoDB主从复制集群环境 数据库系列之MongoDB副本集集群环境 数 ...

  7. MongoDB副本集详解与搭建

    1. 简介 MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务. 副本集可提供冗余和高可用性,是所有生产部署的基础.也可以说,副本集类似于有自动故障恢复功能的主从 ...

  8. MongoDB - 副本集简介

    简介 在 MongoDB 中,副本集指的是一组 MongoDB 服务器实例掌管同一个数据集,实例可以在不同的机器上. 其中一个用于处理写操作的是主节点(Primary),还有多个用于保存主节点的数据副 ...

  9. MongoDB副本集搭建(超级详细)

    MongoDB 副本集原理 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据 ...

最新文章

  1. 尝试Java,从入门到Kotlin(上)
  2. Redis 击穿、穿透、雪崩产生原因以及解决思路
  3. PCB Editor 布线后操作
  4. 【GPU精粹与Shader编程】(一) 全系列核心知识点总览
  5. 如何使用 Node.js 访问 SAP HANA Cloud 数据库里的数据
  6. 编辑了基因,就能成为人生赢家?5本书给你答案
  7. 如何使用ant_从 0 开始,成为 Ant-Design Contributor
  8. java导出excel超出255,快逸报表页面超过255列导出excel
  9. AndroidQQ登录接入详细介绍(kotlin搭建)
  10. 2010年中兴面试题
  11. eclipse上svn创建分支、合并、切换
  12. 新蒂下午茶体基本版SentyTEA-Basic
  13. 《淘宝技术这十年》读书笔记 (一).淘宝网技术简介及来源
  14. 编程语言与冯诺伊曼体系结构
  15. Dell居然用EMS给我寄发票
  16. 深入探索Android布局优化(上)
  17. WPS Mathtype添加到工具栏 Word Mathtype添加到工具栏
  18. 高项、高级项目管理师论文-进度管理
  19. MMORPG游戏AOI解决方案
  20. HDU 3549 网络流水题

热门文章

  1. S3C2440上MMC/SD卡驱动分析(二)
  2. Linux配置163源
  3. 最浪漫的三个字不是“我爱你”,而是“在一起”。
  4. parallels desktop 中ubuntu忘记密码
  5. ITU-BT601与ITU BT656的基础知识
  6. 163邮箱java通用下载_java_java实现163邮箱发送邮件到qq邮箱成功案例,下载和上传附件、发送短信和 - phpStudy...
  7. php放量文档,短线高手指标
  8. 局域网网速变慢的故障细致分析
  9. 5.0QQ空间全套模块装扮:爱心情侣套装
  10. amp quot memory c语言,c volatile 关键字