美文网首页
使用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