1. 程式人生 > 程式設計 >基於 Docker-compose 構建 MongoDB 副本集(帶許可權)

基於 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() 檢視狀態即可。