Ubuntu 通过 Docker 单机部署3节点mongodb 副本集

查看几十篇教程,折腾了一天半,终于成功!

第一次部署完成后迅速试了一下数据库的同步功能,发现三个数据库可以正常的同步,非常开心;后来发现,这居然不需要用密码!明明设置了用户名密码,但是就算不填也可以访问数据库,这要是部署出去,还不立马完蛋。

之前被小弟狠狠的坑了一把,没有设置数据库的密码,本来以为限制IP访问就万事大吉,后来由于需要,把IP开了出来,结果没过半天,数据库里的数据就被删了,对方还留下了一个比特币账号要求打钱,还好那个数据库只是个测试库,里面的数据并不重要。

废话不多说了,搞技术的就一个字:干

首先是docker相关的内容,大家可以移步这里,官方文档,如何通过docker去拉镜像,如何装docker等,这里就不多说了,大家自己看教程

Docker 安装 MongoDB | 菜鸟教程 (runoob.com)

镜像拉到之后,剩下的就是容器的相关操作,咱们重点来这方面的内容,当然,我也不是看官方文档的,我参考的是一篇前辈的文章:

(35条消息) Docker MongoDB 最简单副本集(集群) (客户端验证密码 - 集群内部使用mongodbKeyfile验证 ) 部署_xoppen的博客-CSDN博客

在服务器里面创建文件夹

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

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

net:
  port: 27017                                      # 这是启动端口
  bindIp: 0.0.0.0                                  # 允许哪些ip连接(好像和下面的命令参数 --bind_ip_all 相类似的作用)
systemLog:
  logAppend: true                                 # 重新启动的mongodb的时候日志拼接在以前的日志文件上,不用新建
security: 
  keyFile: "/data/configdb/mongodbKeyfile.key"    # 这个路径很重要(注意这个路径是下面容器映射过的路径)
  clusterAuthMode: "keyFile"
  #authorization: "enabled"                       # 开启客户端连接验证(这行我先注释掉了)
replication: 
  replSetName: "mongoRs"                          # 副本集的名称

里面那个Key文件是通过命令生成的

openssl rand -base64 756 > /root/mongo0/configdb/mongodbKeyfile.key
cp /root/mongo0/configdb/mongodbKeyfile.key  /root/mongo1/configdb
cp /root/mongo0/configdb/mongodbKeyfile.key  /root/mongo2/configdb

chmod 400 /root/mongo0/configdb/mongodbKeyfile.key
chmod 400 /root/mongo1/configdb/mongodbKeyfile.key
chmod 400 /root/mongo2/configdb/mongodbKeyfile.key

重点来了,把这个key文件拷贝到另外两个mongo1  ,mongo2相同的目录下面

然后前期工作已经准备妥当了,开始主题吧!

docker run -di --name=mongo0 -p 37017:27017 -v /root/mongo0/configdb:/data/configdb/ -v /root/mongo0/db/:/data/db/  你的镜像名或镜像id  --replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf
 
docker run -di --name=mongo1 -p 47017:27017 -v /root/mongo1/configdb:/data/configdb/ -v /root/mongo1/db/:/data/db/  你的镜像名或镜像id  --replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf
 
docker run -di --name=mongo2 -p 57017:27017 -v /root/mongo2/configdb:/data/configdb/ -v /root/mongo2/db/:/data/db/  你的镜像名或镜像id  --replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf

这里主要配置是docker对于mongodb的映射,mongoRs是副本集的名字,还有端口号相关的映射

好了之后通过
docker  ps -a

就可以看到容器启动的情况,正常情况下是应该都起来了

我们随意进入一个容器

docker exec -it mongo0 mongo admin

然后进行初始化:

rs.initiate({_id:"mongoRs", members:[{_id:0,host:"xxx.xxx.xxx.xxx:37017"},{_id:1,host:"xxx.xxx.xxx.xxx:47017"},{_id:2,host:"xxx.xxx.xxx.xxx:57017"}]});

然后集群创建成功!!!

但是这个时候数据库是没有验证就可以登录的,我们需要设置用户名密码

db.createUser({ user:'admin',pwd:'password',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

然后通过工具连接数据库发现三个数据库都需要密码才能连接了,至此,mongodb  3节点副本集配置完毕,其实会了以后觉得特别简单,现在10分钟我就能搭一个了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值