基於 Docker-compose 構建 MongoDB 副本集(帶權限)

開頭嘮叨一下 💬

  • 本篇教程純乾貨!不講 MongoDB 副本集的原理!不講 Docker-compose 的原理!
  • 乾的不能再幹的乾貨!
  • 本教程 Windows 可能勸退,僅在 MacLinux 上測試過

構建要點 📁

  • 須要在部署機器上生成 openssl 的 keyfile
  • 本教程沒有把 MongoDB 的數據文件夾掛載出來(自行設置 volumes 便可)

構建步驟 📖

  • 一、確保你的機器上有 openssl 命令,不然沒法生成 keyfile
  • 二、修改構建文件中的用戶名,密碼(你也能夠不修改)
  • 三、執行構建腳本中的腳本
  • 四、😊 上述步驟都沒問題以後,再參照構建以後的步驟進行操做。

構建腳本 💻

#!/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() 查看狀態便可。
相關文章
相關標籤/搜索