美文网首页
使用DockerCompose搭建MongoDB Replica

使用DockerCompose搭建MongoDB Replica

作者: MathCEC | 来源:发表于2020-08-28 09:28 被阅读0次

使用虚拟机或者物理机直接搭建的话,可以直接按照官网文档来。但是官方并没有提供共对应的Docker的安装文档(社区版没有,企业版是有的,但是哎),只有DockerHub里面有对应的内容也只是单节点,这个是不能用于生产环境的。
官网文档地址:
无密码安装:
https://docs.mongodb.com/manual/administration/replica-set-deployment/
安全保障:https://docs.mongodb.com/manual/tutorial/deploy-replica-set-with-keyfile-access-control/#deploy-repl-set-with-auth

为了使用本安装文档,首先需要准备环境:

Docker
Docker-Compose

同时您需要要一定的Docker使用的经验

使用这种容器编排的好处就是一个yaml文件走天下:(将会直接在文件后紧跟注释解释简单的东西)

# 该Yaml文件改编自DockerHub中的配置文件,地址: https://hub.docker.com/_/mongo
version: '3.1'
services:
  mongo:
    image: mongo:4.4.0 #根据需要选择自己的镜像
    restart: always
    ports:
     - 27017:27017 #对外暴露停供服务的端口,正式生产的时候理论不用暴露。
    volumes:
     - "./data/mongodbpri/db:/data/db" # 映射数据文件
     - "./data/mongodbpri/configdb:/data/configdb" # 映射数据库配置
     - "./data/mongo_key/mongo_key.sec:/mongo_key.sec" #映射密钥文件
    command: ['--replSet','rs0','--bind_ip_all','--keyFile','/mongo_key.sec']  # 看下面的解释
  mongo-s1:
    image: mongo:4.4.0
    restart: always
    volumes:
     - "./data/mongodbs1/db:/data/db"
     - "./data/mongodbs1/configdb:/data/configdb"
     - "./data/mongo_key/mongo_key.sec:/mongo_key.sec"
    command: ['--replSet','rs0','--bind_ip_all','--keyFile','/mongo_key.sec']
  mongo-s2:
    image: mongo:4.4.0
    restart: always
    volumes:
     - "./data/mongodbs2/db:/data/db"
     - "./data/mongodbs2/configdb:/data/configdb"
     - "./data/mongo_key/mongo_key.sec:/mongo_key.sec"
    command: ['--replSet','rs0','--bind_ip_all','--keyFile','/mongo_key.sec']
  express: #官方提供的一个用来管理数据库的WEB工具
    image: mongo-express:0.54
    restart: always
    ports:
     - 15000:8081
    environment:
      ME_CONFIG_MONGODB_SERVER: mongo #Primary的节点(我暂时没有找到对应的自动切换的方法)
      ME_CONFIG_BASICAUTH_USERNAME: admin #进入页面的用户名
      ME_CONFIG_BASICAUTH_PASSWORD: admin #进入页面的密码
      ME_CONFIG_MONGODB_ADMINUSERNAME: root # 具有Root权限的Mongo的账户
      ME_CONFIG_MONGODB_ADMINPASSWORD: root # 上面Root用户的密码

  • 解释 ['--replSet','rs0','--bind_ip_all','--keyFile','/mongo_key.sec']
    • --replSet 指定副本集的标示 rs0,注意属于一个副本集的replSet必须一样
    • --bind_ip_all 允许所有的IP链接,实际当中可以限制你的Docker-Net的内网地址
    • --keyFile 指定副本集之间的密钥为/mongo_key.sec 来增加安全性

keyFile的生成办法其实很多,但是我们直接采用官网Demo中的openssl rand -base64 756 > <path-to-keyfile> && chmod 400 <path-to-keyfile> 权限十分重要。此处我们放到 ./data/mongo_key/mongo_key.sec

此时创建文件 docker-compose.yml,并将上面的代码复制进去,按照自己的要求改造一下,同时创建好对应的几个目录用来挂载。目录详见配置中volumes

此时,我们执行docker-compose up -d启动这四个Docker容器;
随后使用
docker-compose exec mongo bash
进入我们的打算的Primary(ZZZQ),使用
mongo
进入mongo shell,执行初始化的命令:
rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "mongo:27017" }, { _id: 1, host: "mongo-s1:27017" }, { _id: 2, host: "mongo-s2:27017" } ] })
顺序执行:
rs.conf()
rs.status()

rs.status 在哪台机器执行,哪台机器就是Primary

一个副本集就搭建好了,此时创建一个ROOT用户:

db.createUser({user: 'root', pwd: 'root', roles: ['root']})

MongoExpress 就可以用了。

© MahtCEC 2020年8月25日-~

相关文章

网友评论

      本文标题:使用DockerCompose搭建MongoDB Replica

      本文链接:https://www.haomeiwen.com/subject/njvksktx.html