Py学习  »  docker

基于 Docker-compose 构建 MongoDB 副本集(带权限)

NullSpider • 4 年前 • 297 次点击  
阅读 6

基于 Docker-compose 构建 MongoDB 副本集(带权限)

开头唠叨一下 💬

  • 本篇教程纯干货!不讲 MongoDB 副本集的原理!不讲 Docker-compose 的原理!
  • 干的不能再干的干货!
  • 本教程 Windows 可能劝退,仅在 MacLinux 上测试过

构建要点 📁

  • 需要在部署机器上生成 openssl 的 keyfile
  • 本教程没有把 MongoDB 的数据文件夹挂载出来(自行设置 volumes 即可)

构建步骤 📖

  • 1、确保你的机器上有 openssl 命令,否则无法生成 keyfile
  • 2、修改构建文件中的用户名,密码(你也可以不修改)
  • 3、执行构建脚本中的脚本
  • 4、😊 上述步骤都没问题之后,再参照构建之后的步骤进行操作。

构建脚本 💻

#!/bin/bash
# 生成 keyfile
mkdir $HOME/.mongoReplSet/keyfile
openssl rand -base64 745 > $HOME/.mongoReplSet/keyfile/mongoReplSet-keyfile
chmod 600 $HOME/.mongoReplSet/keyfile/mongoReplSet-keyfile
# 启动 Docker
docker-compose -f local-mongo.yml up -d
复制代码

构建文件 📃

version: '3.1'
services:
  mongo1:
    image: mongo
    hostname: mongo1
    container_name: mongo1
    restart: always
    ports:
      - 27017:27017
    volumes:
      - $HOME/.mongoReplSet/keyfile:/data/keyfile
    environment:
      MONGO_INITDB_ROOT_USERNAME: rootMongoDB
      MONGO_INITDB_ROOT_PASSWORD: rootMongoDB20191105
    command: mongod --auth --keyFile /data/keyfile/mongoReplSet-keyfile --bind_ip_all --replSet rs0

  mongo2:
    image: mongo
    hostname: mongo2
    container_name: mongo2
    restart: always
    ports:
      - 27018:27017
    volumes:
      - $HOME/.mongoReplSet/keyfile:/data/keyfile
    environment:
      MONGO_INITDB_ROOT_USERNAME: rootMongoDB
      MONGO_INITDB_ROOT_PASSWORD: rootMongoDB20191105
    command: mongod --auth --keyFile /data/keyfile/mongoReplSet-keyfile --bind_ip_all --replSet rs0

  mongo3:
    image: mongo
    hostname: mongo3
    container_name: mongo3
    restart: always
    ports:
      - 27019:27017
    volumes:
      - $HOME/.mongoReplSet/keyfile:/data/keyfile
    environment:
      MONGO_INITDB_ROOT_USERNAME: rootMongoDB
      MONGO_INITDB_ROOT_PASSWORD: rootMongoDB20191105
    command: mongod --auth --keyFile /data/keyfile/mongoReplSet-keyfile --bind_ip_all --replSet rs0
复制代码

构建之后 📃

  • 启动之后按以下流程进行:
    • docker exec -it mongo1 /bin/bash
    • 进入 docker 以后, mongo -u <用户名> -p <密码>
    • rs 初始化
    rs.initiate(
      {
        _id : 'rs0',
        members: [
          { _id : 0, host : "mongo1:27017" },
          { _id : 1, host : "mongo2:27017" },
          { _id : 2, host : "mongo3:27017" }
        ]
      }
    )
    复制代码
    • 最后通过 rs.status() 查看状态即可。
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48888
 
297 次点击