DockerCompose MongoDB 副本集(集群) (客户端验证密码 - 集群内部使用mongodbKeyfile验证 ) 部署
本部署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验证 ) 部署相关推荐
- 群晖服务器密码修改,群晖修改transmission默认账户密码
群晖修改transmission默认账户密码 2020-03-15 16:36:52 3点赞 32收藏 2评论 前两天买了20多买了腾讯的10年域名,实名认证后dnspod解析到了家里的群晖上面,这下 ...
- html中验证密码中是包含字母,在JavaScript中确认密码验证
在JavaScript中确认密码验证 在本章中,我们将讨论使用JavaScript进行密码验证.每当用户在任何网站或应用上创建帐户时,我们都需要验证密码.因此,我们必须验证有效的密码并进行确认密码验证 ...
- Mongodb 副本集+分片集群搭建
环境需求: 在三台机器上搭建副本集,在副本集上做分片 服务器IP: 192.168.1.232/192.168.1.238/192.168.1.241 安装Mongodb all nodes: tar ...
- (2)MongoDB副本集自动故障转移原理(含客户端)
前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的副本集均在主节点读写,辅助节点冗余部署,形成高可用和备份,具备自动故障转移能力. 集群心跳保活 ...
- mongodb副本集+分片集群部署 step by step
mongodb副本集+分片集群部署step by step 本文只讲述mongodb副本集+分片集群的部署,关于mongdb shading & replica set原理优点等不在本文讨论范 ...
- 数据库系列之MongoDB副本集集群环境
MongoDB集群环境有3种模式:主从复制.副本集和分片,本文详细介绍副本集模式的部署和配置,并进行测试验证. 数据库系列之MongoDB主从复制集群环境 数据库系列之MongoDB副本集集群环境 数 ...
- MongoDB副本集详解与搭建
1. 简介 MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务. 副本集可提供冗余和高可用性,是所有生产部署的基础.也可以说,副本集类似于有自动故障恢复功能的主从 ...
- MongoDB - 副本集简介
简介 在 MongoDB 中,副本集指的是一组 MongoDB 服务器实例掌管同一个数据集,实例可以在不同的机器上. 其中一个用于处理写操作的是主节点(Primary),还有多个用于保存主节点的数据副 ...
- MongoDB副本集搭建(超级详细)
MongoDB 副本集原理 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据 ...
最新文章
- 尝试Java,从入门到Kotlin(上)
- Redis 击穿、穿透、雪崩产生原因以及解决思路
- PCB Editor 布线后操作
- 【GPU精粹与Shader编程】(一) 全系列核心知识点总览
- 如何使用 Node.js 访问 SAP HANA Cloud 数据库里的数据
- 编辑了基因,就能成为人生赢家?5本书给你答案
- 如何使用ant_从 0 开始,成为 Ant-Design Contributor
- java导出excel超出255,快逸报表页面超过255列导出excel
- AndroidQQ登录接入详细介绍(kotlin搭建)
- 2010年中兴面试题
- eclipse上svn创建分支、合并、切换
- 新蒂下午茶体基本版SentyTEA-Basic
- 《淘宝技术这十年》读书笔记 (一).淘宝网技术简介及来源
- 编程语言与冯诺伊曼体系结构
- Dell居然用EMS给我寄发票
- 深入探索Android布局优化(上)
- WPS Mathtype添加到工具栏 Word Mathtype添加到工具栏
- 高项、高级项目管理师论文-进度管理
- MMORPG游戏AOI解决方案
- HDU 3549 网络流水题
热门文章
- S3C2440上MMC/SD卡驱动分析(二)
- Linux配置163源
- 最浪漫的三个字不是“我爱你”,而是“在一起”。
- parallels desktop 中ubuntu忘记密码
- ITU-BT601与ITU BT656的基础知识
- 163邮箱java通用下载_java_java实现163邮箱发送邮件到qq邮箱成功案例,下载和上传附件、发送短信和 - phpStudy...
- php放量文档,短线高手指标
- 局域网网速变慢的故障细致分析
- 5.0QQ空间全套模块装扮:爱心情侣套装
- amp quot memory c语言,c volatile 关键字