原创第1篇:Docker MongoDB 最简单副本集(集群)部署

Posted Xoppen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创第1篇:Docker MongoDB 最简单副本集(集群)部署相关的知识,希望对你有一定的参考价值。

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


    是最简单的一个


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


那我们直接入主题:


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


首先创建文件(这文件的路径想在哪里创建随你喜欢,本文演示是选取root文件夹)但要和下面的命令路径对应:

   在 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: "mongoRs" # 副本集的名称

    (集群内部验证官方推荐使用 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上起三个实例,命令如下:

docker run -di --name=mongo0 -p 27018:27017 -v /root/mongo0/configdb:/data/configdb/ -v /root/mongo0/db/:/data/db/ 785c65f61380(镜像名称或id)--replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.confdocker run -di --name=mongo1 -p 27019:27017 -v /root/mongo1/configdb:/data/configdb/ -v /root/mongo1/db/:/data/db/ 785c65f61380(镜像名称或id)--replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.confdocker run -di --name=mongo2 -p 27020:27017 -v /root/mongo2/configdb:/data/configdb/ -v /root/mongo2/db/:/data/db/ 785c65f61380(镜像名称或id)--replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf
/root/mongo0/configdb:/data/configdb/ 这是映射MongoDB的配置(但创建实例后里面没配置的,感觉好像没啥用,反正这样玩就对了)(这个路径随你写,但先要创建好)/root/mongo0/db/:/data/db/ 这是映射MongoDB的储存数据的路径(这个路径随你写,但先要创建好)--replSet "mongoRs" "mongoRs" 这是你的集群的名称(一定要有 replSet 要不然机器认为你不是以副本集的形式启动,创建不了集群)-f /data/configdb/mongod.conf 这是以这个配置文件启动mongodb


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

运行以下命令:

docker exec -it fb1517df4885 mongo admin

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


原创第1篇:Docker MongoDB 最简单副本集(集群)部署

rs.initiate({_id:"mongoRs",  members:[{_id:0,host:"192.168.0.1:27018"}, {_id:1,host:"192.168.0.1:27019"}, {_id:1,host:"192.168.0.1:27020"}] });

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

原创第1篇:Docker MongoDB 最简单副本集(集群)部署

可以输入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


以上是关于原创第1篇:Docker MongoDB 最简单副本集(集群)部署的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose 配置 mongodb 副本集/复制集

[原创]在Docker上部署mongodb分片副本集群。

《MongoDB入门教程》第05篇 MongoDB数据类型

《MongoDB入门教程》第05篇 MongoDB数据类型

《MongoDB入门教程》第05篇 MongoDB数据类型

《MongoDB入门教程》第01篇 MongoDB简介